I, like you, have been fighting the battles and driving towards success in the non-stop, fast-paced, and usually insane world of software development. I have been working with software for most of my life. In the time that I have been doing this, I have seen technologies come and go – only to return again like a rewrapped and regifted Snuggie at a white elephant party. I have also met many brilliant minds in the field, some of whom have burned-out and moved thousands of miles away to escape. I have seen – and been a part of – some great software successes and a few total catastrophic failures. I tend to obsess mostly on the failures. These are the battle scars that all software development vets wear with pride. It is these experiences that let me understand the complex and often misunderstood art of managing software development teams.
Why does all of this roundabout stuff matter? Well, because many times business leaders and IT managers have grand visions for how they will run their software product teams. They have great maps about how much ground they will cover and how fast they will get their product / enhancement / customization to market. Unfortunately, these lengthy, tightly-designed road maps often overlook the simplest details, and the development teams fail to reach their destination because they get stuck in a roundabout somewhere along the way. They spin round-and-round on the path instead of focusing on the destination. It is important that everyone who is involved in the creation of software in these teams understand the processes and expectations (i.e. rules of the road) before a development team can truly be successful. Unfortunately, the rules of the road change in every country, and the best software development practices tend to be slightly different at each company, and within each development team.
In recent years, "agile" has become the software craze. "Go agile and everything will be better" is what development teams and software managers sell to their executives as a way to get better results in a faster timeline. To many under-experienced business folks, “agile” means “go faster”, which in turn means “more profit.” It is easy to take aim at the neophyte, “non-programmer” types in business as some type of necessary overhead, obviously unaware of the needs of the development community. But it turns out that these folks who do not contribute a line to the codebase actually care about something meaningful; winning against the competition which wants nothing more than to put you (and your company) out of business. For the business leaders, it is important to understand what agile is, and is not, so that its benefits can be realized in an organization focused on software and profit.
To some in the software development world, “agile” means “no processes.” I have interviewed hundreds of prospective employees who’s resumes assure me of their “expertise in agile.” But many of these candidates seem to think that agile means that they write no documentation and meet every day for 15 minutes. Although it is certainly possible to be a successful software company only following these two rules, I have always felt that it was important to understand why I was doing what I was doing – not to just do it.
For many software professionals who have read deeply on agile and followed its steady rise over the past decade, the agile philosophy just seems to Make Sense. Trust people over processes. Working software is the best form of documentation. Stay close to your customers and adapt. Unfortunately, many of the truisms of these agile approaches are completely lost on the decision-makers within an organization. Many times, some of the details are even lost on the teams! A battle-cry of "go agile" that yields an initial failure can have catastrophic consequences to a development team, or even an entire IT organization. In this blog, I hope to explore some of those truisms in an irreverent and whimsical way, and try to get to the underlying reality that is the processes and management of software development teams.