Silver Bullets and Simple Solutions
Recently I was reading the Boston Globe and saw a letter to the editor about problems with H1N1 vaccine distribution and lamenting that “We’re eight months into a pandemic, and it seems that all the government can do is tell us to wash our hands!” While I understand the writer’s frustration about the availability of vaccines, and the technology used to produce them, I was struck by the writer’s attitude that a simple solution couldn’t possibly be effective. I’m not a medical professional, but from what I’ve read, hand washing, while mundane sounding, is effective in preventing the spread of disease. Since I am a software development professional, I also thought that the attitude that the more exotic solution is always better, is common in software development as well.
When people ask me about improving their release management process to be more agile, they are disappointed when I don’t focus on the latest SCM tool, but rather talk about approaches like unit testing, small and frequent commits and updates, continuous integration, and the like. All of these things are dismissed as simple and even mundane. Yet, if they are simple, why not do them? The truth is that the best way to make your release management process more agile is to have fewer codelines and keep the codeline you want to release working. There is no real magic to that, other than the magic that happens organically when a team is disciplined and committed to keeping the code high quality.
Since Fred Brooks wrote No Silver Bullet (which appears in The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)) software developers have always been looking for technological ways to make projects go more smoothly. Technology helps, to be sure. A good diff tool can help you merge code when you really have to, and an SCM tool that supports staged integration well can help you get to the point where you can trust your team to keep the codeline working. But the best approach is to small, incremental changes, and small, comprehensible modules.
In the same vein as what the Pragmatic Programmers tell us in The Pragmatic Programmer: From Journeyman to Master, and as Bob Martin provides further guidance about in Clean Code: A Handbook of Agile Software Craftsmanship, there is a lot you can do to make your team more agile by small changes, keeping things working along the way, and iterating. Think about tools as a way to support how people work, and not the other way around. Tools help you work effectively, but a good tool can’t replace good technique.