THE AGILE MATURITY MODEL APPLIED TO BUILDING AND RELEASING SOFTWARE Jez Humble & Rolf Russell © 2009 ThoughtWorks, Inc.
September 2009
01
In this paper we present a maturity model for building and releasing software. This model is designed to serve several purposes:
To provide a structure for assessing your team or organizational capabilities in building and releasing software To provide an approach for planning and executing improvements to existing practices
We start with a discussion of the Agile Maturity Model, move on to building and releasing software, present the maturity model, and then describe how to use it.
THE AGILE MATURITY MODEL The Capability Maturity Model Integrated (CMMI®) is intended to institutionalize a collection of pre-defined delivery practices and ensure their consistent execution so as to increase the probability that a team or organization can successfully complete projects. The definition of “successful” includes completing the project on time and in budget. In contrast, the Agile Maturity Model is an internal tool used at ThoughtWorks and other organizations to help organizations understand their current practices, and work to improve them with the goal of increased ability to respond to changing business conditions, and better harnessing innovation. The model used here is a both a specialization and an adaptation of the Agile Maturity Model. Although we share the same goals as the Agile Maturity Model, we have changed the definition of the levels so as to apply to the practices related to building and releasing software.
BUILDING AND RELEASING SOFTWARE The delivery of working software involves several activities beside development. In particular, software must be turned into a form suitable for installation into its target environment, subjected to various forms of testing, and then be released to s. Our assertion is that this process should be performed continuously rather than as a series of phases, with the aim of creating a fully automated, reliable, predictable and visible process with well-understood, quantifiable risk.
02
The Ideal State Ideally each change made to your application, its environment, or their configuration, should go through an automated process. This process should create binaries, run automated tests against them, and inform all relevant parties of the results of this process. We call such a system the deployment pipeline. It should also be possible for developers, testers, and operations people to have not only visibility into this process, but also to be able to self-service processes such as deployments to testing and environments and the release of applications at the push of a button. Such processes also form part of the deployment pipeline.
THE MATURITY MODEL In order to achieve our ideal, it is essential to cover all parts of the process of building, deploying, testing and releasing software.
Build management and continuous integration are concerned with creating and maintaining an automated process that builds your application and runs tests upon every change, and then provides to the whole team on the process. Environments consist of the entire stack your application requires to work: hardware, infrastructure, networking, application stacks, external services, and their configuration. Release management is defined by Forrester as “the definition, and enforcement of processes for preparing software for deployment to production.” We have added considerations around compliance to this area, since conformance to regulatory environments is often one of the strongest constraints on release management. Testing, whether through automated tests or manual processes such as exploratory testing and acceptance testing, is designed to ensure that software contains as few defects as possible, as well as conforming to nonfunctional requirements. We have focused on the areas of testing that are most relevant to building and releasing software. Finally, data management (usually, but not always, in the context of relational databases) forms an essential part of the deployment and release process, since it is a frequent source of problems when releasing or upgrading software.
To ensure each part of the process is given due attention, we have divided the model into five sections.
03
HOW TO USE THE MATURITY MODEL The ultimate aim is for your organization to improve. The outcomes you want are:
Reduced cycle time, so you can respond faster to changing business requirement and increase revenue
Reduced defects, so you can improve your reputation and spend less on
Increased predictability of your software delivery lifecycle to make planning more effective
The ability to adopt and maintain an attitude of compliance to any regulatory regime you are subject to
The ability to determine and manage software delivery risks effectively
Reduced costs due to better risk management and fewer issues delivering software.
We believe that using this maturity model can help you achieve all of these outcomes.
04
Here are the steps to use the model, based upon the Deming cycle: plan, do, check, act1. 1. Identify where your organization lies on the model. You may find that different
parts of your organization achieve different levels on each of the different categories. 2. Choose what to focus on. You should work out what the possible improvements
you could implement are, how much they will cost, and what benefit they will deliver. You then choose a few improvements you could make, and decide how to implement those changes. You should set acceptance criteria to define the results you are expecting to see so you can decide if the changes were successful. 3. Implement the changes. First, plan how to implement the changes. You might
decide to start with a proof of concept. If so, choose a part of your organization that is really suffering - these people will have the best motivation to implement change, and it is there that you will see the most dramatic change. Then of course you have to execute your plan. 4. Check if the changes you implemented had the desired effect. Use the
acceptance criteria you created. Hold a retrospective to find out how well the changes were executed. 5. Repeat these steps, building upon your knowledge. Roll out more improvements
incrementally, and roll them out across your whole organization.
Organizational change is hard, and a detailed guide is beyond the scope of this paper. The most important advice we can offer is to implement change incrementally. If you try and go from level one to level five across your whole organization in one step, you will fail. Changing large organizations can take several years. Finding the changes that will deliver the most value and working out how to execute them should be treated scientifically: come up with a hypothesis, and then test. Repeat, and learn in the process. No matter how good you are, it is always possible to improve. If something doesn't work, don't abandon the process: try something else.
1 W. Edwards Deming - Out of the Crisis, MIT Center for Advanced Engineering Study (1986) See “Management-driven Metrics Versus Metrics-driven Management,”
05
FURTHER READING Build Management and Continuous Integration Fowler, M., “Continuous Integration”, http://www.martinfowler.com/articles/continuousIntegration.html (2006). Duvall, P., Matyas, S., Glover, A., Continuous Integration: Improving Software Quality and Reducing Risk, Addison-Wesley (2007). Humble, J., Read, C., North, D., “The Deployment Production Line”, Agile Conference 2006 (2006). Environments and Deployment Farley, D., “Single-Click Software Release”, in ThoughtWorks Anthology, The Pragmatic Programmers (2008). Nygard, M., Release It!, The Pragmatic Programmers (2007). Release management and Compliance Lacy, S., Macfarlane, I., Service Transition, ITIL Version 3, Stationery Office (2007) Behr, K., Kim, G. and Spafford, G., The Visible Ops Handbook: starting ITIL in 4 Practical Steps, Information Technology Process Institute (2004) Testing Crispin, L., Gregory, J., Agile Testing: A Practical Guide for Testers and Agile Teams, Addison-Wesley (2009) Data Management Ambler, S., Sadalage, P., Refactoring Databases: Evolutionary Database Design, Addison-Wesley (2006) Agile Maturity Model Pettit, R., “An ‘Agile Maturity Model’?”, Agile Journal (2006)
AUTHORS Jez Humble Jez Humble is Product Manager for Cruise, ThoughtWorks Studios' continuous integration and release management server. As the founding leader of ThoughtWorks' build and deployment community, he has worked to capture and propagate best practices in the build engineering and release management space. Jez has ten years of professional experience in IT as a developer, system , trainer and manager. He has worked with a variety of platforms and technologies,
06
consulting for non-profits, telecoms, financial service and insurance service organizations. Since 2004 he has worked for ThoughtWorks in London, Bangalore, Beijing and San Francisco. He holds a BA in Physics and Philosophy from Oxford University and an MMus in Ethnomusicology from the School of Oriental and African Studies, University of London.
Rolf Russell Rolf Russell is Practice Director for Build & Release Management at ThoughtWorks. In this role he is responsible for the development of ThoughtWorks' service offerings that enable clients to achieve more throughput, transparency, security and speed-to-market in their build and release processes. Rolf has been a part of ThoughtWorks for seven years in a variety of roles including developer, trainer, project manager, innovation facilitator, and as a member of the North American Operating Committee. His interest has drawn him to the build & release world and, prior to becoming Practice Director, Rolf led several teams executing significant B&RM projects. Before ing ThoughtWorks, Rolf worked for a supply chain intelligence startup and for Oracle Corporation as well as teaching English in Japan. He holds an MSc in Artificial Intelligence from Edinburgh University and a BS in Computer Science from Cornell University.
ACKNOWLEDGEMENTS Thanks to Tim Brown, Rebecca Parsons, Ross Pettit, and Andy Yates for comments, contributions, and .
ABOUT THOUGHTWORKS STUDIOS ThoughtWorks Studios is a global leader in Agile ALM tools and training. Its products and services are used by organizations as a foundation for sustainable Agile adoption, where project management, automation and engineering best practices are required. The company’s Adaptive ALM solution provides a platform for managing all aspects of the software development lifecycle, from requirements definition and project management to test automation, quality assurance and release management. The three products that make up Adaptive ALM, Mingle (project management), Twist (test automation) and Go (release management), are available as an integrated solution or as stand-alone products. The company also provides in-depth training courses that cover all aspects of Agile ALM through it Agile Workshops series. Backed as an independent division of ThoughtWorks®, the pioneering leader in Agile development and best-practices, ThoughtWorks Studios’ customers include 3M,
Honeywell, BBC, eBay, Barclays, Vodafone, McGraw-Hill and Rackspace. It is headquartered in San Francisco and Bangalore, with offices in London and select cities in Europe, Asia and Australia. For more information, please visit www.thoughtworks-studios.com. For more information, please visit www.thoughtworks-studios.com.