BOOKS DEEP-READ · CONTINUOUS DELIVERY · CH 1

The Problem of Delivering Software

Continuous Delivery · Ch 1 · Jez Humble & David Farley · 2010

中文 →

What is this chapter about?

The apps on your phone update quietly every week. Yet "getting the new version into users' hands" is, in many companies, the scariest few days of the year: the whole team starts at midnight, types commands from a forty-page runbook step by step, firefights whatever breaks, and rolls the whole thing back if it isn't fixed by dawn. Chapter 1 of Continuous Delivery makes one claim: that pain is not fate. It can be engineered away.

A strange fact first

In the same era, some companies dared to ship four times a year and treated every release as a crisis — while Amazon said publicly in 2011 that it pushed to production every 11.6 seconds on average, with over a thousand deployments in its busiest hour. The company shipping a thousand times was the steadier one. That sounds backwards, and it is exactly where this book starts: releases are dangerous not because a change is big, but because you do them so rarely.

Why the old world was hard

Three things stacked up. First, releases were done by hand — typing commands from a document, people misread a line, people miss a machine. Second, too little rehearsal — a truly production-like environment often wasn't touched until every feature was finished, so everything that won't install, won't connect, or is misconfigured all erupted at the moment there was least time to deal with it. Third, every server had become a handicraft — someone tweaked a setting today, patched something tomorrow, and before long nobody could say what the machine actually was, let alone build a second one just like it.

The core idea: make releasing a pipeline

The book's central image is close to an automatic car wash. Instead of a few people with buckets, where the result depends on who happens to be on shift, you build one fixed channel: the car drives in one end, every stage runs automatically in the same order, and anything that fails a stage is stopped right there. Software is the same. Every code change enters the same channel — compile it, run fast checks, install it on an environment identical to production and test it there. Fail a gate and you're out; only a version that clears every gate earns the right to ship.

The key part: the test environment and the real one run exactly the same steps. By the day you actually ship to users, the team has rehearsed those steps hundreds of times — so it stops being a big deal. That's what the book's most quoted line means: if it hurts, do it more often.

What you get

Releasing turns from an event back into a routine: fewer changes ride along each time, so when something breaks, the list of suspects is short; anyone can deploy with one button instead of queueing behind one guru. The honest cost: the pipeline itself takes real effort to build and daily effort to maintain, and in the short run it is certainly slower and dearer than "have someone copy the package over" — it pays back over the long haul.

Remember one thing

Turn releasing into an automated, repeatable pipeline so every change travels the same road and faces the same checks — then release as often as you can. Rare releases are the dangerous ones; frequent releases are the boring, safe ones.

Want the mechanisms, the anti-pattern checklist and the diagrams? → switch to the deep read