Why do continuous provisioning? Some smart, successful companies with great engineering teams are certainly benefiting from it (see list further below), but what is it doing for them? And what can it do for you?
After talking to our customers at VMworld about the possibilities of vFabric Application Director being part of their vCloud infrastructure, and last summer’s explanation of continuous provisioning with Application Director and Jenkins CI Server, we decided to list some good reasons on why continuous deployment is worth pursuing.
Building on the Benefits of Continuous Integration
Martin Fowler may have summarized it best when he said, “The greatest and most wide ranging benefit of Continuous Integration is reduced risk.” Instead of introducing a lot of change (code + bugs) all at once over longer periods of time, smaller amounts of change are introduced more frequently. This approach makes it easier to improve the software for users and fix bugs – those pesky little problems behind schedule delays, lower quality, unhappy users, and missed budgets.
With this perspective in mind, here are 5 reasons why Continuous Deployment is worth pursuing and some examples to help shift your paradigm.
5 Reasons for Continuous Deployment
1. Treat the Environment as the System. The fact is, a continuous integration and deployment (or provisioning) process is part of putting an overall system into production and can introduce errors and human mistakes. Modern, web-based architectures can use a variety of components, frameworks, open source libraries, and more. When a configuration file or middleware component is missed, development and operations team move into a frenzy of troubleshooting and retracing steps to identify the problem. An automated deployment avoids error-prone steps and raises overall system accuracy and quality. The bottom line is that both operations and development teams are there to provide a quality product to end users in a cost effective way – it means the system is up and running, with fewer bugs, in an efficient way, and with valued features.
2. Avoid the Critical Path (and Exec Status Updates marked “Delayed”). Have you ever gone to deploy a project to production and run into a snag? Immediately, the pressure is on because the deployment step itself is now on the critical path. Have you ever started sifting through an enormous amount of new code to realize an unneeded “/” on a numeric environment variable on one node was the root cause? When deployment is automated and less code is pushed more frequently, the hold ups are easier and quicker to get through.
3. Eliminate Wasted Time. As some lean development proponents have pointed out, “the biggest waste in software is waiting for software as it moves from one state to another.” Continuous deployment allows you to quit asking humans to do the same manual steps over and over again (i.e. DRY principles). When less change is introduced, bugs are easier and faster to find and fix.
4. Enable Elastic Scale. Whether you are on a public cloud, private cloud, or hybrid, there is really only one way for fully automated, elastic scale to occur. When a spike passes a threshold, new infrastructure must be provisioned automatically – without human intervention. Continuous provisioning gets you there.
5. Improve Time to Market (and Feedback). Existing bugs or enhancements get to market more quickly with fewer problems – you can underscore the words “iterative development.” Users feel that the team behind the software is responsive to their feedback – even announcements to the market can be more frequent.
Examples of Companies Doing Continuous Deployment
A quick scan of the internet shows several well known software engineering companies publicly talking about their experience with Continuous Deployment.
- WordPress: http://toni.org/2010/05/19/in-praise-of-continuous-deployment-the-wordpress-com-story/
- Flickr: http://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr
- Etsy: http://www.avc.com/a_vc/2011/02/continuous-deployment.html
- CSC and Federated Insurance: http://www.csc.com/p_and_c_general_insurance/success_stories/69365-insurers_keep_software_current_with_continuous_delivery_program
- IMVU: http://engineering.imvu.com/2010/04/09/imvus-approach-to-integrating-quality-assurance-with-continuous-deployment/
- kaChing: http://www.slideshare.net/pascallouis/applied-lean-startup-ideas-continuous-deployment-at-kaching
- Wealthfront: http://eng.wealthfront.com/2010/05/deployment-infrastructure-for.html
For more on how to set up Continuous Deployment or Continuous Provisioning with Application Director, see the following articles, or contact your VMware representative for more details:
- Continuous Provisioning with Application Director and Jenkins CI Server
- Doing Agile? 10 Features of an Agile Platform (Part 1)
- Doing Agile? 10 Features of an Agile Platform (Part 2)