I've had some inquiries for two papers on using agile processes inside a CMMI framework. It was not clear for the requesters what the problem was they were trying to address, but it is important to restate several things about CMMI and its relationship to an agile software development process.
- CMMI is a process improvement process. It is a guide to improving the software development processes of the organization. But more importantly, improving the processes that surround the software development processes. This is the role of CMMI IPPD Systems Engineering.
- The development of software - the design, coding and test - is only one part of CMMI IPPD. Focusing on the "coding" aspects ignores other critical activities in an organization that writes software for money.
- If you start with the CMMI framework and ask how specific process areas can be made more agile, then you're on the right track. If you start with an agile development process and try to make it fit into a CMMI framework, you'll be disappointed.
- Finally, if you're using CMMI as a "check box" - we have a CMMI appraisal at Level X - then you're not doing CMMI. CMMI is a process improvement process. If you're not using it to improve the processes of software development then you're wasting your time. Many firms use it (and many of those are offshore) it be compliant for some unknown set of users. Don't do this. There are numerous articles - mostly in CIO magazine - about how this leads no where.
Use CMMI for what it was designed for. An improvement process framework. Use it in the right business domain: defense, civil government, maybe corporate IT - but I'm not convinced of that even though SEI states many corporate IT departments have used CMMI for improvement. I'm too far removed from that world now to have an opinion. But here in aerospace we use CMMI and many other process improvement initiatives to our advantage. First and foremost for internal reasons - Safety and Mission Assurance is the proper term.
Drop me a note if you're interested in the journal and conference papers.
If you're going to improve software development processes do the right thing for the right reason.