Remix.run Logo
N_Lens 9 hours ago

.NET was a solid choice for backend builds before Node became so popular (And .NET is generally more performant than Node).

I hope this churn in .NET builds is temporary because a lot of people might be looking to go back to something stable especially after the recent supply chain attacks on the Node ecosystem.

chokolad 9 hours ago | parent | next [-]

> I hope this churn in .NET builds is temporary because a lot of people might be looking to go back to something stable especially after the recent supply chain attacks on the Node ecosystem.

Can you elaborate a bit? This article talks about internal machinery of building .net releases. What does that have to do with "this churn", whatever that is?

a1o 8 hours ago | parent | next [-]

My guess is if you build with .NET Framework you can just forever run your builds, but if your source code is based on newer .NET you have to update to a new version each year, and deal with all the work in upgrading your entire project, which also means everyone in your team is also upgrading their dev environment, and now you have new things in the language and the runtime to deal with, deprecation and all that. Plus lots of packages don’t update as fast when version changes occurs, so chances are you will probably take more work and use as few dependencies as possible if at all, which may cause a lot of work. Instead it’s best to, if you need to depend on something, to be a very big Swiss Army knife like thing.

I think node is just more flexible and unless .NET Framework like forever releases or much longer term support make a come back, there’s no good trade off from node, since you don’t even get more stability.

gregmac 7 hours ago | parent | next [-]

> if your source code is based on newer .NET you have to update to a new version each year

.NET has a really refreshingly sane release life cycle, similar to nodejs:

- There's a new major release every year (in November)

- Even numbers are LTS releases, and get 3 years of support/patches

- Odd numbers get 18 months of support/patches

This means if you target LTS, you have 2 years of support before the next LTS, and a full year overlap where both are supported. If you upgrade every release, you have at least 6 months of overlap

There's very few breaking changes between releases anyway, and it's often in infrastructure stuff (config, startup, project structure) as opposed to actual application code.

wolpoli 7 hours ago | parent | next [-]

> Odd numbers get 18 months of support/patches

The recently fixed the friction with odd number releases by providing 24 months of support.

fijiaarone 7 hours ago | parent | prev [-]

Ah, but if you use node.js you get breaking changes every other day from dependencies on dependencies you didn’t even know you had.

Krutonium 7 hours ago | parent | prev | next [-]

I think it's important to remember that Dotnet projects can use code built for older releases; to an almost absurd degree, and if you don't go to before the .NET Framework divide, you largely don't even need to change anything to move projects to newer frameworks. They largely just work.

The .Net platform is honestly the most stable it has ever been.

zmj 5 hours ago | parent | prev | next [-]

Recent experience report: I updated four of my team's five owned microservices to .net 10 over the past two weeks. All were previously on .net 8 or 9. The update was smooth: for the .net 9 services, I only had to update our base container images and the csproj target frameworks. For the .net 8 services, I also had to update the Mvc.Testing reference in their integration tests.

It's hard for me to imagine a version increment being much easier than this.

qingcharles an hour ago | parent [-]

I'm currently migrating dozens of projects to .NET 10. All of them so far were basically one line changes and a recompile.

You should be able to go from .NET 6->10 without almost any changes at all.

oaiey 2 hours ago | parent | prev | next [-]

.NET Framework had back then, when it was not in frozen state as it is now, every release a list of breaking changes. Modern .NET breaking changes are not worth talking about. Keeping up with the state of the art however is more interesting... But that is needed to be a solution for today and to stay relevant.

acedTrex 8 hours ago | parent | prev | next [-]

The past three years of dotnet upgrades have been completely painless for me.

neonsunset 6 hours ago | parent | prev [-]

Note how practitioners of .NET praise it and non-practitioners (users of .NET Framework) criticize it.

oaiey 2 hours ago | parent [-]

Or users of other programming tool chains.

da_chicken 8 hours ago | parent | prev [-]

What do you mean? The .Net ecosystem has been generalized chaos for the past 10 years.

A few years ago even most people actively working in .Net development couldn't tell what the hell was going on. It's better now. I distinctly recall when .Net Framework v4.8 had been released and a few months later .Net Core 3.0 came out and they announced that .Net Standard 2.0 was going to be the last version of that. Nobody had any idea what anything was.

