Wednesday, 1 June 2011

On Frameworks

This was a comment in response to a post by Jeremy Miller. It got a bit wordy so I figured I might as well keep it ;) 

I love the idea of choice, I love that there are multiple Frameworks, and I would love them all to be uber successful.

But... It comes down to portability, long term support,  company culture, and having a common toolbox. 

I've been at this game for over a decade, and the biggest problem I  encounter over and over again (besides beancounters ;) ) is legacy frameworks. By that I mean things that in their day were considered by someone as the tool de jour, but have fallen out of favour and/or and maintenance and now hold products back from forward migration, or keep the people maintaining those apps from progressing their skills. Tools that effectively require developers to become specialist of themselves.

It could be anything  - COM components, CMS frameworks, web Frameworks, DataSets, XML islands, Microsoft Entlib ... ;)  etc etc

Developer "A" implements "Excellent Architecture Foo" and alls good, because he understands and buys into it. He leaves, developers "B" comes along that has a different architecture perspective and it doesn't gel. Something like a culture change from "Software Factories" to YAGNI. Everything turns into a hack, and next thing you have is spaghetti (usually with meatballs). 

The way I (try to) avoid that is by very careful consideration. Choosing between Fubu, OpenRasta, MonoRail and ASP.NET, is not just about their relative merits, but their long term impact on my products and my teams, and our commitment to maintaining those products. It means every new hire has to be upskilled, and in many cases it's not the easy stuff you need skills in, like building pages, it's the hard stuff, like debugging and performance which only comes with experience.

That's why developers migrate towards the "most popular" frameworks, it's self preservation. In Java it's Spring, in Ruby it's Rails, in .NET, well, it's "Microsoft sourced" because it's the usually the largest support team. It's not always the case. nHibernate, JSON.Net, MVVM Light, log4net, DotNetZip come to mind as OSS tools that have managed to build enough momentum, and stay portable and relevant.