Are Agile and CMMI Compatible?

Share on LinkedIn6Tweet about this on TwitterShare on Google+0Share on Facebook0

Guest post by Michael Mariani, Yasir Safdar and Mario Gouvea

With the increased adoption of Agile methodologies, organizations that have invested in CMMI process improvement are asking how they can combine the rigor of their existing repeatable processes with the benefits that Agile practices deliver. Can a team of agile developers that embrace change, have a short-term view, and are focused on eliminating the immediate barriers to success effectively work in an environment with well established and repeatable processes that require documentation, discipline and rigor? Are CMMI approaches compatible with Agile practices?

In our opinion and experience, the answer is yes.  While CMMI and Agile appear to be trends at cross-purposes, there are areas where both can co-exist and lead to further improvements in the overall quality and speed-to-market of the software they deliver. Agile seems unstructured, but it relies on a high degree of internal discipline and process to ensure high development velocity & quality. By exposing the internal discipline/process through lightweight documentation in key areas of the CMMI framework, Agile development can be brought into the CMMI fold.

In some of the key CMMI software development practice areas, specific tools and techniques can provide visibility in the consistency and effectiveness of the internal Agile delivery processes:

  • Software Project Planning. Group stories into waves of functionality. These serve interim checkpoints, providing clear targets to the development team and good indicator of the team’s progress. For a large client we used wave planning to group functionality based on common features to assist in scheduling dependencies on external systems as well as manage development capacity. The short nature of the waves gave the team full visibility into potential risks and the ability to quickly course correct.
  • Software Project Tracking and Oversight. Leverage Agile project management tools, such as Mingle, or XPlanner, to function as “information radiators” exposing to a broader audience the wealth of information on project status, risks and issues and decision-tracking that agile software management techniques such as SCRUM provide. This information can be compiled into status reports that are easily understandable to audiences that don’t speak Agile while remaining true to Agile processes and concepts.
  • Requirements Management. Utilize the story-level documentation to support the documentary evidence requirements of CMMI.  Most Agile management tools facilitate story based development, linking the requirements to design, build and test efforts at the story level as well as linking requirements to other project management and tracking needs such as bug tracking and source control. Usage of these tools enables full traceability and minimizes the amount of manual documentation effort required.
  • Software Quality Assurance. Ensure test-driven development and continuous integration are part of the delivery process. These are key elements of the Agile approach and contribute to making quality one of the strongest aspects of Agile software development methodologies. Modern continuous integration tools provide visual cues and vital reporting capabilities to ensure the quality and repeatability of the development and QA processes, supporting with CMMI compliance.

While Agile and CMMI can coexist, there are limits.  Agile practices can normally function with CMMI levels 1 to 3 but are usually incompatible with the higher maturity levels 4 and 5. At CMMI levels 4 and 5, the intrusion of documentation into the development process over-formalizes Agile’s internal discipline and Agile ceases to be agile.

Nonetheless, Agile can be successfully implemented in CMMI environments. With some planning and forethought, it is possible to get the speed-to-market benefits of Agile, while ensuring the consistency and effectiveness of the software development processes through the CMMI framework.

cc licensed flickr photo shared by JB London