.Net 5 helped a lot. Even then, MS has been releasing new versions of .Net at a breakneck pace. We're on .Net 10, and .Net Core 1.0 was 9 years ago. There's literally been a major version release every year for almost a decade. This is for a standard software framework! v10 is an LTS version of a software framework with all of 3 years of support. Yeah, it's only supported until 2028, and that's the LTS version.

Rohansi 6 hours ago | parent [-]

The only chaos occurred in the transition from .NET Framework to .NET (Core). Upgrading .NET versions is mostly painless now because the breaking changes tend to only affect very specific cases. Should take a few minutes to upgrade for most people.

pjmlp 2 hours ago | parent [-]

Except it is a bummer when one happens to have such specific cases.

It never takes a few minutes in big corp, everything has to be validated, the CI/CD pipelines updated, and now with .NET 10, IT has to clear permission to install VS 2026.

anonymous908213 9 hours ago | parent | prev | next [-]

Not sure about the past tense here. .NET is still excellent and getting even better with every release. What instability are you talking about? There was the leap to .NET Core which was majorly breaking, but that was almost 10 years ago now.

frank_nitti 7 hours ago | parent [-]

If they’re in a team similar to some I’ve worked with, engineers are barely getting comfortable with the shift away from .NET Framework (!)

There are legions of developers for whom Visual Studio on Windows is the only place they have ever been comfortable. And upgrading between versions of .NET is a point-click exercise between the various UIs (Visual Studio Installer, “Get New Components or Features”, and the NuGet package manager)

The advent of .NET Core happened to coincide with initiatives to adapt:

* toward the cloud and away from IIS and Windows Server

* toward Git and away from TFS

* toward remote CI/CD and away from “drag my files into inetpub”

* toward SPAs and away from ASP.NET XAML programming (Blazor notwithstanding)

* toward a broader toolkit where the familiarity with OSS and open specs is advantageous, and away from Visual Studio as the center of the universe (though it still arguably reigns supreme in its class of IDEs)

Coming from the Linux/Docker world before going deep in .NET, I was both resented and leaned on heavily for these teams’ transitions. Most of my teammates had never read the contents of their .csproj or .sln files, or run a build command from a terminal and read its log output. They were annoyed by my requests to do so when helping them troubleshoot; some just rejected the idea outright (“there’s no need to look at VS internals here”, “we shouldn’t need to run DOS commands in today’s world, VS should hable this!”)

I can definitely sympathize with developers who were sold on what seemed like a promise that deep VS/IIS/etc knowledge would be the rock-solid foundation for business software for the rest of their careers. During the uprooting process, other promises like “netstandard2.0 will be forever for your core libraries and all future .NET runtimes!” end up with asterisks the following year.

I am 100% in agreement that .NET dev team is doing an amazing job, but it’s precisely because of their continued shakeups when they see major opportunities to improve it from the ground up, and probably the same reason that others feel wary of it

jve 2 hours ago | parent | next [-]

Thanks for making me feel like a 10x dev :)

Anyways, I work with .NET Framework and .NET. Being a developer is a joy where you can learn daily new tricks and satisfy your curiosity.

So to me this reads so alien that people fail to learn new tricks within .NET world. For me it's like a stream of amazement: Ohh, this is so much better with new language features. Ohh, this code is so much more clean. Woa, logging is so simple with ILogger and I can plug whatever underlying log engine I want! Configuration via JSON files, niice. I can override with Env variables out of the box? Amazing. This all follows particular rules and patterns. Ohh, I can customize the way I read configuration any way I want if I need it so. Ohh, I can build and run from CLI using simple commands! Ohh, I can package in docker and run on Linux. Oh, wow, .csproj is so much more clean, gotta use SDK-style project for my .NET Framework projects too!

qingcharles an hour ago | parent | prev [-]

You're totally right on all those changes, and I think all of those things were the bane of .NET development. Getting rid of all the cruft in one swift operation was life-changing. Finally being able to junk IIS and deploy web apps to Linux running their own tight little web server (Kestrel) is fantastic.

arnonejoe 7 hours ago | parent | prev | next [-]

