Keys to Enabling CMMI
What's CMMI all about?
Well, instead of getting into CMMI itself, let's look at what CMMI is really doing.
CMMI has a:
The Purpose of CMMI is to improve processes to facilitate organizations' abilities to deliver product on time (schedule), within budget (cost) and that does what it's supposed to do (quality/functionality).
The authors of the CMMI found a set of practices that, when performed, has a consistently positive effect on Schedule, Cost and Quality/Functionality. Furthermore, they found that these values can be further improved and optimized by being able to pinpoint controllable variables and apply quantitative analysis on those variables to tweak what affects them.
The Method CMMI uses is one of graduated institutionalization. The graduated approach towards institutionalizing processes starts with simply performing process improvement practices without much by way of managing and organization. The next step moves up into planning and providing resources, training, and controlling the output and checking the results of the processes. After that, further institutionalization includes creating consistent practices across projects, collecting feedback about the processes then finally graduating towards statistical controls, predictive analysis and removing causes of inconsistencies.
If nothing else, an unspoken theme throughout CMMI is that of Communication.
How *any* of the practices work is that they facilitate communication because they require communication in order to work and won't work without it. However, communication isn't just project participants talking to one another. Communication also includes communication for the benefit of those from whom we need some action to be taken as well as for the benefit of those that follow us.
In other words, it's not just organizational (vertical and horizontal) communication, it's also temporal communication. In order to effectively bridge the temporal (as well as sometimes the organizational) communication, practices that improve processes need to be conveyed in a manner that withstands situational and temporary circumstances.
Situational and Temporary circumstances are a fancy way of pointing out that relying on individuals to pass project legacy and lore from person to person will quickly break down under the pressure and influence of time, environments, and personalities. Artifacts (not necessarily 'documentation') are how we bridge the temporal communication issue while also benefiting the organizational challenges in communicating what we need, what we did, what we're doing, and the 'why' of it all.
While the need to communicate face-to-face is essential in every successful project, it can't be the only way we communicate on longer-term projects or across distances. Neither can it be the only means of communication even on short projects where the product outlasts the development organization by many times over. There are many ways to create artifacts, some are more time-consuming and less valuable than others, but the need to create them comes from the need to facilitate broad communication that extends beyond simply face-to-face.
Lastly, practices that rely solely on face-to-face communication, without the benefit of some procedures is definitionally an 'ad hoc' process, and, is at the lowest level of institutionalization. This isn't to say that they are ineffective, but simply that they are not institutionalized and therefore are unlikely to persist from project to project. Finding the abstraction for a practice that can both persist from project to project while also being re-structured to meet the differing needs of each project is not only what makes Agile approaches to CMMI possible, but also corresponds directly with what one does when graduating their practices from one level of institutionalization to the next.