Training for the Win: Transitioning to Continuous Delivery
DevOps Instigator at ThoughtWorks
Continuous delivery is often compared with physical exercise. It’s difficult at first but becomes easier as you develop skills and form habits. When I first heard this analogy, I thought of weight training. I should have thought of training for a marathon.
I’ve noticed techniques used by people who are training for a marathon that are similar to the techniques used for successful transitions to continuous delivery. This isn’t surprising: both continuous delivery and running a marathon are ambitious goals that require a sustainable pace rather than heroic sprints. Both share three techniques for ensuring success: continuous improvement, forming positive habits, and dealing with setbacks.
The first week of a typical 16-week marathon training program looks more like a training regime to run a better 3.1 mile race than one for a 26.2 mile race. The lengths of the runs start short but increase each week. This is the surest way to reach an ambitious goal: as a series of achievable improvements starting from your current state. A sudden leap into enterprise-wide continuous delivery may be just as foolish as attempting 20 miles on your first run.
The same training program involves four runs per week, always on the same days. Setting a routine minimizes the overhead of planning and maximizes the opportunities to learn which changes are working. Runners learn about diet and hydration, while we learn about topics like automation and feature toggles. The routine also ensures that there is never too big a gap. I would rather deploy at least weekly, then deploy daily but occasionally have a multi-week deployment freeze. Breaking the routine is risky.
The biggest lesson is how to deal with setbacks. Our resolve toward continuous delivery is always put to the test after a rough deployment. Someone usually suggests that our problem was deploying too often.
Runners face this situation, as well. It seems logical to think, “I should run less because I am too fatigued to finish.” This is a dangerous idea. Running fewer total miles compromises your goal; running more miles per run risks further fatigue or injuries. Even worse, it does not address the root cause.
The key to success is a routine, fixing the root cause of all setbacks, whether it’s better hydration for runners or better automation and communication when deploying software.