You probably have heard of continuous integration.  But have you heard of continuous deployment or continuous delivery?  So what’s the difference? While continuous deployment is concerned about getting changes into production as fast as possible, continuous delivery is concerned with getting feedback on changes as fast as possible by deploying into a production-like environment.

When I first heard about people extending continuous integration to the actual deployment process, they were talking about continuous deployment.  I was hearing about how Flicker deploys to production multiple times per day.  That sounds cool, but then I thought about my own situation and thought, “there’s no way I can do that.”

Then I heard about continuous delivery, the concept Jez Humble and David Farley talk about in their book titled “Continuous Delivery.”  They introduce the concept of deployment pipelines where you have changes being deployed into an environment that mimics production.  There you can have testers provide feedback on the changes.

The big difference between this and continuous deployment is that the business team gets to decide when the changes actually go to production.  And that is why this is such a win-win scenario.  The development team gets feedback from a valid environment and the business team still gets to control when something is deployed.

The other part of the deployment pipeline concept that I really like is that you deploy the same way to all environments, including development.  This forces your developers to work with the operations team to get an automated deployment process in place that works.  And once it works in development, you know it will work in production.  No more custom scripts depending on which environment you are deploying to.

If you think about it, there is no downside to doing this.  You automate a process that is inherently tedious and prone to human errors, and you standardize a process so that everyone within your organization does it the same way.

Imagine the power of this scenario:  The testers want the latest changes in the pre-prod environment for testing.  So they go to a website, pick the application version to be deployed, and pick the environment to deploy to.  And a few minutes later they get an email confirmation that the application is ready for them to use.  Now that is self-service!