I love C#. When combined with JetBrains Rider it may be the most satisfying dev experience I’ve had in my career.

pjmlp 2 hours ago | parent | prev | next [-]

I feel the pain, as polyglot consultant, I would like to see more RFPs asking for .NET skills, unfortunely it seems it is all about nodejs, some Java, and plenty of low code tools (iPaaS).

At least exactly due to performance issues, I get some excuses to push for C++ addons in some cases.

smt88 6 hours ago | parent | prev | next [-]

.NET churns less than any other major stack. Every upgrade since Core 2 (released in 2017) has been minimally painful or, more recently, painless.

croes 6 hours ago | parent | prev | next [-]

Is nuget any different from npm

stuartd 3 hours ago | parent [-]

It is, shall we say, more curated

oaiey 2 hours ago | parent [-]

It has the benefit of being late to the game (like .NET was to Java).

martinald 9 hours ago | parent | prev | next [-]

This isn't really anything user facing. It's just yet again an example of why monorepos are better.

jerezzprime 9 hours ago | parent [-]

Anything is a monorepo if you submodule hard enough lol

mcny 4 hours ago | parent [-]

Why don't people use subtree?

https://www.atlassian.com/git/tutorials/git-subtree

tonyhart7 9 hours ago | parent | prev | next [-]

.Net need a "node" level of developer experience and perfomance of rust/zig since node/python ecosystem rewrite make it more perfomance than ever

I cant see .net win againts those odds tbh

smt88 6 hours ago | parent | next [-]

.NET has a far better developer experience than Node and is nearly as fast as Rust if written for performance, certainly much faster than Node or Python

tonyhart7 5 hours ago | parent [-]

numbers speak for themselves

oaiey an hour ago | parent | next [-]

Numbers are inflated not by choice but by force. Node is not a choice but a consequence of frontend heavy work. And JavaScript was made good using typescript by the guy who also created C#.

Same goes with Python with its data science and ML/AI background.

And the general malus is Microsoft as a company.

In summary: it is not the tech. It is the landscape.

zihotki 2 hours ago | parent | prev [-]

Would you mind providing yours as well as benchmarks used? All benchmarks I could find point to a different picture than described in parent comment

smashedtoatoms 5 hours ago | parent | prev [-]

[flagged]

tonyhart7 5 hours ago | parent [-]

downvoted for saying truth

who tf needs .Net when there are Go, Node(bun), Rust/Zig etc

1. Net is not faster than (Rust, Zig)

2. ecosystem is smaller (Node,Python)

3. less developer experience (Go,Node)

there is no need to fill up the gap

oaiey an hour ago | parent [-]

Rust is a tool not for application development. It has a huge space in drivers, renderers and other low level places.

Node and Python are dynamically typed and at least originally scripting focused. They are not the right choice for many development active which are focused.

.NET plays with Go and Java in the same category of use cases. And there it boils down to devs you have.

Regards ecosystem: I am at home in both, .NET and JavaScript (browser more) and I can tell you: ecosystem is in 2025 no problem. Was back in the 2010s.

About the devs: you have what you have and hire along. Like Java, it will not go away. You get good ones and bad ones. Like for any other language.

Let us be less religious here. Objectively, .NET is like Go and Java a fit contender for its niche and selection goes along the lines what you have as workforce/systems already in place. In a startup situation you follow the preferences of your CTO.

SamuelAdams 9 hours ago | parent | prev [-]

I love working with dotnet, but lately I’ve been writing more backend applications in Python. The code is simpler, testing is simpler since method privacy doesn’t really exist, and code is quicker to deploy because you do not have to compile it.

This could also change but in my experience AI is better at generating Python code versus dotnet.

martinald 9 hours ago | parent | next [-]

Problem is though Python is slow at runtime. May not matter for many use cases, but I've worked with a lot of startups that suffered terrible reliability problems because they chose Python (or Rails, or Node to some extent) and the service cannot handle peak time load without a lot of refactoring and additional app servers.

Depending on your framework Python is at best ~3x slower (FastAPI) and at worst ~20x (Django) than asp.net on the techempower benchmarks, which maps pretty well to my real world experience.

