In his CM: the Next Generation series, Joe Farah gives us a glimpse into the trends that CM experts will need to tackle and master based upon industry trends and future technology challenges.
The two biggest gains of an agile development process, in my opinion, are continuous integration, which when properly administered leads to greater product quality, and the interactive customer feedback loop, which helps to get the requirements right before development is over. These are huge advantages. So, how can we extend the agile advantages to the configuration management function?
A tool-centric view of agile CM will not lead to agile CM because, for the most part tool makers worry about their own little world, and when all of the little worlds that make up the ALM function are put together, they fall short. If you want agile CM, start off with a good, agile process. If your CM tools can't support the process, look around for more flexible ones.
Achieving an agile CM Process
What is an agile CM process? If you said it's one that doesn't get in the way, you're only partially correct. CM adds a critical capability to a project. This capability is even more critical in an agile environment. CM helps the agile process keep rolling. But it also provides the information required to make decisions with good judgement and timing. An agile process is about good communication. Your CM tools should be your central communication point. All project-specific information should reside there. I should have to go to people for judgement and for skills, but not for information.
An agile CM process is one that supports all team members, making them more productive and simplifying their management tasks. If your developers need to perform tedious labelling, merging or check-in tasks, odds are that the quality of these tasks will degrade over time. If on the other hand your developers add information to the CM vault as a side effect of their work or in order to realize productivity improvements, the opposite with hold true. Automation is a key for agile CM, but automation that pervades the process, not just one that does a build. Tell me when I violate a dependency. Let me know when a new branch is required. Let me see my prioritized to-do list. Give me a single click to review my change, or any other change for that matter. Eliminate the need for me to label things. Make my life easier while helping me to make everyone else's job easier.
If you're looking for a quick fix to your current CM process to make it agile, forget it. If you want an agile process, you'll have to remove the road blocks all the way through. Just as the weakest link in a chain determines the strength of the chain, all parts of the process have to be agile to attain an agile process. If you can't easily roll back a change, you'll hit road blocks. If you can't automate your build procedure, you'll introduce costly, time-consuming problems.
If you want to make your CM process agile, go through it and identify how you can reduce end-user complexity, tool misfits, areas of risk, and so forth. If a developer asks "Why can't I just...?", don't answer right away. Instead, ask yourself "Should the developer be able to just...?" If the answer is yes, then look at what's preventing him/her from doing so, and fix the process.
agile CM Checklist
Below is a checklist of process items you should consider to make your process agile.
- Easy Traceability
- High Quality Data
- Labels Can Mean Trouble
- Reduce Dependence on Version Codes
- Easy Rollback of Changes
- Change-based CM
- Code in Repository
- Object-oriented Queries
- Interactive Meeting Support
- Priority-based Feature/Problem Management
- Instant Queries/Reports
- Easy Re-base/Workspace Synchronization
- Easily Identify Changes for