CD (note I’ve deliberately used its abbreviation) is cool… but don’t despair if your not able to delivery the text book definition of CD, there are a number of flavors of CD;
- Continuous Delivery
- Continuous Deploy
- Continuous Deploy and Test
- Automated Continuous Delivery
- Automated Continuous Deploy and Test
Some may ask why I’ve missed off Continuous Delivery and Test, you may choose to deploy your package to a test environment, but to deliver something that is not tested would be silly. I like to distinguish between delivery and deploy. Delivery is something that is ready to be delivered, ideally assembled (like a solid wood dining table) and that deploy is an express of something being sent that is not complete in some kind of form (flat packed dining room table from Ikea).
Continuous delivery is often used incorrectly out of context; I have heard many people use it to describe the whole pipeline, Continuous delivery is the smallest and least complex part of delivery; Continuous Integration, Test Automation, Configuration Management and Build Management are far more difficult to achieve and Delivery cannot be achieved at least without ‘Integration’, ‘Configuration’ and ‘Build’ (Test should be there, but technically you could deliver an unfinished product, its unlikely, but you could).
I’m currently involved in a project that aims to role out CD (flavor TBD, but highly like Automated Continuous Deploy and Test) on a enterprise legacy suite written in a language which is barely supported by any third party tools .
For those asking, ‘but Carl your an Agile Expert, how does this fit within Agile…’, Continuous Delivery is a Agile’ish technical practice (could be ran in a waterfall model, depending on your setup), but you will gain huge benefits to your working processes by mitigating potential choke points and reducing lead times (test automation and software configuration in particular) whilst increasing your QA.
There are a number of areas you will need to take into consideration when planning your CD pipeline;
- Test automation
- Configuration management
- Continuous Integration
- Build management
- Deploy / Delivery
A word to the wise, don’t get caught up in all of the hype surrounding CD. There’s a great book out about Continuous Delivery, but treat this with a measured approach. For example the 20min from commit to delivery may not be feasible for your business, it may take 20hrs, but judge if trying to reduce that lead time has value to your product instead of blanket aiming for the 20min barrier.
A great example is that some of my previous employers customers would only update once every five years, is it worth spending hundreds of thousands of dollars on reducing the lead time for a build down from 2 hrs to 20mins? As with everything Agile, find the sweet spot, don’t over bake it, but instead get it ‘just right’.