The Capability Maturity Model (or CMM) was, in the beginning, designed as a tool to objectively assess an organisation’s ability to carry out a software development project. It was originally meant to assist the US government in choosing which firm to contract to produce a particular piece of software by providing an empirical comparison between competitors. So how does this apply to Agile Software Development? Paulk (2001) says that CMM “describes good management practices and prescribes improvement priorities for software organizations [and] mainly focuses on large projects and large organizations”. As I discussed in my previous blog post, Agile development tends not to be as effective in large organisations.
The five levels of maturity that classify organisations in the CMM are the initial, repeatable, defined, managed, and optimised stages. The higher the organisation is on the chain, the better the chances of them producing software that is “consistent, predictable, and reliable”. CMM is built on several aspects which guide the development team throughout the development process. These are as follows:
- Key Practices: These refer to the elements of production and worker practice that maximise the efficiency of the development team.
- Key Process Areas: These refer to a cluster of activities that lead to the accomplishment of a goal. These could be the actions of several members of a team (activities) which lead to the solving of an unexpected problem (goal).
- Common Features: These are practices that implement and institutionalize a key process area. They can be anything that highlights a problem, or a way of communicating between various branches of the overall development team.
- Goals: These are the various milestones the development team must reach in order to complete the project as a whole.
You may have noticed a somewhat glaring contradiction by now. How can a development process which values organisation and documentation synergise with Agile software development? In my last blog post I outlined that the main reason why Agile was not very effective when used by large organisations. The incorporation of the Capability Maturity Model would provide a structure from which Agile teams could operate as efficiently as they could in a smaller group by facilitating the division of the team as a whole into smaller sub-teams which will deal with key process areas individually. The managers within the organisation would serve as the go-between for the sub-teams. This allows for both the efficiency of large organisations as well as the agility of small teams to work together to accomplish complex and comprehensive software development projects.
- Paulk, M. C., “Extreme Programming from a CMM Perspective,” IEEE Software, vol. 18, no. 6, pp. 19-26, 2001.