Share on LinkedIn6Tweet about this on TwitterShare on Google+0Share on Facebook0
  • Brink Trammell

    I agree with all your points here. The key is to recognize how to balance between agility and efficiency. A large IT enterprise has some areas where it must react to changing conditions, and other areas where it needs to wring efficiencies out of business-as-usual. If the leadership sets its sights on being certified as a CMMI Level 5 shop across the board, or on implementing Agile principles on all teams, then it can’t easily set the balance at different points within the portfolio.

    And if different levels of process and documentation rigor are appropriate to different applications within the portfolio, there’s a challenge in shifting staff between such applications. Team members need to know whether they’re driving towards efficiency or agility, and sometimes have difficulty with the context-switch between them.

  • Brink Trammell

    I agree with all your points here. The key is to recognize how to balance between agility and efficiency. A large IT enterprise has some areas where it must react to changing conditions, and other areas where it needs to wring efficiencies out of business-as-usual. If the leadership sets its sights on being certified as a CMMI Level 5 shop across the board, or on implementing Agile principles on all teams, then it can’t easily set the balance at different points within the portfolio.

    And if different levels of process and documentation rigor are appropriate to different applications within the portfolio, there’s a challenge in shifting staff between such applications. Team members need to know whether they’re driving towards efficiency or agility, and sometimes have difficulty with the context-switch between them.

  • Thanks for the post.

    I obtained my scrum master certification in 2003 and immediately began implementing scrum practices within the development team in a fortune 500 company. Scrum and most other agile philosophies recognize the importance of ensuring that engineering disciplines are applied during the development cycle to minimize the technical debt associated with an undisciplined approach.

    As a result, I found myself using the defined techniques from the CMMI to assist the team with implementation and delivery of software products. The team made whatever adjustments were needed to be successful and deliver products in a timely manner. Blending agile with selected CMMI techniques are not without some associated pain but result in a disciplined team with a changed mindset that enables them to deliver business value regularly.

    Darryl Pendergrass
    Home Page – http://DarrylPendergrass.com
    Linked In – http://www.linkedin.com/in/darrylpendergrass
    Twitter ID – dvpswe

  • Thanks for the post.

    I obtained my scrum master certification in 2003 and immediately began implementing scrum practices within the development team in a fortune 500 company. Scrum and most other agile philosophies recognize the importance of ensuring that engineering disciplines are applied during the development cycle to minimize the technical debt associated with an undisciplined approach.

    As a result, I found myself using the defined techniques from the CMMI to assist the team with implementation and delivery of software products. The team made whatever adjustments were needed to be successful and deliver products in a timely manner. Blending agile with selected CMMI techniques are not without some associated pain but result in a disciplined team with a changed mindset that enables them to deliver business value regularly.

    Darryl Pendergrass
    Home Page – http://DarrylPendergrass.com
    Linked In – http://www.linkedin.com/in/darrylpendergrass
    Twitter ID – dvpswe

  • Martin

    Interesting article but you have barely scraped the surface. For example, there’s nothing explicit on the subject of Risk Management in e.g. Scrum: it’s inherent in the process, in things like the sprints/iterations and daily standups. Otherwise a good article.

  • Martin

    Interesting article but you have barely scraped the surface. For example, there’s nothing explicit on the subject of Risk Management in e.g. Scrum: it’s inherent in the process, in things like the sprints/iterations and daily standups. Otherwise a good article.

  • Tim Coote

    I’m assuming that you mean CMMI-DEV, which I think is quite close to the original project centric CMM. If so, I think that you’re missing quite a lot here: CMM assumes that requirements can be known a priori, Agile assumes that they cannot. Mature CMM processes can optimise projects, but not lifetimes of applications as they evolve. CMM is great for engineering type applications (let’s build satellites), it’s rubbish where you don’t even know if the application that’s being built will be of any real use, or how it will be used in practice and the consumers of the application are not under your control.

    CI and Continuous Deployment have a huge impact here by reducing the unit cost of end-to-end testing, they effectively decouple the application from its underlying dependencies (if used correctly), so that as the application evolves, newer products/technologies can simply be slotted in. If you layer on the move towards the dev team owning the application performance and availability, you can remove a very large slice of the run costs of your applications.

    Where the approach fascinates me is ‘can I take CI/CD and TDD and wrap them around a set of apps that are based on a number of packages?’

  • Tim Coote

    I’m assuming that you mean CMMI-DEV, which I think is quite close to the original project centric CMM. If so, I think that you’re missing quite a lot here: CMM assumes that requirements can be known a priori, Agile assumes that they cannot. Mature CMM processes can optimise projects, but not lifetimes of applications as they evolve. CMM is great for engineering type applications (let’s build satellites), it’s rubbish where you don’t even know if the application that’s being built will be of any real use, or how it will be used in practice and the consumers of the application are not under your control.

    CI and Continuous Deployment have a huge impact here by reducing the unit cost of end-to-end testing, they effectively decouple the application from its underlying dependencies (if used correctly), so that as the application evolves, newer products/technologies can simply be slotted in. If you layer on the move towards the dev team owning the application performance and availability, you can remove a very large slice of the run costs of your applications.

    Where the approach fascinates me is ‘can I take CI/CD and TDD and wrap them around a set of apps that are based on a number of packages?’

  • Pingback: The Ultimate High Performing Teams — CIO Dashboard()

  • Pingback: CMMI vs Agile! Can they work together? | CMMI - XP()