Sunday, September 9, 2012

Open Source and Quality


Open Source Software

When I first started in software development, I worked in a large enterprise environment. Lots of terms were getting thrown around and accepted by other developers around me. Phrases like, "Enterprise solution" and "Commercial Quality" which I also accepted, but didn't really think too hard about. One thing I did notice after a while was that these terms were primarily used by people trying to persuade others. However, this was not before I had sadly formed misgivings of my own regarding open source software due to the relationship I had created between quality and cost. This equality compare has done alright by me is some other aspects outside software development, but within software development, this rule, in my opinion, should be thrown out. 

Yes there might be more 'turn key' commercial solutions out there than open source ones, but a lot of them are getting a good run for their money by open source options. One of the best example of this in the .NET world would be ServiceStack

In June this year, my then colleague and friend, Adam Baxter and I attended (and very surprisingly won several categories) GovHack 2012. Although both of us put quite a bit of effort into our project (WeatheredOak), being able to produce a useful and functional application in 2 days would not have been possible without OSS options. We did use a large chunk of Microsoft tech (as both of us work professionally as .NET developers), however we leveraged ServiceStack very heavily to achieve the core of our project. Our API may not be a particularly good example of how to use ServiceStack (designed, built and documented in 2 days, give us a break :P), however it does provide a solid example how effective it is in just getting something done!

I had used ServiceStack before the event, however it really is its simplicity that makes it such an effective library of software. And it's that simplicity that really stripped back any remaining belief that there is this invisible separation of the quality of 'Commercial', 'Enterprise' and OSS I still had. Here was a piece of a software that was easier to use, faster and more extensible than it's commercial counter parts (WCF, Web API etc). I had used other open source libraries before, but ServiceStack solidified this realization and led me to experiment far more widely with OSS and more languages than I have done in previous years.

Microsoft Blinders

Starting off my professional career as an ASP.NET developer with my only other experience being in games development, I had very little confidence in what I was doing. I basically tried to keep my head down and learn as much as I could about the tools I had in front of me. Don't get me wrong, ASP.NET and MS tools are generally pretty good, but I became complacent with looking for the Microsoft solution rather than thinking about the problem my self. It wasn't until more than a year later that I started getting jack of fighting a framework rather than it helping me to achieve what I was trying to do and look further than one vendor.

This MS blinders effect of not looking past what MS offers/endorses is something I've noticed in developers of all levels of experience and all too common in the environments I usually work (Gov/Enterprise). And (most of the time) it doesn't come from some insidious ploy to sell more MS licenses, it just comes from developers who haven't known anything else. This doesn't mean you aren't a productive developer, but I know when confronted with a problem that needs some creative thinking, I would much rather have varied experience over 5 people suggesting the same solutions. Scott Hanselman (some what ironically), has a great quote that applies when he was talking about constructing a resume. "Do you have 20 years experience or do you have the same 1 year of experience twenty times?". Although MS technologies change and grow, I think sticking to them as your sole provider of tools limits a developer in experience in the same way of 20 x 1 years experience. 

I would strongly urge any one who is purely a .NET developer to look outside the box and not just what comes "out of the box", you will become a better developer for it. Maybe start with ServiceStack