Ask HN: Why is .NET never talked about as an option for solo/small team dev?

52 pointsposted 15 hours ago
by mnk47

Item id: 41614284

66 Comments

rsynnott

6 minutes ago

Microsoft… did themselves no favours with J++ and all that. I think a lot of people who were around in the late 90s/early noughties would still have severe difficulty trusting them, as a producer of developer tools.

Like, I get that they’ve been on a bit of a charm offensive for the last decade, and they’re the happy shiny new Microsoft, and all that, but I’d be cautious, myself.

And it’s just, well, not that compelling. C# a slightly better Java, but really Kotlin already has that covered, and the JVM ecosystem is generally better.

viraptor

14 hours ago

.net meant a Microsoft lock-in for a long time, so actual visual studio, Microsoft server, etc. with all the licensing issues attached to that. And as a simple web hosting solution, windows sucks whether you're thinking of third party hosting platforms, or your own deployments with automation.

But that changed a few years ago with dotnet being available for Linux and quite a bit more open. While you still effectively need VS to work with Blazor (or suffer), there are many other options for typical web apps. Whether you want to go MVC or something more bare bones, it's definitely a good option.

As to why it's not a popular option: I would guess that proper Linux dotnet has not been out for long enough to really change the idea of what .net4 was/meant. This applies to both sides too - there's lots of old .net people still unreasonably allergic to open source. I've used it for server apps on Linux when Mono was still the only option and was happy with it already then. It's a good system - go for it.

qazxcvbnm

11 hours ago

Hard to believe that .NET is now on Linux - .NET 4.0 feels like yesterday. The Windows factor was a big scare factor for me for sure; I won’t forget the time a client spent more than 70% of their hosting budget on Microsoft licensing fees…

Onavo

11 hours ago

Also, .NET loves leaving core features to paid/freemium third parties/cloud instead of offering it as a first class open source component. It makes it hard to justify buying into the ecosystem when it's a blatant funnel. Just look at how they do their OAuth:

https://learn.microsoft.com/en-us/aspnet/core/security/authe...

All cloud/paid solutions. At one point they were all in on open source but the tune quickly changed when they saw how much profit they were leaving on the table.

antisol

3 hours ago

> At one point they were all in on open source but the tune quickly changed when they saw how much profit they were leaving on the table.

Correction: At one point they said they were all-in on open source - 10 minutes after creating an innovative new open source product called ".net core", which is exactly like .net, but with all of the features you might actually be interested in stripped out.

Nobody in my circle talks about .net because we all saw immediately that it was just the same act again, if somewhat less openly hostile than Microsoft's previous MO.

jpc0

10 hours ago

OAuth is an internet standard and you can write a client in literally C if you in any way know HTTP, and I do mean YOU can do it.

I haven't been very deep in the .net ecosystem but haven't had any issues implementing an api woth auth and rate limiting etc using dotnet and nothing Microsoft licensed.

hyrix

5 hours ago

For a small/solo team, which is the audience under consideration, they probably want to spend their time on their core product and not reimplementing oauth.

sergiotapia

2 hours ago

in what world would a business pay me to write an oauth client instead of just reaching one of the dozens of open source implementations?

jpc0

an hour ago

I'm not saying they need to reimplment it. My argument is that it is absurdly simple in any batteries included stack to do OAuth even without specific support, not that .NET doesn't have a multitude of open source implementations that isn't what OP mentioned.

It's an API call to an external provider and like 2 endpoints on your side. If this doesn't take you at most a few hours to implement yourself then I don't think you should be relying on a library in the first place, go implement it in your spare time. Then you can use the library with your new found understanding of how absurdly easy it is.

Maybe you will learn about implicit flows and how OIDC would allow you to validate JWTs and never have to write a single line of server code to deal with OAuth.

Maybe you will learn about SCIM[1] and all the interesting stuff related to auth that you never bothered learning because the library does that. Maybe the business that is paying you would prefer SCIM + SAML/OIDC but you could not even begin to discuss is because your library doesn't do that.

[1] https://scim.cloud/

ahoka

9 hours ago

To be more precise: MS loves to make you think you need those, see also WebSocket support. But in reality you don’t need that, if you know what you are doing. Also don’t implement your authorization server folks, at least when possible.

paulproteus

14 hours ago

In a recent analysis of venture capital returns for companies based on programming language, for the top 50 Y Combinator companies at least as of 2019, Ruby is #1, and C# is just not in the list.

https://charliereese.ca/y-combinator-top-50-software-startup...

I have no affiliation with Y Combinator itself or the author of the post.

