Why we bet on .NET
As a young company, there are always a million things going on. Finding product-market fit, landing a customer, raising a round, you name it. The breakneck pace this goes at is often reflected in technological decisions that teams make.
Choose a language that's flexible, do things that don't scale, etc.
Often times we get asked the question why, with so many options, did we choose .NET, a household name that is associated with the corporate world of a decade (or 2) ago?
I'll do my best to answer here and tell you why we, a modern startup, chose modern .NET and how it has become a strategic advantage.
Some context
As tech giants do, naming things is not their strong suit. So to give you a bit of a rundown:
.NET Framework was Microsoft's initial vision for a managed software development framework, first released in 2002. It was designed to create applications for the Windows platform. Think Steve Ballmer, on his "developers" high with Microsoft going all in on Windows-only tooling.
Enter .NET Core, a complete redesign and rewrite of the .NET Framework, built from the ground up to be cross-platform, open-source, and highly performant. This means you can build and run .NET Core applications on Windows, macOS, and Linux. In .NET Core, Docker is a first-class citizen.
ASP.NET: The Web Development Framework
ASP.NET is not a standalone platform but rather a web framework that runs on top of either the .NET Framework or .NET Core.
The naming of the .NET platform has gone through a few "evolutions" to reflect its changes and to simplify the branding.
Early Days (.NET Framework):
For many years, ".NET" was synonymous with the .NET Framework. As it was the only major implementation, developers simply referred to it as ".NET."
The "Core" Era:
With the introduction of the cross-platform version, Microsoft needed a way to differentiate it from the original Windows-only framework. Thus, .NET Core was born. During this time, you had two main branches: the legacy .NET Framework and the modern .NET Core.
Unification and the Future (.NET):
To eliminate confusion and signal the future direction of the platform, Microsoft decided to unify the .NET ecosystem. Starting with the release of .NET 5, the "Core" was dropped from the name. This new, unified platform is now simply called .NET. It represents the future of .NET development and is the successor to both .NET Framework and .NET Core.
.NET in the Current Landscape
Maturity, Safety, and Speed of Development:
- vs. Rust: We seriously considered Rust for its incredible performance and compile-time memory safety. However, the steep learning curve of the borrow checker felt like an unnecessary tax for our business application logic. C#'s managed memory and mature garbage collector offered a much faster development path, a trade-off we were happy to make for our domain.
- vs. Ruby/PHP: We wanted a language where type safety was a core, native feature, not a recent addition. C#'s strong typing from the ground up gave us confidence in our ability to refactor and maintain the codebase as our team grows.
Performance and Concurrency that Fits the Problem:
Our services had to be fast and handle concurrent operations efficiently. We run massive dataset analysis, and serve a zippy frontend, all in a code base that needs to be simple, easy to maintain, and resource efficient.
- vs. Go: Go was a strong contender with its simplicity and powerful concurrency model via goroutines. However, we found C#'s async/await pattern, thread agility (threads can be changed within the scope of a single req) and multithreaded-ness by nature provided a more structured approach for our business logic, and the expressiveness of LINQ for data manipulation was a significant productivity win that Go couldn't match. The raw performance was comparable, but the developer experience in C# felt richer.
A Cohesive Ecosystem vs. a Collection of Parts
We wanted a unified platform, not a patchwork of libraries.
- vs. TypeScript/Node.js: While we love TypeScript on the front-end, we wanted a more cohesive ecosystem for our backend. With .NET, you get ASP.NET for web servers and Entity Framework for data access —all designed to work together seamlessly. This felt more robust than assembling a backend from the npm ecosystem.
- vs. Java: While Java is powerful, we found its ecosystem often requires more configuration and boilerplate. C#'s modern syntax and the tight integration of the .NET platform allowed us to get from idea to production-ready feature with less ceremony.
Future-Proofing with AI-Driven Development
We knew that AI-assisted development would become standard. How exactly that's going to play out is up in the air, but the fact that the software development landscape is changing is undeniable. To maximize its benefit, we opted for a language with a strong, predictable type system, loads of documentation (thank you, Microsoft), and a strong open-source community.
Combined with the above sentiment, C# filled that requirement. C#'s strong typing gives AI tools the context needed to generate accurate, reliable code. Less searching through the code base and more knowledge on how to write good code.
A Pragmatic Bet that Paid Off
Our choice wasn't about hype. It was a pragmatic decision based on performance, developer productivity, ecosystem maturity, and a strategic alignment with our target market (more on this in future posts).
For Decucta, .NET has proven to be the right foundation. It allows our small team to build a secure, scalable, enterprise-grade product without compromising on speed or modern development practices.