casper14 9 hours ago | parent | next [-]

Can confirm. Just finished load testing a FastApi service. Now the biggest selling point is that a lot of real backend never experience the level of load where this actually matters

mynameisash 8 hours ago | parent | prev | next [-]

I don't spend a lot of time building services, but the last few I've done, I actually went straight to Rust. The downside is that it's quite slow to develop -- I probably don't have the knowledge that others do, but it seems that frameworks could really use some work. That said, I love that I can find and fix most my problems during development. Building a service in Python means I'm constantly fixing issues in production.

.NET is certainly better than Python, but I'm not very happy with the type system and the code organization versus my Rust projects.

jtbaker 7 hours ago | parent | prev | next [-]

Not saying that it’s necessarily the right choice, but it opens up contributions to code to a broader user base and making those rapid iterations that tools like fastapi allow can be pretty important when proving out a concept early on.

Horses for courses… also, a Horizontal Pod Autoscaler and Load Balancer setup is pretty cheap.

WD-42 8 hours ago | parent | prev [-]

Most web apps are waiting on the DB anyway. Rarely have I seen the speed of the actual framework make any meaningful difference.

sanex 9 hours ago | parent | prev | next [-]

If you don't want your methods to be private make them public?

carry_bit 8 hours ago | parent [-]

Just make them internal and use [InternalsVisibleTo] on the assembly.

UltraSane 9 hours ago | parent | prev [-]

I'm moving from Python to Java because of how much easier it is to actually use all CPU cores in Java and strict typing prevents so many bugs and it is much faster. I don't think it is actually that much more complicated than Python in 2025.

martinald 9 hours ago | parent | next [-]

Agreed. It's sort of crazy how little people understand about multicore software design given nearly everyone is using machines with >8 CPU cores these days (even a cheap android phone tends to have 8 cpu cores these days).

In python and node it is _so_ painful to use multiple cores, whereas in .net you have parallel for loops and Task.WhenAll for over a decade. Java is similar in this sense that you don't have to do anything to use multiple cores and can just run multiple tasks without having to worry about passing state etc between 'workers'.

This actually becomes a really big problem for web performance, something I'm deeply passionate about. Not everything is just IO driven holdups, sometimes you do need to use a fair bit of CPU to solve a problem, and when you can't do it in parallel easily it ends up causing a lot of UX issues.

fijiaarone 7 hours ago | parent | next [-]

On most cloud deployments, you get one shared “virtual” core — whatever that means.

UltraSane 7 hours ago | parent [-]

No you get how ever many you choose and are willing to pay for. 1vCPU is not good for very much.

UltraSane 7 hours ago | parent | prev [-]

Even Guido van Rossum admits that if he had known how common high core count CPUs would become he wouldn't have chosen to use the GIL

mlhpdx 8 hours ago | parent | prev | next [-]

That’s one reason I’ve preferred .Net. Put ahead of time compilation on top and it is glorious.

zem 8 hours ago | parent | prev [-]

out of curiosity, why not kotlin? I had the impression it was the jvm language to reach for by default these days.

a57721 6 hours ago | parent | next [-]

I am doing backend in Kotlin, but I must admit that Java has been catching up quickly, and it seems like Kotlin has been shifting its focus to Kotlin Multiplatform. Modern Java is a good, pleasant language and a safer bet.

Gradle with Kotlin DSL is nice, what's annoying is Gradle's constant API reshuffling for the sake of it that breaks plugins. Some plugins also introduce pointless breaking changes just to have a fancier DSL.

The IDE support is not an issue in practice, in my opinion, because IDEA is the best IDE for both Java and Kotlin. The official Kotlin LSP was released 6 months ago, but I haven't tried it.

UltraSane 7 hours ago | parent | prev | next [-]

I'm dabbling and like it but there is just SO MUCH JAVA code. There are 1000 Java examples for every 1 Kotlin. Maybe LLMs make this less of an issue now though.

lock1 8 hours ago | parent | prev [-]

Has too much sugar, and without JetBrains IDE you're stuck with a plain text editor. Not sure if it's generalizable to normal Kotlin or not, but learning Gradle Kotlin DSL made me want to rip my hair out when trying to understand what happens under the hood.