In the last two columns we spoke about the people and process/practice characteristics of agile development, and of an agile SCM environment. This month, we would like to focus on the characteristics of SCM solutions and tool/environments that are necessary to achieve these goals, particularly about agile SCM striving to be as transparent and "frictionless", automating as much as possible.
Around the turn of the Century, (year 2k), we began seeing software projects that were attempting to try a new development approach called Agile. Most were implementing Extreme Programming, and their reasons were to reduce cost, improve software quality, better manage project risk, and to offer the business quicker functionality in the form of frequent releases incorporating smaller sets of change.
Since then I've been fascinated with the agile movement. I began to study the SCM requirements created out of the agile movement. This list of features and characteristics is not intended to be a complete list of everything required, just the ones that are most important and somewhat different from traditional SCM.
Research was based on feedback from customers, participation on agile News Groups, involvement with projects implementing agile methods and discussions with individuals in local user groups. In this research I discovered 6 characteristics of SCM solutions that stand out as major discussion points for the agile community when it comes to SCM. These 6 Characteristics or Features will provide the main focus of this article.
1 - Frictionless Code Integration
Agile projects absolutely require Frictionless Code Integration, which is defined in many ways in the SCM industry and accomplished by using a number of different features currently available on the market. In short:
- It's the freedom to change code in your private workspace without being interrupted by the SCM tool. (Optimistic Locking, Concurrent Development, etc)
- It's being able to work on your private workspace in a disconnected mode (off the LAN), and having the tools to reconnect your workspace later easily and quickly.
- It's having tools available to quickly and easily synchronize your private workspace with the repository. Synchronizing involves the ability to automatically or interactively merge file changes.
- When branching is required for the project, it's the ability to integrate changes from one branch to another in a quick and easy manner.
There are many tools on the market that provide flexible locking models. Some agile projects, in the interest of keeping things simple, prefer to have no branching, which eliminates the need for branch merging. It really depends on how the project structures its releases. When a project desires branching, it's important for an agile SCM solution to quickly and easily integrate changes from one branch to another.
Remember the agile project's needs typically require off-line development (say on the bus on the way home), and thus the need to easily reconnect their private workspace to the repository. This feature typically is a "refresh" type of function that resets the states of each component in the workspace, giving the Developer a sense for how much integration is required before committing code.
2- Refactoring Support
Agile projects change file names and directory locations quite often as they constantly simplify their code. This practice of simplifying and making the code cleaner is called Refactoring. SCM tools have traditionally struggled when supporting changing file and directory names and locations. People outside of the SCM community oftentimes don't understand the challenges of tracking file history with prior releases of code as the files are changing.
Agile SCM enables Developers to make quick and easy changes to their code with little "friction", while keeping track of file