Software configuration management (SCM) techniques have a reputation as something to tolerate as a necessary evil, in spite of the fact that they appear to make development more complicated.
With time, developers see the benefit of version control, but often they have the impression that SCM is "important" in some not understood way. The fear is particularly acute when it comes to codeline management, especially when the word "branch" is mentioned.
In this article I will explain the concept of Agile Software Configuration Management, and give an example of how one of the more feared codeline management concepts; the branch, can be understood as a tool for agility. This is one example of why version management is part of the software developer's toolkit, even the agile developer's toolkit.
What Is Agile Software Development?
In his book, Agile Software Development Ecosystems , Jim Highsmith says that "Agility is the ability to both create and respond to change in order to profit in a turbulent business environment." A team that practices agile software development, is one that is responsive rather than weighed down by process and which embraces these values (From the Agile Manifesto: www.agilemanifesto.org):
- To value individuals, interactions processes, and tools
- To value working software over comprehensive documentation
- To value customer collaboration over contract negotiation
- To value responding to change over following a plan
Agile and SCM
Developers often fear that SCM techniques beyond basic version management, will add complexity to the development process and slow down progress. It is true that inappropriate use of SCM techniques, such as branching, can do more harm than good to your project. The correct application of SCM tools and techniques can give you the courage to forge ahead quickly since you know that there will be little risk that you will get lost.
SCM is often associated with heavyweight "Process." When you apply SCM appropriately, it becomes a tool to enable your approach to software development to help you work more effectively. Let's detail a few of the ways Agile SCM applies the values of the Agile Manifesto.
Individuals and Interactions over Processes and Tools
SCM Tools should support the way that you work, not the other way around. Often, the reason behind frustrating SCM processes is due to trying to fit a tool that imposes a process into an organization that needs a much different kind of process.
Working Software over Comprehensive Documentation
SCM can automate development policies and processes with executable knowledge over documented knowledge. This way, you can both make things easy for developers, and ensure that necessary procedures are followed by writing scripts instead of documenting procedures.
Customer Collaboration over Contract Negotiation
SCM should facilitate communication among stakeholders and help manage expectations. By using the appropriate codeline structures you can make it easier to create snapshots of the current state of the system. This also makes it easier for stakeholders to see them.
Responding to Change over Following a Plan
SCM is about facilitating change, not preventing it. Create codeline structures that isolate the components that need to be kept stable from those that are in active development. Don't make the entire team move at the pace of the more restrictive components. To understand how to structure codelines for agility, you need to understand the concepts of codeline and codeline policies.
A codeline is a progression of the set of source files, and other artifacts, which make up software components as they change over time. You can have multiple codelines for a project that are independent of each other. For example, you can do your development work