A lot of the reason for this move came from my time in corporate management, serving as a technology director during a down IT market. Many others came from exploring emerging platforms in the realm of web software development.
TL;DR: Microsoft’s ASP.NET is too restrictive and costs too much. Microsoft’s target audience builds products that are generally poorly written and lag 4-8 years behind the current platform version. Other open platforms can be used with little to no cost and lower overall cost of ownership.
Microsoft licensing costs are insane
Microsoft’s licensing structure and costs and are absolutely insane. I can build, deploy, and market test a product or feature using platforms such as Java, Rails, Django, or Node.js for a small fraction of what Microsoft charges, without the licensing headache. Plus, I’m not tied to only one operating system.
(Quick aside: yes, Mono is cool and cross-platform. It also lags behind the current version of the .NET Framework and represents the smallest of fractions of actual production .NET use.)
The vast majority of .NET projects involve working with giant, monolithic, boring, poorly written, legacy “enterprise” products. These products always seem to be 4-8 years old and 2-3 major platform releases behind the current .NET framework, in part because of the sheer complexity of modernizing. Coupled with the insane licensing, capital, and labor costs to develop a product using Microsoft’s platform, these products are rarely modernized because the business has barely broken even on the initial project investment. Investing in new feature development always beats investing in the cost to upgrade to the latest .NET version in most “enterprise” organizations.
Yes, BizSpark is a great program for giving free Microsoft stuff to startups. It’s like a drug dealer giving free samples to get you hooked on their expensive and now compulsory wares.
No focus on the user experience
When Microsoft first released ASP.NET, they wanted it to feel as familiar as possible to Visual Basic 6 developers transitioning into the world of web development. They introduced “Web Forms,” a concept where developers dragged and dropped web controls on to WYSIWYG-ish documents and wrote “code-behind” logic to create features. Developers coming from ASP and CGI development had to completely relearn how to develop for the web, as Web Forms hid so much of the mechanics of the web behind a giant form tag and a humungous hidden __VIEWSTATE field and on each page.
ASP.NET platform features are always behind other platforms
Sure, Microsoft introduced ASP.NET MVC in an attempt to move away from the Web Forms problem. Of course, ASP.NET MVC borrowed heavily from Rails, Django and Java frameworks like Spring, which were around for years before.
Adoption of ASP.NET MVC was terrible, in part because of the expense involved in undertaking any Microsoft upgrade. ASP.NET Web Forms developers had a difficult time understanding why MVC was a good thing, learning when to use MVC instead of Web Forms, or finding time to learn a new method for web application development.
Microsoft has tried to make MVC more attractive by replacing the original and confusing “Web Forms View Engine” with the “Razor” view engine, as well as a host of other moves. ASP.NET Web Forms, however, still rules the ecosystem.
I moved away from .NET primarily so I could use free and open platforms to rapidly develop, deploy, and market test products for myself and my clients. Modern open web platforms are easy to acquire, easy to configure, and easy to learn. They are on the leading edge of the web development industry and provide everything needed to create engaging user experiences on top of scalable and performant architectures. The largest web applications on the planet – Google, Facebook, Twitter – use free, open, non-Microsoft technology. And I do too.