BOOK DEEP READ · SRE · CHAPTER 1

Introduction: What Happens When a Software Engineer Designs an Ops Team

Site Reliability Engineering · Ch 1 · Google (Benjamin Treynor Sloss) · 2016

中文 →

What is this chapter about?

You order food, message a friend, pay for something online — and you never once wonder whether the app will open. Behind that "never once wonder" is a group of people minding the machines. Chapter 1 of Google's Site Reliability Engineering is about a discovery: the old way of minding machines got more expensive and more quarrelsome the bigger you grew — so Google hired a different kind of person and wrote a different set of rules.

An analogy first

Picture a restaurant that keeps growing. The old way: twice the customers, twice the dishwashers. Ten times the business, ten times the dishwashers — and dishwashers spend all day washing dishes, never free to do anything else.

Google's way: don't hire dishwashers, hire engineers who build machines, and impose one hard rule — at most half your day may go to washing dishes; the other half must go to building a dishwasher. These people can't stand repetitive work, and happen to have the skill to mechanize it. So the business grows tenfold and the team doesn't.

Why the old world was hard

The harder problem isn't headcount — it's that two groups are built to argue. People who write features are judged on how much they ship, so they want to release constantly. People who mind the machines are judged on nothing breaking, so they want nothing to move. And almost every outage starts with someone having just changed something. The two goals point in opposite directions by construction.

Hence the familiar tug-of-war: releases must pass a gauntlet of reviews, and engineers learn to rename their changes to slip past ("that wasn't a release, I just flipped a switch"). Nobody is being unreasonable, and everything still gets slower.

Its second idea: a budget for how long you're allowed to break

The prettiest move in the chapter turns that argument into both sides reading the same number. You start by admitting, out loud, that you are not chasing "never breaks." Then you write down a quota: how much downtime this service may have in a year. That's the budget.

The rule that follows is simple: while budget remains, ship whatever you like — small problems just spend budget, and nobody blocks you. When the budget runs out, new features stop entirely and everyone goes back to fixing stability until the next period refills it. Want to move fast? Make the system solid first. Not because someone senior said so — because of what the ledger says. And chasing "never breaks" is actually the wrong goal: the phone in your hand, the Wi-Fi in the café, the broadband at home are all far less reliable than your service. Polish beyond a point and users can't tell, while the money burns.

What it bought

Traffic grows tenfold and the ops team doesn't. Releases stop being an approval fight and become a balance check. After an incident you blame the system, never the person — because blaming people only guarantees nobody tells the truth next time. And one charmingly plain finding: writing the firefighting steps down in advance makes real recovery several times faster than improvising.

The cost, stated honestly: this asks people who can write code to do operations — expensive and hard to hire. If your service isn't big enough or long-lived enough, copying the whole thing may not pay for itself.

Remember this one line

Rather than hiring dishwashers forever, hire engineers to build the dishwasher — and force them to build it with two hard rules: half their time must go to building tools, and you may only break for so long a year; break more and new features stop. Reliability stops being a clash of opinions and becomes a ledger everyone can read.

Want the mechanisms, the numbers and the diagrams? → Switch to the deep read