The Capability Maturity Model Integration – Development (CMMI-Dev) is a model designed to help organizations achieve and institutionalize process maturity. CMMI specifies the goals that need to be achieved to reach a specific maturity or capability level – it is neither rigid nor prescriptive with how exactly these goals are to be met.   Agile is a philosophy and set of tenets  for software projects that are characterized by highly collaborative, cross-functional teams who work closely with their customers to deliver regular increments of functional software capability that the customers and end users are happy with.  Neither the agile philosophy nor the CMMI is prescriptive as to how the software is developed, though a specific implementation of agile will come with a set of prescribed practices. 

There is no reason the two cannot be successfully applied in tandem if this is done with careful thought and deliberation. Failures have been noted but most of these are associated with one of the following situations:

  • CMMI implementation is an exact interpretation of the generic and specific practices guidelines from the CMMI manual – creating a document heavy, rigid interpretation of CMMI
  • Agile implementation is not so much agile as it is a wild west interpretation of agile where there is no planning, process or oversight
  • CMMI team has had a bad experience with agile
  • Agile team has had a bad experience with CMMI (or CMM)
  • Organizational culture creates barriers to prevent either the adoption of agile or adoption of CMMI

Agile organizations thinking of achieving CMMI Maturity or Capability levels should understand the process area goals and give serious thought to the agile practices in place which might (with or without some modification) accomplish those goals.  There is nothing in the CMMI that says the product backlog currently being tracked doesn’t suitably accomplish one or more of the Requirements Management Process Area Goals.  Agile organizations should also think about how the agile approach could be applied to achieving process goals.

Organizations with a CMMI level that are thinking of launching agile projects should similarly think about where the synergies might lie.  As an organization with institutionalized processes – this thought process should revolve around what new and different artifacts an agile process might result in and how the existing process tailoring guidance should be modified to accommodate for new artifacts and procedures. 

When agile and CMMI are implemented sensibly and with a favorable nod to the practices and intent of each other, the results can be quite successful.  While on the face they seem like competing notions, at the heart the agile project teams and the CMMI process teams are both on a quest to improve the productivity of their software projects and the quality of the products they deliver.  When examined at a deeper level it is easy to see that there is a great deal of synergy between the two and when this synergy is realized and exploited organizations will be able to optimize their software development processes.