{"author":"caliChander","children":[{"author":"dustingetz","children":[{"author":"CharlieDigital","children":[{"author":"Merad","children":[{"author":"CharlieDigital","children":[],"created_at":"2025-09-17T23:13:57.000Z","created_at_i":1758150837,"id":45282576,"options":[],"parent_id":45280714,"points":null,"story_id":45277193,"text":"Yes; I think that&#x27;s one thing that made this transition more sensible: we are not really sharing much of the BE with the FE and most of it is at the boundary already anyways.","title":null,"type":"comment","url":null}],"created_at":"2025-09-17T20:04:06.000Z","created_at_i":1758139446,"id":45280714,"options":[],"parent_id":45278746,"points":null,"story_id":45277193,"text":"For basic CRUD like is emphasized in TFA you probably only need EF models to represent the db and DTOs to form the input&#x2F;output contracts of the API.  Many .Net shops (claim to) do DDD and will have an extra layer of domain models, but if you understand that your API is primarily CRUD they&#x27;re just unnecessary complexity.<p>While you won&#x27;t be able to share your back end models with the front end, OpenApi spec generation is pretty much automatic so you can generate the models or client code.","title":null,"type":"comment","url":null},{"author":"junto","children":[],"created_at":"2025-09-19T00:35:24.000Z","created_at_i":1758242124,"id":45296670,"options":[],"parent_id":45278746,"points":null,"story_id":45277193,"text":"I don\u2019t know if you\u2019re using this already but there are quite a few tools to autogenerate the typescript api clients from your backend code every time you build. Makes life super easy. You can also just do it in your CI&#x2F;CD.","title":null,"type":"comment","url":null},{"author":"sajadjalilian","children":[{"author":"kant2002","children":[],"created_at":"2025-09-19T15:52:00.000Z","created_at_i":1758297120,"id":45303023,"options":[],"parent_id":45300121,"points":null,"story_id":45277193,"text":"What do you use for HTMX in Razor? any library or some manual plumpbinng? How do you disable layout?","title":null,"type":"comment","url":null}],"created_at":"2025-09-19T10:44:39.000Z","created_at_i":1758278679,"id":45300121,"options":[],"parent_id":45278746,"points":null,"story_id":45277193,"text":"After thinking for a year about my frontend choose; I decided to go with Razor-Pages + HTMX for all my new projects from now on.","title":null,"type":"comment","url":null}],"created_at":"2025-09-17T17:24:33.000Z","created_at_i":1758129873,"id":45278746,"options":[],"parent_id":45277231,"points":null,"story_id":45277193,"text":"Motion eng here: yes, this is a pure backend change; FE remains powered by React and TS with no plans to change it any time soon.<p>Main pain points with TS have become more obvious as the team grew and the codebase resulted in a multitude of different models representing the same thing.<p>- Prisma model representing the things (plural because Prisma generates a ton of variants for the different read&#x2F;write scenarios) going in&#x2F;out of the DB<p>- Zod models for OpenAPI generation<p>- Zod models for deserialization where we have `jsonb`<p>- DTO models at the boundary<p>- Additional front-end payload models that wrap the DTOs<p>A developer building a simple API endpoint do to a read will often up writing a handful of models for the same entity to move it back and forth...A lot of this work simply ends up being related to the loss of runtime types requiring a lot more modeling work creating a spaghetti of Zod and types.<p>Lots of papercuts in day-to-day and increasingly difficult to get otherwise competent engineers onboarded.<p>At least I&#x27;m not under the impression that this is a Silver Bullet.  Will C# make it better?  We&#x27;ll see!","title":null,"type":"comment","url":null}],"created_at":"2025-09-17T15:44:55.000Z","created_at_i":1758123895,"id":45277231,"options":[],"parent_id":45277193,"points":null,"story_id":45277193,"text":"they seem to mean <i>on the backend</i>","title":null,"type":"comment","url":null},{"author":"fabian-hiller","children":[],"created_at":"2025-09-17T15:44:59.000Z","created_at_i":1758123899,"id":45277232,"options":[],"parent_id":45277193,"points":null,"story_id":45277193,"text":"Great article!","title":null,"type":"comment","url":null},{"author":"dafzal","children":[],"created_at":"2025-09-17T15:46:31.000Z","created_at_i":1758123991,"id":45277254,"options":[],"parent_id":45277193,"points":null,"story_id":45277193,"text":"With code becoming increasingly LLM generated, static typing improves evaluation of code compile time. So A+ for _type safe_ AI generated PRs :).","title":null,"type":"comment","url":null},{"author":"rvz","children":[{"author":"CharlieDigital","children":[],"created_at":"2025-09-17T17:16:50.000Z","created_at_i":1758129410,"id":45278640,"options":[],"parent_id":45277310,"points":null,"story_id":45277193,"text":"They are close enough IMO that most devs can probably competently move between the two.<p>I think the big gains come from a more mature ecosystem of things that &quot;just work&quot;.  e.g. EFC vs Prisma or Drizzle with EFC having, for example, automatic change tracking and automatic up&#x2F;down migrations.<p>The two NPM supply chain attacks this week also highlight another issue with the ecosystem in general.<p>We&#x27;ll see how this change goes and evolves in Motion; C# is still relatively rare for startups, but at series C, it&#x27;s no longer a seed stage startup and it increasingly feels like &quot;it&#x27;s just another distributed enterprise backend&quot; (or at least it <i>should</i> be).","title":null,"type":"comment","url":null}],"created_at":"2025-09-17T15:51:00.000Z","created_at_i":1758124260,"id":45277310,"options":[],"parent_id":45277193,"points":null,"story_id":45277193,"text":"TypeScript is generally a horrific language to use on the backend and especially for performance and even as a compiler. Just ask the TypeScript developers rewritting the TS compiler in Golang with all the problems they encountered using it.<p>C# is a much better choice to use for the backend and also a better designed language in general.","title":null,"type":"comment","url":null},{"author":"pedroigor91","children":[{"author":"bigonlogn","children":[{"author":"aeonax","children":[],"created_at":"2025-09-17T23:21:53.000Z","created_at_i":1758151313,"id":45282657,"options":[],"parent_id":45279885,"points":null,"story_id":45277193,"text":"If Visual Studio isn&#x27;t to your liking then you can look at Rider or Visual Studio Code.<p>Rider should make anyone who is used to JetBrains&#x27; other products fairly happy.","title":null,"type":"comment","url":null}],"created_at":"2025-09-17T18:54:28.000Z","created_at_i":1758135268,"id":45279885,"options":[],"parent_id":45279702,"points":null,"story_id":45277193,"text":"Also, you can achieve some pretty fast development velocity with .NET. C# is intuitive and the tools are great. I know everyone complains about Visual Studio, but even it&#x27;s most vocal complainers will admit it sets the industry standard for debugging.<p>One sticking point is that the tools, while community and small projects, are all behind a license. But, they are free for small teams making under something like $1M&#x2F;year in revenue.","title":null,"type":"comment","url":null},{"author":"pier25","children":[{"author":"kasajian","children":[{"author":"pier25","children":[],"created_at":"2025-09-19T21:05:44.000Z","created_at_i":1758315944,"id":45306590,"options":[],"parent_id":45305978,"points":null,"story_id":45277193,"text":"I benchmarked rendering performance with Razor Pages and it was fantastic. I&#x27;m assuming Blazor Server is probably good too as long as you&#x27;re not using the wasm stuff. The dx on the other hand...<p>(just realized in my previous comment I didn&#x27;t specify I meant Blazor with WASM)","title":null,"type":"comment","url":null}],"created_at":"2025-09-19T20:12:23.000Z","created_at_i":1758312743,"id":45305978,"options":[],"parent_id":45280747,"points":null,"story_id":45277193,"text":"Are you experiencing any perf issues when using &quot;Blazor Server&quot;?","title":null,"type":"comment","url":null}],"created_at":"2025-09-17T20:07:04.000Z","created_at_i":1758139624,"id":45280747,"options":[],"parent_id":45279702,"points":null,"story_id":45277193,"text":"I transitioned from Node to dotnet for backend last year and it&#x27;s been great for APIs.<p>Love C#. Performance is fantastic. The framework and tooling are very mature (with exceptions like hot reload ugh). Entity Framework is amazing, by far the best ORM I&#x27;ve ever used.<p>I don&#x27;t feel like an expert by any means but I&#x27;m productive. Some days I do hit some stuff that takes me longer that I would&#x27;ve hoped but I&#x27;ve been able to solve everything I&#x27;ve faced.<p>I only use it for APIs though. The fullstack stuff is not great. Maybe if Microsoft improved hot-reload I would consider Razor with a Vite setup. Blazor is just useless for me. It&#x27;s very cool from a technical standpoint but your frontend is 10x slower and more bloated than the worst JS solution you can think of.<p>I connect my JS frontend layer with OpenAPI[1]. It&#x27;s been ok but the whole OpenAPI experience is not as smooth as I had hoped.<p>[1] <a href=\"https:&#x2F;&#x2F;openapi-ts.dev&#x2F;\" rel=\"nofollow\">https:&#x2F;&#x2F;openapi-ts.dev&#x2F;</a>","title":null,"type":"comment","url":null},{"author":"fabian2k","children":[{"author":"lloydatkinson","children":[{"author":"StrangeWill","children":[],"created_at":"2025-09-19T12:32:37.000Z","created_at_i":1758285157,"id":45300924,"options":[],"parent_id":45282774,"points":null,"story_id":45277193,"text":"Long-time C# Dev here -- yeah I&#x27;m still jealous of being able to find more esoteric libraries in Node, Python or PHP -- or just having more options then someone&#x27;s back-yard half-baked implementation sometimes.<p>On the other hand, I have nearly 20 languages under my belt and have been writing code professionally for 22 years -- I still use C# most of the time for a lot of other reasons, just this is one of the bigger pain points.","title":null,"type":"comment","url":null}],"created_at":"2025-09-17T23:32:12.000Z","created_at_i":1758151932,"id":45282774,"options":[],"parent_id":45280830,"points":null,"story_id":45277193,"text":"&gt; I think one weakness is the library ecosystem, the competitors are stronger there.<p>People say this but is it really the case? Look how much NPM has been attacked by malware recently, and all because people are indirectly installing simple colour libraries that are 20 layers deep of dependencies of dependencies. Then you get the fucking stupid stuff like `is-odd`.","title":null,"type":"comment","url":null}],"created_at":"2025-09-17T20:13:46.000Z","created_at_i":1758140026,"id":45280830,"options":[],"parent_id":45279702,"points":null,"story_id":45277193,"text":"I really like C#, and I would generally vastly prefer it to NodeJS on the backend. I think one weakness is the library ecosystem, the competitors are stronger there. Most of the time this doesn&#x27;t bother me as I also tend towards limiting dependencies in general.<p>There is a positive aspect to this, as it makes decisions easier as well. For many areas there is often a single good choice, there aren&#x27;t dozens of web frameworks you have to evaluate. There&#x27;s ASP.NET Core and then nothing else for a long time. And for the most part those are pretty good, so it does not feel limiting.<p>And C# doesn&#x27;t have to be too enterprisy and over-abstracted. The community does tend a bit too much towards unnecessary abstractions in my opinion, but you don&#x27;t have to use it that way.","title":null,"type":"comment","url":null},{"author":"brainzap","children":[{"author":"Nannooskeeska","children":[],"created_at":"2025-09-19T16:36:51.000Z","created_at_i":1758299811,"id":45303620,"options":[],"parent_id":45296754,"points":null,"story_id":45277193,"text":"I also work for a .NET shop and I absolutely love it. I&#x27;ll happily work with .NET for the rest of my career.","title":null,"type":"comment","url":null},{"author":"radicalbyte","children":[],"created_at":"2025-09-19T17:02:58.000Z","created_at_i":1758301378,"id":45303925,"options":[],"parent_id":45296754,"points":null,"story_id":45277193,"text":"It&#x27;s very different in an Enterprise setting compared to a setting where it&#x27;s being used by people who actually understand systems from logic gates up. The issues around .Net are in a lot of silly things people have been sold and an inertia of terrible frameworks if you&#x27;re still in the full-fat-framework land.","title":null,"type":"comment","url":null}],"created_at":"2025-09-19T00:49:22.000Z","created_at_i":1758242962,"id":45296754,"options":[],"parent_id":45279702,"points":null,"story_id":45277193,"text":"I work at a .net shop and it is pain. Do not recommend.","title":null,"type":"comment","url":null},{"author":"StrangeWill","children":[{"author":"brungarc","children":[],"created_at":"2025-09-21T02:37:22.000Z","created_at_i":1758422242,"id":45319544,"options":[],"parent_id":45300943,"points":null,"story_id":45277193,"text":"I experience the same. When I try to have a rational dialog about trade offs, there\u2019s nothing there. Or the \u201conly runs in Windows\u201d classic 10+ years outdated stuff \nI\u2019ve been writing C# on a Mac deploying on Linux for a decade.","title":null,"type":"comment","url":null}],"created_at":"2025-09-19T12:34:52.000Z","created_at_i":1758285292,"id":45300943,"options":[],"parent_id":45279702,"points":null,"story_id":45277193,"text":"We build a Shopify-leading platform on C# at a startup -- they got <i>so</i> much flak from colleagues about it being built on C# instead of Node or Python.<p>Absolutely no reason other than &quot;C# icky&quot; -- they ended up with a platform that is crazy fast (and fast scales way easier, it handles a dumb amount of traffic without a lot of crazy design)<p>Startup culture is toxic AF at times, bad engineering decisions for cargo cult stuff.","title":null,"type":"comment","url":null},{"author":"radicalbyte","children":[],"created_at":"2025-09-19T17:00:37.000Z","created_at_i":1758301237,"id":45303904,"options":[],"parent_id":45279702,"points":null,"story_id":45277193,"text":"We are (I mean I&#x27;m CTO &amp; know C# better than most) but the only real downside is that there are a lot of people around Microsoft tech who are antithetical to startups.<p>You have to be absolutely insane and&#x2F;or highly inexperienced to even consider Javascript&#x2F;Typescript on the back-end. Not only is the language a terrible match but the deep architectural failings of NPM have been clear for at least a decade.","title":null,"type":"comment","url":null}],"created_at":"2025-09-17T18:39:07.000Z","created_at_i":1758134347,"id":45279702,"options":[],"parent_id":45277193,"points":null,"story_id":45277193,"text":"I still don\u2019t understand why more startups don\u2019t adopt .NET. It\u2019s such a powerful technology. ASP.NET has some of the best performance benchmarks out there, C# is a rich and expressive language, and the ecosystem along with the standard libraries are stable and mature. You rarely run into the kind of headaches you often see with more \u201ctrendy\u201d stacks.<p>In many cases, the bias comes down to perception \u2014 .NET is seen as \u201centerprise\u201d or \u201clegacy,\u201d while in reality it\u2019s open-source, cross-platform, and very well-supported by Microsoft and the community. For a startup that needs stability and performance without reinventing the wheel, .NET can be a huge win.","title":null,"type":"comment","url":null},{"author":"vbilopav","children":[],"created_at":"2025-09-18T05:07:30.000Z","created_at_i":1758172050,"id":45285645,"options":[],"parent_id":45277193,"points":null,"story_id":45277193,"text":"It looks to me team is clueless about database development.<p>Typescript ORMz lol.<p>Soft deletes make indexing, well, problmatic to say at least. Use temporal tabls instead for point in time recovery. Nevertheless it could have been solved on a database level without any help from ORMs, lookup RLS. Still, screws up indexing strategy.","title":null,"type":"comment","url":null},{"author":"zengid","children":[],"created_at":"2025-09-19T17:02:06.000Z","created_at_i":1758301326,"id":45303917,"options":[],"parent_id":45277193,"points":null,"story_id":45277193,"text":"&gt; In the end, I decided on C Sharp, even though I had never used it professionally<p>I love C#, I use it every day, but who makes a decision like this?","title":null,"type":"comment","url":null},{"author":"brungarc","children":[],"created_at":"2025-09-21T02:33:03.000Z","created_at_i":1758421983,"id":45319521,"options":[],"parent_id":45277193,"points":null,"story_id":45277193,"text":".NET and C# are a great choice for web backend and CRUD apps.","title":null,"type":"comment","url":null}],"created_at":"2025-09-17T15:42:04.000Z","created_at_i":1758123724,"id":45277193,"options":[],"parent_id":null,"points":88,"story_id":45277193,"text":null,"title":"Moving off of TypeScript, 2.5M lines of code","type":"story","url":"https://engineering.usemotion.com/moving-off-of-typescript-e7bb1f3ad091"}
