The rise and consolidation of Agile methodologies has introduced a new vision and spirit in software development. Concepts such as refactoring, pair programming, and collective code ownership are common for developers worldwide.
But Agile has not only influenced the way software is analyzed, designed, and written. It also has changed the way it is assembled. Today almost everyone in the software industry has at least heard about continuous integration tools and techniques.
In this article, I analyze the pros and cons of continuous integration, and examine whether there are still opportunities to look for even more agile processes supported by Software Configuration Management (SCM) Best Practices.
Freeride Software Development
So what are the most relevant features that Agile software development brings to scene? Well, the answer to this question depends heavily on who is answering. Here I highlight some features that as a subset of agile that I call "freeride" -- trying to capture part of the spirit of agile software development:
- Enforce change. Ranging from refactor to collective code ownership, the message is clear -- change whatever needs to be changed to create better code and give the right answers to customer requests.
- Create a real team. Agile methods put people first, opposite the traditional project management and software engineering techniques which fiercely look for reducing staff dependency. And just as each time I mention the word "team", Tom DeMarco and Timothy Lister's Peopleware chapter on making teams jell comes to my mind, "team" being defined as a group of people working together towards a common goal, not just a bunch of programmers sitting together.
- Fun. This won't ever fit in every organization, but some of them will need to compete in a global market. So getting the best out of talented individuals will be a key point. Achieving such a goal usually involves taking care of motivation, and fun is then important.
Not all organizations or projects will benefit from or be able to adopt agile techniques. Big projects with hundreds of developers and high personnel rotation aren't normally good agile candidates. In fact, the standard way to achieve agility on such environments is by splitting teams into smaller ones. And when this isn't possible, a tall hierarchy chain is required, which is incompatible with agile techniques.
But even on those environments there are certain techniques which help introduce more agile working methods. And the same techniques can benefit small agile teams to overcome many of the problems derived from some extended SCM practices.
The Role of SCM in Agile
What is the role of software configuration management in agile processes? Normally SCM is just perceived as a commodity, as a service to be used by developers. But SCM can play a key role contributing in the creation of the right environment to achieve the desired agile goals. The problem is that basically not every version control or SCM tool fits reaching those goals. Most of them fail, giving developers enough freedom to choose the best suitable process and instead force to follow the one which is closer to the tool's capabilities.
Agile is all about changing code safer, adapting to requirements faster, and listening to the customer better. And some of the most extended SCM agile practices fail giving developers the freedom to perform changes without being concerned about project's stability.