It doesn’t matter if you get there, every step along the way is an improvement.
Ever since coming across the idea on Eric Ries’s blog I’ve always been a big fan of Continuous Deployment. For those unfamiliar with the term, it means writing your code, testing frameworks and monitoring systems in such a way that it is possible to completely automate the process of going from source control commit to deployment to a live system without posing a quality melt down. This means teams can find themselves deploying 50 times a day as a matter of course.
It’s not without it’s critics, and a lot of people see this as one way ticket to putting out poorly tested buggy code. I think that those folk completely miss the point and that in many scenarios in fact the opposite is true. The thing I really like though, is that, whether or you ever get to the point of automatically deploying every commit to live, every step that you might take to get there is hugely positive.
So, really, what would have to happen in order to employ a Continuous Deployment regime?
18 months ago my then team started to take this idea more seriously, I thought it would be interesting to give an overview of the steps taken towards Continuous Deployment, and since we’re certainly not there yet, what we plan to do in the future.
We started from a point where we would release to live environment every few weeks. Deployments, including pre and post deploy testing could take two people half a day sometimes more. I should also say that we are dealing with machine to machine SaaS systems where the expectation is that the service is always available.
Reduce manual deployment load
Our first efforts aimed to reduce the human load on deployment through automation. Fear meant that we still needed to ssh into every node to restart but every other step was taken care of. This meant that it eventually became common place to deploy multiple times a week across multiple platforms.
Improve system test coverage
Once a deploy was live we were still spending considerable time on behaviour verification. To address this we worked to improve our system and load testing capability. Doing so meant that we had more time to manually verify deploy specific behaviour, safe in the knowledge that the general behaviour was covered by the tester.
Improve system monitoring
This approach also requires a high level of trust in system monitoring. We have our own in house monitoring system whose capabilities we expanded during this period. In particular, we improved our expression language to better state what constituted erroneous behaviour and we also worked on better long term trend analysis, taking inspiration from this paper . It’s no surprise to me that it came out of IMVU who have been practicing Continuous Deployment for a long time.
Reduce deploy size
Since the act of deployment was now much less expensive we looked to reduce the number of changes that went out in each deploy. At first this felt false, after all if the user can’t use the feature in it’s entirety, what’s the point? We soon realised that smaller chunks were easier to verify and sped us up over time. We took an approach that I’ve since heard referred to as ‘experiments’ so that new functionality could be deployed live but was hidden from regular users. It meant that we could demo new functionality in production, without disrupting the business as usual service.
Embrace lean inspired methodology
Breaking down deploys into a few day’s worth of work also improved our lead time meaning that we could more responsive in the event of a change of plan. It was during this period that we switched from time boxing to Kanban. This is interesting since Continuous Deployment is often championed by the lean startup movement.
The future
More recently, actively pursuing Continuous Deployment has taken a back seat, but the next logical steps could be to further flesh out the system test coverage and then look to completely automate deployment to the staging environment (modulo database changes).
However, it doesn’t really matter what we do next, if it takes us a step closer to theoretically being able to deploy continuously it will undoubtedly improve our existing lead time and responsiveness.
This post contains a number of Continuous Deployment resources, but a few further articles I found to be interesting follow include:-
- http://radar.oreilly.com/2009/03/continuous-deployment-5-eas.html
- http://timothyfitz.wordpress.com/2009/02/10/continuous-deployment-at-imvu-doing-the-impossible-fifty-times-a-day/
- http://toni.org/2010/05/19/in-praise-of-continuous-deployment-the-wordpress-com-story/
- http://theagileexecutive.com/2010/07/01/technical-debt-meets-continuous-deployment/
Webmentions
kamagra comprimés gratuits du canada
pharmacies en ligne sans ordonnance kamagra
kamagra prášky v kanadě
koupit kamagra přepravě přes noc
discount itraconazole generic cheapest
itraconazole cheap overnight delivery
order fildena canada cost
ordering fildena without rx online
Order gabapentin online by fedex
buy cheap gabapentin generic pharmacy usa
buy cheap flexeril cyclobenzaprine cost at walmart
cheapest buy flexeril cyclobenzaprine purchase australia
discount dutasteride usa pharmacy
buy dutasteride cost on prescription
buy cheap avodart usa where to buy
how to order avodart generic pharmacy usa
how to buy staxyn generic canadian
comprar staxyn mexico
ordering xifaxan generic when will be available
online order xifaxan purchase discount
buy rifaximin low price
buy rifaximin cost effectiveness
purchase enclomiphene purchase australia
online order enclomiphene generic available
rx pharmacy androxal
order androxal australia purchase