This editorial was originally published on Sept 23, 2008. It is being re-run as Steve is on vacation.
Can developers change the way they build things? Can corporations?
I'd like to think so. After all there are companies and developers that get more efficient as they evolve their development practices. I know that I've gotten better at building software over time, getting more efficient as I learn better ways to actually write code, keep track of changes, quickly build and test, etc. Or maybe it's that I'm more disciplined about working carefully and actually doing things like checking in and out of version control, writing better test cases, and actually following the plan I've setup.
The Capability Maturity Model (CMM) from Carnegie Mellon University that measures the ability of a software development group to better build software. Most software teams rank very low on their scale, requiring much effort to move up the model to a more mature style of development. I'm not sure of those groups at a CMM level or 4 or 5 produce better software than those at level 1, but I'd like to think that they do.
There was a blog post about Agile development, which is a method of software development that I think can help one build software in a quicker and more flexible manner. In the post, which is a look back at an attempt to build a project using this methodology. It didn’t work out, though they did complete the project on time.
It's an interesting read to see a nice self examination of how their culture actually failed them. They couldn't really build Agile software, mostly because of the culture at the company. Despite the desire to change and the buy-in of the technology team, many other factors ended up preventing them from really sticking to their Agile plan.
Well they completed their second project successfully, albeit with some overtime involved. They recognized that they hadn't used the Agile methods and they'd fallen into an Agile Cult instead. It seems the author was a little disappointed in the result, and perhaps in their inability to deliver with Agile methods.
Personally I think that even partially adopting Agile methods results in benefits. Just because you can't deliver incremental releases or change your focus quickly doesn’t mean there aren't benefits. Having a different mindset and trying new techniques can have a lot of benefits for your team. Just thinking about building software differently can let you re-think the way you do things, allowing you to be more self-critical and look for ways to be more efficient.
Constantly trying new methodologies might not sustain you for the long term, but trying different development methodologies can help you find the things that work best in your environment. Once you know what works well, you can then set about changing the culture to become a more efficient software development team.