Rafal Bielec
 
 

One Microsoft Way

There used to be one Microsoft way of doing things. We were isolated and Microsoft led the way. Nothing else mattered and we lived in a cosy bubble. Everything has changed now and .NET developers face new challenges in a world which seems foreign and unnecessary.


Published on 02/02/2025. 8 min read.
One Microsoft Way

Table of contents

Introduction

I feel like sharing my thoughts (and feelings?) about the current state of .NET development which is very different from the way we used to think about .NET. I’ve been coding C# for 20 years and I remember the early days of .NET. I still remember .NET 1.1 which was Microsoft’s response to Java. I remember J# which never took off, and I remember VB.NET which was created to lure VBA developers into .NET. I guess VB.NET was somewhat successful until it eventually died off. In the end C# has become the primary language and practically the only real language of .NET, at least in job adverts. We’ve got F# as a nice bonus but functional programming still isn’t as popular as it should be even though it’s probably better and more succinct than the current imperative approach. It’s still all neat and nice about .NET these days but we’ve forgotten about one thing. There was one Microsoft way of doing things, one path that we all followed and now we’re just like the rest of the IT world – fragmented and experimenting.

Good old times

Let’s for a moment recall how we used to work. We had Windows 2000 Server and Windows Server 2003. We had the IIS and the full version of the .NET Framework up to version 4.8. The only real IDE for .NET was Microsoft Visual Studio and no one cared about small projects like SharpDevelop. These tools were far from perfect, especially the IIS, but all these tools were “ours” if that makes sense. C# developers didn’t care about the outside world. We let others develop in their “Pythons” and “PHPs” at the time but that was of no concern to us. We were building business apps in C# for the desktop and the web using one set of libraries provided by Microsoft. No surprises, no debates what to use, Microsoft thought for us and Microsoft provided us with all we needed. Java people had 37,276 frameworks to choose from. We had to learn just one or two.

Microsoft taught us back in the day that there was one Microsoft way of doing things. One set of tools and frameworks provided as a closed ecosystem for the chosen few who followed their approach. We didn’t need Linux (now we have WSL). We didn’t care what other databases could offer since we had Microsoft SQL Server to work with. Maybe someone used the .NET Connector for MySQL because it was more cost effective but it was still hosted on Windows Server and everything felt familiar.

These were the good old times. Whatever job you applied for, you always knew how the company built things, how your services would be hosted, and you knew WinForms/WPF or the web framework used. There was nothing better than starting up Microsoft Visual Studio right after you took a look at the XCode by Apple or some other nightmare-inducing horror like NetBeans. Java people also used Eclipse which was slow and ugly so .NET developers felt like they’ve made the right choice, and Steve Ballmer was running on the stage shouting “Developers, Developers, Developers!”. This was the world I remember and it felt right. It felt better, more organised and predicatable I guess.

Current state of affairs

What happened since then? Quite a lot. Microsoft has changed their approach. It has opened its own echo chamber and let all of us out into the chaotic world we’d not been used to. Suddenly Microsoft is not isolating us, they’ve embraced Linux, they’ve created .NET Core. We use MongoDB, PgSQL, NATS, Redis and so on. They’ve abandoned the approach which made .NET special.

We’re now just part of the overall IT crowd mixing up technologies. We need to use Linux and Docker, PostgreSQL seems better than SQL Server, Azure adapted open-source products, Visual Studio no longer seems the best IDE because it’s heavy and still stuck in 32 bits. JetBrains Rider is much faster and lighter, and since Microsoft executives want us to use .NET on macOS, we may very well use an IDE which runs on on Apple.

Microsoft Windows while still being the dominant operating system on the market feels like an annoying toy in comparison to macOS. I haven’t been using Windows for many years now and every time I check back on it, it feels inferior to Apple’s products. Even things like Bluetooth or Microsoft Teams work better on macOS when it comes to sound support.

Is this what success looks like?

Was it worth it, Microsoft? I feel like you’re constantly playing catch-up with the open-source market. C# is no longer the best language for business applications with companies who choose Microsoft. What does it even mean to choose Microsoft these days? Does it mean choosing Azure which relies on open-source for most of its services? .NET is mixed up with other technologies and it’s harder to tell why someone should choose C# over Go, definitely not for the ease of editing code files with Vim.

.NET is now just one of many options without being “cool and hip” like Deno or Rust. The New Stack never features an article on .NET. Small companies and start-ups prefer to use Go or Node.js to build new products. .NET developers are required to learn many more technologies than back in the day without feeling real advantages of coding with C#. We’re no longer living in our own special world being oblivious to whatever other developers do. We’re now trying to compete with them in the same market of ideas which was never ours to begin with.

We aspire to be mature business professionals who create business applications running enterprises with big money through complex projects. We don’t need a robot on the dotnet website. We need to feel again that our tech stack is better for commerical projects without paying attention to the “Laravels” or “Vercels” of this world. We also need a fast 64-bit Visual Studio which crushes JetBrains Rider, and offers an unparalleled experience like it used to be in the 2000’s.

Closing thoughts

I don’t feel like we as .NET developers are winning this “race”. I feel like we’re slowly becoming “them” because we’re trying to enter the world of Linux and open source ideas which we never started with. C# developers are not the “cool kids” and we were never meant to be. Why push us into such a direction with your silly robot mascot? It feels like a pensioner trying to collect Pokémon cards. We should be looking at specific business cases on the dotnet website listing which companies embraced .NET for their enterprise instead of looking at a pink flying spaceship.

We were supposed to build amazing business applications in Windows Forms & WPF or use ASP.NET, and ignore the rest of the world because that was the one Microsoft way. No gimmicks, no linux, no mascots, no macOS, no experiments. Just Microsoft and .NET to lead the way with one set of tools and frameworks – the world which time has forgotten but still lives in my memories.

I feel that it used to be simpler to be a C# developer, and .NET was its own little world of wonders which an outsider wouldn’t understand. We’re now required to use Docker and build Linux images to host stuff. Why can’t we use our own dedicated container platform hosting Windows Server Nano which is optimised for .NET? The old Microsoft would’ve preferred this.

We have Dapr but how many people are actually using it? When was the last time you’ve seen a job advert with Dapr? Have you looked at .NET Aspire? It tries to combine open-source projects for the cloud by bringing it all together under one framework instead of doing some new independent Microsoft thing. It’s not much different from a Go developer building a cloud-native solution but with yet another framework to learn just for .NET.

I’d like junior .NET developers to feel the same excitement that I felt when starting out with .NET. We used to be different. It felt like we were in a private IT club. We had our own thing going and we didn’t care about Ruby on Rails nor Django at the time. Now younger developers are inundated with gazillion options like Next.js, Remix, Go, Gleam, Supabase, Rust, Zig and so on. And when they look at .NET, they cannot really tell why they should choose it over anything else, especially when YouTube is blowing up with all the other technologies.

Maybe one day we’ll come back to the day when we ran everything with one set of Microsoft tools and we didn’t care about anything else. As for now, let’s try to do our best among the “cool kids” even though I feel like a dinosaur who’s been trained by enteprises to run business processes, not a child of a start-up who belives that putting stickers on laptops makes one’s hardware look better.

I need to mention the damn robot again. It’s not cool, it’s creepy. Let’s drop the robot off the dotnet website, please, it’s embarrassing. Let’s redesign the dotnet website for enterprise businesses to present .NET as the mature and reliable technology that it truly is. Let’s bring back enterprise branding and independence the good old Microsoft way. We don’t need to be another Go. We’ve always had our own thing going even though maybe we got a bit lost on the way.