The particular analysis is pretty skewed in its own way, so you can take it with a pinch of salt.

As a general rule, programming languages have ecosystems and communities, and if you pick a language where quickly delivering high-value features to users/customers is part of the community, it helps your startup; you'll probably meet founders and get business advice if you go to a Ruby meetup, but less so at a C# one.

It's not the whole picture, since it doesn't speak to the technical part of your question.

taspeotis

14 hours ago

Probably a demographic thing, you’re asking a majority US audience (or at least a plurality). Here in Australia there’s a ton of boutique .NET stuff as well as bigger .NET products.

It works well, React/TS frontend plus ASP.NET Core/C# backend.

janmarsal

14 hours ago

I'm sure you could do it with modern dotnet. I just have a gut feeling that most people who go solo do it partly to escape their old corporate stack to try something different. So usually it means ditching Java/Dotnet. At least that was the case a decade or two ago. These days every corporate stack is javascript based and as a reaction people go HTMX+Go to escape React.

neonsunset

8 hours ago

When you are solo and not limited by poor team practices, C# becomes far more productive that practically any other language if you care about both single-developer productivity and scaling your project efficiently. Go is far up there on the list but it does not scale as well if you are proficient with the language. And of course Ruby, Python and other interpreted junk does not meet the bar at all :)

kumarvvr

12 hours ago

Its mainly cultural. .net is yet to penetrate the ever so crucial US university labs, currently dominated by the cool kids like node, python, etc.

Microsoft has made great big strides to simplify .net web development, where a simple hello world rest api is not much different than its counterpart in expressjs on node.

.net is truly a wonderful platform, but it carries too much baggage.

Tooling is also a bit bloated.

naming_the_user

13 hours ago

There is a heavy association of .NET with Microsoft, until recently it was pretty much a Windows platform.

It may not be any more, but to most people in the Linux world it just smells, and that's enough. It's like asking why people don't drink box wine. It's just not cool.

jmclnx

4 hours ago

I would add, if .NET ever starts becoming a thing on Linux, I am sure Mocrosoft will start making new enhancements proprietary and force some kind of lockin, forcing people to use specific components.

A non-proprietary example of this is systemd and Wayland that Red Hat seems to be pushing. They are not really that bad on their own, but I expect many important downstream applications will eventually require systemd and Wayland. Locking out the BSDs.

WhereIsTheTruth

12 hours ago

It's not about being "cool"

It's about the motives

"it's open source"

"it now works on linux"

it all doesn't matter if they'll go after your ass if you dare build tooling with their debugger (jetbrains)

or when they want to remove a feature overnight to make it exclusive to visual studio windows and behind a paywall

https://github.com/dotnet/sdk/issues/22247

it's this kind of things that makes it hard to recommend it to people, and Microsoft can't be trusted

exceptione

6 hours ago

MS is able to research and deliver top results in compilers and languages, while letting other groups making the most stupid decisions and partially derail those efforts.

That is why things can go very toxic. Windows is not suitable for use, there is no concept of privacy and MS has shown many times it doesn't respect users ownership.

MS has a leadership problem. It should have made clear internally that the free cross-platform developer tooling should cover everything for 98% of the developer community. They could keep diagramming and other enterprise features as a paid offering.

On the other hand: There is no competition for modern .net + Avalonia UI for fast and sleek native cross-platform desktop applications. Maybe Java + JavaFX, but I don't know enough about its current state.

naming_the_user

12 hours ago

I completely agree for what it's worth, sometimes it's just easier to be lazy.

For at least ten years now I don't know why anyone would work with Microsoft unless they had no other option.

idatum

12 hours ago

I run .NET 8 on FreeBSD 14. Even one of the BSDs has it now. Cool.

peutetre

14 hours ago

A lot of software development choices are driven by fashion. Much of the time the decision making is based on thinking like "this is something cool I have heard of and it will make me feel cool to use it".

irrelative

14 hours ago

It is, and small teams were often rebelling against incumbents, so rejecting the aesthetics of big companies was a good way to attract talent.

torginus

11 hours ago

Yeah. My first experience with the cloud was moving a small web server to an ECS docker container. The server used to log into a huge text file, which could be grep'd lightning fast or opened up in a text editor even when it grew to gigabytes of size.

When switching to AWS, I got to experience CloudWatch, and my first reaction was WTF is this ****? (and once again when I saw the bills)

neonsunset

8 hours ago

