Continuous delivery vs. Continuous Deployment

At my current client, we've been overhauling our CI process to enable us to work towards continuous deployment.

Currently, a deployment only happens every few weeks which is a pain for our users (this is an internal line of business system), so we're working hard to get releases going on a regular basis, and possibly continuously.

This goal, as well as the fact that I'm presenting a session on CI and CD at Entelect on Friday, have led me to dig a bit deeper into continuous deployment and I came across an interesting blog post

My understanding of the difference is as follow:

Continuous Delivery
  • Ensuring that code can be rapidly and safely deployed to production when needed
  • Every change is deployed to a production-like environment
  • Rigorous automated testing is done against the production-like environment
  • We have confidence that we can click one button to trigger an automated deployment into Production when business is ready to accept the changes
Continuous Deployment
  • This removes the manual deployment step in the process above
  • Changes go straight into production when all acceptance tests pass on the production like deployment

The author of the post specifies that ideally we should aim for the second option, but admits that in many businesses its just not possible. In those cases, aim for option 1 (with the manual step).

I quite like that approach, I can't say I've ever worked on a system where the users would tolerate going down many times a day just to get the latest code fresh off the presses. I can see there may be some systems where it would work, I've just never worked on one.

Please share your experiences and opinions in the comments. I will raise this topic at the Entelect presentation on Friday and maybe do a follow up post with any new insights I gain.

Update: Saw this tweet from Martin Fowler that seems to convey the same differentiation