BOOK DEEP READ · SRE · CHAPTER 9

Simplicity: reliability is capped by how much you can still understand

Site Reliability Engineering · Ch 9 · Max Luebbe · Google · 2016

中文 →

What is this chapter about?

The apps on your phone get bigger and slower with every update. That is not your imagination. Software has a natural drift: it only ever gets more complicated, because nobody is paid to make it simpler. Chapter 9 of Google's SRE book is about fighting that drift, and its position fits in one line: the biggest reason systems break is not failing hardware or heavy traffic — it is that nobody can understand them anymore.

An analogy first

Think of a system as a house someone has been extending for ten years. Year one, it was pleasant. Then came a partition wall, a hidden cable run, a spare socket left in "just in case", a backup water pump that never runs. Ten years on it is the same house, but changing a lightbulb starts with a guess: where does this wire go? Will this wall hold?

Software drifts faster than houses, because extensions are free. Adding a feature earns praise; deleting old code earns nothing and carries the risk that someone, somewhere, still depends on it. So everyone adds and nobody subtracts.

Why the old world is hard

Three reasons. First, people are attached to what they wrote — deleting it feels like admitting months of wasted work. Second, the "we might need it someday" paths never run, so on the day you finally need one, it has usually been broken for years and nobody knew. Third, changing a hundred things and shipping them together: when something goes wrong afterwards, all hundred are suspects.

The core idea: three moves

Separate "this is genuinely hard" from "we made it hard". Delivering a page to your phone quickly and correctly is hard in itself; you cannot escape it. But the three layers of wrapping added to work around one tool's quirks are difficulty we manufactured — that part can go, and should.

Code is a liability, not an asset. Every extra line is one more thing somebody must read, test, and possibly be woken up at 3 a.m. to reason about. So on a project that is already finished, the best change is often a negative one — delete more than you add. Deleting is safe: version control keeps a copy, and you can fetch it back if you ever really need it.

Ship a little at a time. Release a hundred changes at once and you cannot tell which one hurt; release one and it is obvious what to undo. Frequent releases are not about speed — they are about having few suspects when something breaks.

A true story

In 2012 a US trading firm rolled out a new version and missed one of its eight servers. That server still carried a piece of code retired eight or nine years earlier and never deleted, which the new version woke back up. Forty-five minutes later, more than four hundred million dollars were gone. Deleting what no longer runs is not tidiness — it is defusing.

Remember this one line

Your reliability ceiling is how much you can still understand: tell the difficulty the problem forces on you apart from the difficulty you added, and peel the second kind away; treat code as debt rather than achievement, so you dare to delete; change one thing at a time so you can tell who did it. One honest cost: subtraction is nearly always harder in the moment and wins no credit, and it pays off only at some outage six months later — so it has to be explicitly valued, because willpower alone will not sustain it.

Want the criteria, the comparison tables and the diagrams? → switch to the deep read