Ever get really, really, really excited about a new puzzle you got as a present, spend hours carefully trying to put the it together only to realise after you’ve glued the last piece in, that [ship, tower, submarine, UFO] you were so proud of a second ago now looks like a sex toy that you’d be embarrassed to show anyone?
This isn’t an easy realisation to have and frankly, it can make you a bit ill. It’s not really your fault, the puzzle is just a crappy design and no one at the company that makes it bothered to build the thing, take a step back and go “yup, that’s a dildo; let’s not sell it to children”.
I’ve had the very same realization at work after years of working with ASP.Net and recently, MVC.
For the past few months, I’ve been working on projects on my own for the first time in almost a year. No team, no consultants, no “UI experts”. Just me, a goal and a deadline. I’ve been delivering on time and everyone’s been happy, except me.
On each project I’ve delivered, I got the sinking feeling I’ve just sold the Titanic. It’s very pretty, usually humongous and it will fail as a product.
The problem isn’t the product itself, it’s the platform its built on, the dangerous climate and slow response at the wheelhouse. It will crumble a year from now with the changing tides and needs and we’ll be using some entirely new platform (probably smaller) to build again.
Let’s check out the MVC thing
It’s the latest and greatest “in” thing for ASP.Net, looks ostensibly very useful and shiny, therefore it must be good.
But it’s completely pointless.
You end up writing more code to accomplish the same things than, say PHP or Django with Python, and all the added functionality you create to make it more usable, just adds more bloat.
The overriding issue with most MS products are premature obsolescence, needless complexity and breaking changes (I left out security since this is a blog post and not War and Peace) and I’ve only manged to stay ahead by constantly keeping on top of changing frameworks, functionality, release updates and even breaking changes that drove everyone nuts. This is even more obvious when developing for the web.
I find myself adding more “stuff” just to make things easier for everyone, thereby having to teach this new “stuff” to the folks inheriting the project which in turn makes everything harder for everyone.
In the past couple of years, I’ve had to learn all I can about MVC 2 and 3, Razor, .Net 4.0 and I’m thinking to myself a lot of the problems I come across are…
Problems that shouldn’t exist
Developing in ASP.Net eventually leads to needless complexity and fragmentation.
There are magnificent projects built on the platform and I can’t help but wonder how even more fantastic (and maintainable) they would be if they had been built on something else.
I learned a lot about developing for the web while working alone. Developing with a team is often less productive, not more, and I caught the first hints of this as the economy shrank along with our team sizes. The best work I’ve seen anyone do was when they were at it alone, even with a ridiculous deadline.
The vast majority of ASP.Net development is geared toward the team, hence the fragmentation. There’s no real sense of why we need to split a project into different segments to work on other than the fact that’s just the way it’s always been done and that’s the end of it. The end result is that there’s a culture of adding or otherwise handing off functionality to third-party projects on features that you don’t need, shouldn’t need and should never need.
A small example of this dangerous interdependency was when MS killed AntiXSS (a product that is unnecessary if your app is well designed) with no warning and then it decided to hold you over the bonfire that was your project now that you were already shafted.
Unless you’re using a third-party project in its entirety (after vetting the thing for holes) you’re better off creating a simpler alternative from scratch a lot of the time. If the problem you’re trying to solve is complex, ask yourself, is it really the problem that’s complex or just the solution you created for it.
Methodology shouldn’t trump getin’ Sh!% done
You want it to work and make money.
That’s it… that’s the only reason anyone invests in a commercial product. So what’s the sense sticking to dogma when it comes to platform? Brand loyalty makes sense if it’s helpful and conducive to productivity, personal satisfaction and imagination. The last two are just as important as budget and timeline despite what your boss might say because that’s where the best solutions come from.
Just for the record, I’m not the only one who came to this realization as Milan Negovan also did before. I’m just a couple of years late.
Let’s set aside the complexity. Even the cost doesn’t warrant going with ASP.Net for the vast majority of the work I’ve done and this isn’t just about hosting and service availability. With more demand you will spend exponentially more on licensing and server resources. Microsoft hasn’t delivered a product that will allow you to do more with less with regard to cost when it comes to developing on the web.
What does it mean?
I can’t in good conscience recommend ASP.Net for new projects.
If you have heavy dependencies on Microsoft products, then chances are, you don’t have a choice in the matter. But if the project is brand new and you have no ball and chain, go with something else. I can’t force you to do this so if you insist on nothing else, I guess I’ll still use it (after all, I need cash to build my cabin).
Considering how much code I’ve posted on this blog pertaining to ASP.Net and C#, this may seem hypocritical, but you have to realize, sometimes you do need to take your time on the throne and finish that big dump to feel relief.