I've been developing at Snipcart for a year now. What started as a standard internship matured into a thrilling, full-time startup gig. Sometimes I can't believe I almost sabotaged this opportunity from the very start.
Why? Because of three simple letters: .NET
See, when our co-founders offered me the job, I was fresh out of school and intent on working with "cutting edge" techs. I wanted to stay on top of my game. To feel relevant as a junior dev.
So my options were to either code a side project or join a startup. Naive me believed the latter were all running on trendy techs. But really though, who in their right mind updates a whole production infra every time a hip framework pops up? Even refactoring addicts aren't that crazy.
Built with .NET technologies, Snipcart didn't match my initial ambitions.
Back then, I still held an old, cached vision of Microsoft's "closed" ecosystem. I thought it bound developers to Windows, and companies to expensive tools. I was hypnotized by the full-stack JS craze, so a .NET architecture wasn't appealing to me. But the team, end product, and user base were. So I put my worries aside and went all in anyway.
Fast forward to a couple of weeks ago, our lead developer Charles and I were
arguing over beers discussing our application's scalability. After a few pints, my buried .NET concerns re-surfaced. I bluntly asked him:
Why .NET? Why'd you pick that MSFT framework in the first place, and why KEEP it?
The post you're about to read is a sober reconstruction of the long conversation that followed.
What is ".NET technologies": the Dot Net framework
First, a quick definition for those who've been reading and asking So what's .NET technologies?:
.NET, or "Dot Net", is a software framework developed by Microsoft in 2002. It offers several languages to developers, which can be compiled and executed through the framework. Its most popular language is C#. Recently, Microsoft has started working on a new cross-platform, open source version of the framework called .NET Core.
Keen on learning more about it? Read this in-depth overview of the framework.
And what's your SaaS .NET backend stack at Snipcart?
C# - programming language
ASP.NET Web API - web framework to develop APIs
ASP.NET Core - new web framework, open source + cross platform
AppVeyor - CI/CD service for .NET projects
Why DID we use .NET for our application?
Let me first provide a rather circumstantial answer here.
Back in 2013, when our lead dev Charles started working on our app's MVP, he knew .NET was getting a bad rap among certain startup enthusiasts. But he stayed clear-headed about it: he needed to quickly ship something solid to validate traction. And since his programming experience was mostly .NET, this tech choice made total sense. He knew the stack, constraints, and architecture like the back of his hand.
But there was more to our decision than contextual factors. This server-side framework was also one of the most mature available: lots of people had been using it. This popularity meant TONS of killer resources were available online (C# and ASP.NET have been in the top 20 tags for a while on Stack Overflow).
And to top it off, Microsoft had been—and still is—doing a fantastic job with ASP.NET's documentation. Probably the best-documented MSFT product out there.
Now for the more objective, up-to-date answer.
Pros and cons of Microsoft's .NET framework
To this day, .NET can still be a no-go for some developers. Let's explore some of the most commonly cited reasons why:
It forces you to work on Windows—many devs prefer their hip MacBook/OSX combo (though that may change).
Visual Studio is huge and laggy compared to light editors such as Atom, VIM or eMacs.
ASP.NET generally comes as a massive package, with
System.Weband legacy attached.
It's an old, "closed" ecosystem.
New dev talents won't want to work with it.
Now for the pros, which will most likely invalidate some of the cons:
While Visual Studio may feel heavy, it remains one of the most advanced IDE out there. It can act as self-documentation for new developers on the project AND make refactoring very powerful. And the newly released Visual Studio Code addresses the bloating issue IDE-side. Oh, there's also a VS for MAC coming!
C# is a compiled, strongly typed language, making it better at spotting errors during compilation, thus avoiding runtime surprises. In our opinion, C# remains a modern and elegant language.
ASP.NET is a very mature framework. Its footprint could be smaller (mostly fixed in ASP.NET Core), but you know it's got everything needed to get the job done.
Documentation is still thorough and easily accessible.
The new ASP.NET Core is cross-platform: you can use VS code on your Mac + deploy your app on a Docker container running Linux. Feels almost unreal.
The full community edition of Visual Studio is now free and for individual developers and open source projects.
.NET Core solves the bloating issue architecture-side + brings candies like watcher tools, hot reload, and a decent CLI.
"So you guys are sticking with .NET, right?"
I know we just marked lots of positive points on the board for .NET. But that is still a legitimate question to ask. Cue another contextual story:
A few weeks ago, we started looking for a new developer to join our team. After going through interesting yet inconclusive interviews, we found a perfect profile. Motivation, SaaS & e-commerce knowledge, relevant experience... the whole kit. But during a follow-up on his successful interview, the guy finally admitted that he despised Microsoft technologies, and would thus not take the job.
We were dumbfounded: our tech stack had just cost us a potentially key hire. So, as the Serious Snipcart Meetings custom requires, we gathered in a dark cave wearing tall black robes, lit candles, and began challenging our decision to keep worshipping the .NET gods.
At dawn, after a strenuous debate, we emerged with a consensus: Yes, we're going to stick with .NET technologies for our SaaS.
We already possess a well-oiled, foolproof production pipeline. A complete re-haul of our backend would put a dangerous dent into our team's productivity. And re-writing our entire API without adding value for our customers wouldn't be a smart business decision.
We're confident our .NET architecture will scale alongside our business in the long run. Plus, ASP.NET Core brings a refreshing breeze of freedom for our current & future devs.
We believe in the benefits of C#'s maturity and steady evolution. Each new release makes for cleaner and simpler code. It's also one of the first languages to integrate the
async/awaitconcept, now coming to ES7 and other languages. C# 6 already offers lots of great stuff, and C# 7's scaffolding looks good thus far.
Many interesting hires we come across are fresh graduates, and .NET is still one of the most taught frameworks at school. Microsoft has done a good job enabling students to use their tools for cheap—if not for free. Such hires would be, in a sense, pre-qualified for the job.
Why and when YOU should use .NET technologies
Now we know Microsoft's framework isn't the coolest kid on the dev block. But you know what? We believe it kicks serious ass anyway. Especially when we see refreshing open source project like Wyam, a .NET static toolkit, pop up.
But enough about us. Let's talk about you. About why maybe you should consider using this tech stack for startup, personal or client projects:
1. Your SaaS/business could benefit from Microsoft's startup programs.
Microsoft offers very appealing programs to upcoming startups using their tech. Bizspark is a shining example. It'll help you launch your business without worrying about license fees and the likes for your first years. MS also offers Visual Studio Team Services for free for up to 5 members.
2. Your thirst for open source will be quenched.
Gone are the "black box" days for Microsoft. They're legitimately pushing for open source with significant efforts. If you're serious about open source, you can help and/or benefit here!
3. You'll have technologies with a proven and growing track record at your disposal.
Documentation, resources, and inspiring figures abound in the .NET world. This will most definitely help you and your team in times of need. Tooling for solid code is available and well integrated (unit tests, acceptance tests, CI, etc.). You'll also benefit from MSFT's innovations when it comes to the new ASP.NET stack or VS Code.
There you have it, folks: our official stance on .NET.
The key concept here is that technology is a means to an end, period. It's there so you can get sh*t done.
Effectiveness, efficiency, and scalability: THESE should dictate your tech stack choice. Not the social pressure of "new" and "trendy". And for us, .NET was and still is a no-brainer pick to get sh*t done.
Here's hoping you liked the post, whether you agree with us or not!
Oh, and be sure to let us know if you think you can make us change our minds. No decisions are immutable in a startup. :D
If you enjoyed this post or found it valuable, please, take a sec to share it on Twitter. We'd appreciate that. Not digging our position here? Fire away in the comments. We'll be listening!