The problem is the average audience is just not technically sophisticated enough to understand that .NET is a _much_ cooler project with capabilities other languages only try to awkwardly stumble into (like portable SIMD). There has been a lot of largely ignored work, and the way ms markets it to web devs that could also write Python scripts is not helping because the underlying platform serves more technically challenging projects in a much better way. As of 2024, the entirety of Apache stack that is built on Java could massively benefit if a timeline changed and it was using .NET (both C# and F#) instead - none of the Lucene issues with manual memory management would ever happen, it would use less memory and be much faster at its hottest paths.

I'm almost regretting picking .NET because you are then forever cursed with "bitch, you live like this?" whenever trying out something different (the short list of issues alternatives suffer from: terrible sdk management, terrible package management or just lack of thereof, poor performance, a lot of unneeded boilerplate, unsound language semantics, poor tooling, poor quality ORMs (the main reason people hate ORMs is they never tried EF Core), few properly supported target platforms, limited languages do not let you express concepts nicely, no low-level primitives to write efficient impl., etc etc.)

journal

3 hours ago

I am absolutely using .NET as a solo dev on a very large project, and I have the same question. To me, it's the most vanilla language/framework/IDE combination. Modern .NET is difficult to trash or praise, because of that, no one talks about it. If you ever wanted to experience pure ASP.NET with minimal usage of SPA frameworks, check out https://github.com/denys-olleik/accounting.

jinushaun

8 hours ago

I used to work at a .NET shop. The reason I wouldn’t personally use .NET is MS lock-in. Open source is basically non-existent. Documentation is really bad for getting anything done in a headless way. I don’t enjoy Remote Desktop or running Windows in the cloud.

And while .NET is batteries included like Rails, I just don’t enjoy using it. The docs and frameworks aren’t written for nimble startups, but slow-moving enterprise companies. I know modern C# allows me to code like Ruby/Python/JS, but all the docs are written like 1990s Java. And the frameworks are designed that way too.

cyphax

8 hours ago

.Net has been (_almost_) entirely open source for years now. The whole closed source and Windows-bound .Net Framework is a legacy thing of the past now, since .Net Core (which is now named .Net) everything but the debugger is open source. It's all on GitHub. You can do all your C# development on Linux nowadays, too, with VSCode or Rider.

FartinMowler

3 hours ago

> Open source is basically non-existent.

I think he meant that open source third party add-on packages for .NET were basically non-existent. Not .NET itself. Your "_almost_" qualification has me concerned. Over the decades I've almost been fooled many times by Microsoft's claims of being open and/or interoperable only to find out that it's "almost".

physicsguy

11 hours ago

It’s more common in the U.K. than it seems to be here. The hiring market means it’s much easier to find C# devs than something else. The company I previously worked for which wasn’t in London ditched Python after I left and has pivoted to it.

wenc

13 hours ago

It depends on your demographic.

Now if you're talking about tech startups/firms, then you'd more likely be part of the Linux/open-source and AWS subculture. Your tech choices are going to cluster around that.

But if you're in the non-tech enterprise world, you're in the Windows and Azure subculture. .NET is very prevalent. There are many solo and small teams that contract for non-tech companies that, let's face it are mostly Microsoft shops, that develop in .NET. Microsoft and Azure own almost a huge proportion of the non-tech (think retail, industrial, etc.) enterprise world.

I used to develop in .NET Core and ASP.NET core and found the tooling to be surprisingly good. The IDE (Visual Studio -- the full one, not VS Code) does a lot of work for you. It was easy to spin up a CRUD app -- just some point-and-clicks and modifying some boilerplate code.

However, if you were a web developer who likes to write code in VS Code and likes to work from the ground up, I can see why the above might not be your style.

Also Microsoft software -- despite being very open-source these days -- is still very much backed by a commercial entity, and most people don't have the mental bandwidth to parse out what's commercial and what's not. Take SQL Server for instance. There's a free limited version, but licensing the full version if big bucks. Whereas in the open-source world, Postgres and MySQL are free, as in really free. (the only free Microsoft product I use is VS Code -- and it is excellent)

jpc0

9 hours ago

> Postgres and MySQL are free

Mariadb != MySQL... Same API, not the same product.

ozlikethewizard

8 hours ago

Personally there is way too much boiler plate. I actually love using it in my corpo job because the structure it enforces is great for large teams working in many different features synchronously. But for small nimble teams with good communication the guard rails are more of a barrier than a safety net.

neonsunset

8 hours ago

Is there a specific example you have trouble with? My experience has been that .NET is on a lower ceremony end compared to other options.

oldprogrammer2

2 hours ago

I've led startups running Rails and Python/Flask, but I do all my side projects in dotnet. And I haven't had a Windows machine in years, fwiw.

Deployment and Cost: For solo projects, I do 1-click deploys to a load-balanced Azure App Service. I was using GitHub Actions for a while, but it was slow and I kept pushing up against the need for a paid plan. I keep things local.

Dotnet is dramatically more scalable than Rails or Django, which means much simpler infrastructure for a lot longer. Poor performance leads to the need for more complexity. More servers, caching, queueing, etc. Then you need things like docker and k8s to manage all that infrastructure. For me, I can scale up or out by changing a single flag, and entire apps are just single dotnet apps (aside from the DB), so there's no need for docker.

Batteries Included: My team that ran Rails was burned by the magic, repeatedly. Over the years, developers made decisions that turned into maintainability nightmares. With Python/Flask, the lack of structure was like a Wild West after several years of rotating contractors. In some of my older solo-dev work with Flask, it was nearly impossible to come back to because all the disparate dependencies wouldn't play nicely any longer. And in both Ruby and Python, the lack of static typing was also a source of inscrutability (so please use type annotations in your Ruby and Python projects - your future self will thank you).

As for why people don't use it more, I think it's largely due to "resume driven development". It's the same reason every startup thinks they need k8s or they need to be using React. That's not necessarily a bad thing. Choosing dotnet is definitely not going to lead to job opportunities in the startup world. But, in my opinion, any startup that chooses dotnet will have a competitive advantage over those that choose Rails, Node.js, or Python because of simplicity and maintainability.

As for the argument that "time to market is faster with rails or python", I disagree. The biggest factor will be using what you know. The second will be the complexity of your infrastructure, which will be much simpler on dotnet. Avoid analysis paralysis as much as possible.

Other folks may have very different opinions, but as someone who has worked on several major platforms, each for years at a time, I have found dotnet to be the best option. However, no choice will be perfect, and dotnet has many warts. My recommendation if you do choose dotnet, is to go with MVC + HTMX. It's not sexy, but it's stable and mature. I don't recommend Blazor, yet. I think it needs another version. Last note: I've never bought any third party libraries/controls to do anything in my dotnet projects.

1jreuben1

14 hours ago

A startup needs to move fast - quick and dirty prototypes in JS / Python turn into MVPs. dynamically typed, low barrier of entry, high velocity. Startups that survive to the point of needing to rewrite for stability and performance, will usually opt for Rust or Go. They often dont need the bloated enterprise-specific baggage that comes with C# / Java - transactional models, IoC, ORMs, complex inheritence models - YAGNI.

viraptor

14 hours ago

> bloated enterprise-specific baggage

All of it is by choice only. You don't need to use ORM or any inheritance in your code. Whether IoC happens depends completely on how you write code, but the service model in .net is there if you want it. (And you should try if you haven't - it's really good) You can go as basic as you want and rawdog everything without frameworks/libraries.

porridgeraisin

12 hours ago

These arguments (for any language) are pretty lacking. That you can do it isn't important - the majority culture is the deciding factor - since every internet resource, every package, every support forum is going to follow the majority culture. So not following it simply adds friction. It makes way more sense to choose something where the majority culture makes sense for you, assuming it exists.

viraptor

9 hours ago

That's very far from what I see in practice. Apart from EF, I haven't really experienced any library which forces any of the listed things on you. You can choose some framework if you want of course. But it's trivial to stay away from those.

winrid

11 hours ago

Both Quarkus and JOOQ are pretty good in the Java world. No ORM, no inheritance etc to create APIs... Typed API clients generated for your frontend...

kaba0

10 hours ago

So instead of battle tested, actually feature-complete, ready-made solutions, they output some hack that barely works even in their limited use case, and took several times more time than doing it properly in an “enterprise” code base.

re-thc

14 hours ago

> the most commonly mentioned frameworks are Next.js/Remix/SvelteKit

Do you see the pattern? It's corporations with huge marketing budgets trying to sell you things. That's why it's talked about a lot?

It's not just the companies directly but the entire ecosystem including the VC market. They fund companies that make "managed" services or "open source" frameworks and encourage other startups they fund to use it.

> Is there still a lot of stigma around it?

That's 1 thing - the worst part are the rumors. To this date I still see posts where people claim that NodeJs is async and faster than C#/Java by a huge margin.

not-a-good-bet

12 hours ago

Having built "enterprise" software for many years, due to very specific requirements, i had to use several languages and techs in a single project like: go, rust, C/C++, java, and .net.

Guess which one is the only one which is a totally pain in the ass to maintain... Yeah, that is C#. As soon as a version is deprecated, we need to scramble around to find out which next version is the minimal supported by all of our customers.

Already did a full migration to latest version once, and was a total pain... customers having to install the .net framework and not having the prerequisites, or installing any other software that conflicts.

Zero problems with any of the other techs. So yeah, now we are building those .net components in go so we can ditch .net for good.

This is a desktop application, so, sometimes we have little control on the end user machine, but, well, even when we coordinate with customers for an entire year, it is difficult to predict what microsoft will do with their prerequisites in the future.

Our software has been on the market for over 25 years so far, and we do see the same problem with other companies developing .net products, since they will usually conflict with us. Some customers just give up and have specific computers to run .net specific features, not the best solution but at least a solution.

physicsguy

11 hours ago

Never found that part much of an issue, there’s good support for installing redistributable packages on Windows alongside the application in all the installer frameworks I’ve used.

bags43

9 hours ago

It is trivial to include .NET with your app since I think .NET 5.

yodon

9 hours ago

Every senior engineer I know, the dirty little secret they're afraid to admit is that they secretly really like C#

xupybd

11 hours ago

I'm a solo using .Net it's been fantastic

faangguyindia

10 hours ago

Anything you can do in Dotnet for backend of webapp, much easier to do in python or go.

yread

9 hours ago

I'm a solo dev/small team having a good time with .NET.

sublinear

13 hours ago

> Occasionally, it's HTMX+Go (for those who don't like "magic" and also don't like JS).

I don't know about that. HTMX is ultimately a lot of magic javascript hidden away from the devs. That's objectively worse than just knowing how to write a web page "for real".

homarp

10 hours ago

is not-Windows your dev environment? .net tooling are Windows first.

do you plan to use another db than SQL Server? .net 'prefers' SQL Server.

do you plan to deploy with containers? .net is not container first

do you plan to deploy outside of Azure? .net examples are Azure first (and same with EntraID and so on)

as for Blazor, silverlight then the 10 others attempts at UI after that still makes us hesitate to commit fully to it.

bags43

10 hours ago

It is not 2015 anymore.

>is not-Windows your dev environment?

Rider & VS Code.

>do you plan to use another db than SQL Server?

PostgreSQL and SQLite are working great.

>do you plan to deploy with containers?

Did you try .net 8.

>do you plan to deploy outside of Azure?

All big cloud providers have their own docs for .NET

homarp

6 hours ago

yes, I know it is not 2015. .net runs everywhere.

Just that, by default, it is assumed you run windows e.g. https://learn.microsoft.com/en-us/dotnet/core/docker/build-c... windows first, linux alt. no macos

at the bottom, 'container tools for Visual Studio'

Take all the video from https://devblogs.microsoft.com/dotnet/learn-dotnet8-beginner... how many are not using Windows?

You can use .net elsewhere. Just that it is on you to 'fix' the difference when they happen.

it is ok. Others languages might have a windows-second bias.

sergiotapia

2 hours ago

have you tried .net recently? `dotnet new yada yada` starts out really well but then bada boom you need to edit some random ass .xml file that visual studio would do for you. death by a thousand paper cuts. i don't want to deal with random .xml files. so i would not use dotnet for solo/small team projects.

mixmastamyk

12 hours ago

Others have mentioned the technical reasons, so I’ll go with something else.

Some of us remember Ballmer calling our freedom a “cancer.”

Trust is built slowly yet dashed quickly. There are so many respectful choices today. Little reason to pick the once abusive but rehabilitated.

This comment about MS caught with its hands in the cookie jar always makes me laugh: https://news.ycombinator.com/item?id=31727293

yread

9 hours ago

I can't believe how many people misunderstand the cancer quote. What he was quite correctly saying that if your code touches GPL, your code becomes GPL, too. Just like if your healthy organ accepts a metastasis it becomes cancer, too. It's just a statement of fact. Cancer is of course a emotionally loaded term, but it's also a physical process. When you make cells immortal they also become cancerous. So immortality=cancer => GPL = immortality

mixmastamyk

8 hours ago

It has multiple meanings, so what?

I can’t believe people carry water for an organization as souless as ms.

poidos

13 hours ago

Windows is crap and I try to avoid touching it or anything associated with it.

exceptione

6 hours ago

You are right, and then make the wrong conclusion. If you develop in .net core, you run Jetbrains. There is *no need to run Windows*.

If you want to use Visual Studio, run it in a VM, detach it from the network or let firewalld keep the beast down.

That way you will build something of higher quality than all the Python and electron crap that floods github.