The reality is that using an Agile approach to its greatest benefit requires discipline in a variety of ways. And none is more critical than the discipline of Software Configuration Management.
Agile teams are generally small, but their SCM needs are big - very big indeed! So big that all of the good things an Agile teams does could be rendered moot by a lack of SCM discipline.
Why? Because the practices that are at the heart of Agility require them.
The Agile team must be able to carefully manage not just code, but also the content of each delivery to their customer. Such a project will push most simple code control tools to their limits. Most sophisticated CM tools would be a better fit for such an environment.
But a tool is only as good as the team members' discipline in using it. Any Agile team must embrace clear expectations for the CM disciplines that will be followed, and each member must be dedicated to maintaining those disciplines. Starting with the right version of a code module for each development task; checking code out and in when appropriate; flagging modules that are build-ready; and many other disciplines are required.
Incremental delivery adds significant complexity to the development process. Good CM disciplines and tools are needed to meet the challenge.
Each of the Agile methods places extensive focus on practices for managing requirements change. They don't call it "change control", but they all do a respectable job of keeping the project on an even keel while welcoming changes to requirements.
What may be less apparent is the degree to which such an environment of change can stress the team's software management practices. If the customer changes something that has not yet been implemented, it will not likely be a big deal. When the response to a new increment of software is, "Almost ...", the team must be able to isolate and correct what is lacking. But sometimes your customer will say, "You know that stuff you did two months ago? It's all gotta change." In those cases, the ability to distinguish what was coded for those stories from what was added since then will be critical to the team's ability to adapt to the change.
Welcoming change means welcoming project complexity. Good CM practices will allow you to manage that complexity.
Any Agile team that uses these practices must have appropriate mechanisms in place to either avoid collisions (when two people change the same code at the same time), or to deal with them in a controlled and rigorous way. This implies mature CM tools and discipline in how they are used. It also implies that team members collaborate with each other when a collision occurs to ensure that it is resolved appropriately.
When an Agile team's practices provide the opportunity for people to step on each others' work, good CM tools, along with collaboration and discipline are the only way to keep order.
These practices compound the difficulties described above under "Incremental Delivery". Because now, instead of establishing a baseline every few weeks, we are establishing one every day, or even more often! The team's ability to identify and manage all of these baselines is key to their efficiency.
Continuous Integration also presumes that a different person is doing the build each time. This will result in inconsistencies and problems due to individual variations unless the baseline-build-test process is fully automated. Even Daily Integration works best with a fully automated process. And every developer will welcome never having to "do the build". Just click a button and watch for the green light!