Practice & Reference · Case Study · Real company

Google & the Error-Budget Policy

This page is a different story from What Is SRE?. That page covered where SRE came from — Ben Treynor Sloss, 2003, seven engineers pointed at google.com. This page covers something narrower and more mechanical: what Google's own SRE organization actually does, in writing, the moment a service's error budget hits zero. The source is Google's own published material — the freely available Site Reliability Engineering book (2016) and its companion Site Reliability Workbook (2018) — and this page sticks closely to what those books say the mechanism is for, while deliberately hedging any specific number or exact phrase that isn't something you can go verify in the source text yourself.

☺ Explain it like I'm 10

Imagine your parents give you an allowance of ten "oops" tokens a month — spend them on staying up late, skipping a chore, whatever you want, no questions asked. Spend all ten by the fifteenth of the month, though, and a rule kicks in automatically: no new privileges get granted until the token count resets, full stop, no arguing about whether this particular oops was "different." That's the whole trick. Nobody has to have the same fight every single time about whether a specific mistake was bad enough to matter — the token count already answered the question before the argument could start. Google's error-budget policy is that allowance system applied to a production service, and this page is about the part nobody puts in the pitch deck: what actually happens, in a room with real people, once the tokens hit zero.

🦥🦊Your hosts for this case file: Sol the Sloth & Foxy — Sol already worked out the exact arithmetic on SLIs, SLOs & error budgets; here, Foxy investigates what happens organizationally once that arithmetic says stop.

Where this case actually comes from

☺ Like you're 10: Two real, free books — not a rumor, not a conference talk half-remembered — and this page tells you exactly which one said what.

The error budget as a concept was introduced in Chapter 3, "Embracing Risk," of Site Reliability Engineering: How Google Runs Production Systems (O'Reilly, 2016), edited by Betsy Beyer, Chris Jones, Jennifer Petoff, and Niall Richard Murphy, with that specific chapter credited to Marc Alvidrez. Google published the full text for free at sre.google/sre-book under a Creative Commons Attribution-NoDerivatives license, which is why this page can cite it directly rather than relying on secondhand summaries. Two years later, the follow-up Site Reliability Workbook (2018) — also free, also from Google — went further and worked through what an actual, written error-budget policy looks like end to end: SLI and SLO definitions, the budget calculation, and a section explicitly laying out consequences once the budget runs out. That second book is the more operationally useful of the two for this page's purpose, because Chapter 3 of the original book explains why error budgets exist; the Workbook's worked example is closer to what the document on file actually says.

One thing this page will not do is invent specific SLO percentages or budget-freeze thresholds and attribute them to a named, real Google service like Search or Gmail. Google's public books discuss the mechanism in detail and use illustrative, sometimes hypothetical services to demonstrate it — they don't publish the live SLO numbers for their production services, and treating an invented figure as if it were Google's actual internal number would misrepresent the source. Where this page gives a specific number, it's either a general arithmetic example already established on SLIs, SLOs & error budgets, or it's explicitly marked illustrative.

The problem an error budget was built to solve

☺ Like you're 10: Without a shared number, "was this outage bad enough to slow down for?" turns into a political fight every single time — the budget ends that fight before it starts.

Chapter 3's own framing of the problem is organizational before it's technical. Product development teams are rewarded for shipping — new features, faster iteration, more users. SRE teams are rewarded for stability — fewer pages, fewer outages, a system that stays up. Left alone, those two incentive structures point in opposite directions, and every individual launch decision risks becoming a fresh negotiation fought on vibes: is this outage bad enough that we should have caught it, or is the team asking for reliability work just being risk-averse? Google's own engineers have described "100%" as close to the wrong target for almost any real service — not because reliability doesn't matter, but because the last fraction of a percent above what users can actually perceive costs disproportionately more engineering effort than everything before it, effort that could otherwise go toward features users do notice.

The error budget resolves that fight by converting it into arithmetic instead of politics. Once Product and SRE jointly agree on an SLO, the gap between that SLO and 100% stops being an aspiration and becomes a real, spendable quantity — see SLIs, SLOs & error budgets for exactly how that quantity gets computed. Product development can spend it on launch velocity, an aggressive migration, or a chaos experiment; SRE can veto nothing that stays inside it. What changes at exhaustion isn't a value judgment about whose fault the outage was — it's a number crossing a pre-agreed line, and that's the entire point: the argument about whether to slow down was already settled, in writing, before anyone was angry about a specific incident.

◆ Key idea

An error budget isn't a scorecard SRE uses to punish Product for outages. It's a shared currency both sides are allowed to spend — Product spends it on launch risk, SRE effectively "spends" it too every time they approve a risky infrastructure change or run a chaos experiment. The budget doesn't belong to either team; it belongs to the service, and that's what keeps the mechanism from degrading into "SRE says no" with extra math attached.

Forming an error-budget policy: what actually gets written down

☺ Like you're 10: The allowance rule has to be written down and agreed to by both sides before anyone's tempted to spend past it — not improvised in the moment.

The Workbook's worked example makes a point this page wants to preserve carefully: an error-budget policy is a real document, agreed in advance, not an informal understanding SRE enforces at its own discretion. The shape of that document, as the Workbook lays it out, has a handful of recurring parts:

Section of the policyWhat it pins down
SLI & SLO definitionThe exact indicator (what counts as a "good" event and a "valid" event), the target, and the measurement window — usually a rolling window such as 28 or 30 days, chosen so a single bad day doesn't dominate the reading
Budget calculationThe 100% − SLO gap, converted into a real unit for that specific service: minutes of allowed downtime, a count of bad requests, or an equivalent
Consequences at exhaustionWhat specifically stops — new feature launches, risky config or feature-flag changes — and, just as important, what's explicitly exempt: security patches and fixes for the active incident that burned the budget in the first place
Escalation & sign-offWho is allowed to grant an exception to the freeze, and at what level of seniority — the Workbook's own guidance leans toward someone with authority over both the SRE and product organizations, precisely so the exception isn't just SRE overruling itself
Review cadenceHow often the policy — including the SLO itself — gets revisited, because a budget that's chronically exhausted may mean the target was set wrong, not that the team is failing

Notice what's absent from that list: nothing in a real error-budget policy says "SRE decides case by case whether this outage counts." The whole design goal is to remove that judgment call from the moment of crisis and make it instead in a calmer moment, in writing, before anyone's launch is actually on the line.

What "the budget is spent" actually triggers

☺ Like you're 10: Hitting zero doesn't mean nothing ships — it means only the launches that can wait actually do wait, while genuine emergencies still go out the door.

The consequence Google's books describe, and the one this course's own SLIs, SLOs & error budgets page already introduced in miniature, is a freeze: once a service's error budget is exhausted before its measurement window closes, new feature launches for that service stop until either the budget recovers as the window rolls forward, or the team earns it back by fixing whatever burned it. What a freeze is not, in any credible telling of this mechanism, is a freeze on everything. Two categories routinely stay exempt, because refusing them would make the reliability story worse, not better:

Everything else on the "was going to ship soon" list — a new feature, an aggressive migration, an experiment that adds risk without addressing the thing that's currently broken — waits. That's the mechanism doing exactly what it was built to do: convert "should we slow down" from a debate into a fact that was already decided.

Budget available launches proceed at normal velocity burn consumes budget Budget exhausted before the window closes policy triggers Freeze new feature launches halted — incident fixes & security patches still ship 1 · reliability work pays down the cause — budget refills 2 · joint leadership grants a scoped, time-boxed exception 3 · repeated freezes escalate the SLO itself for renegotiation

The negotiation: how Product and SRE actually resolve a freeze

☺ Like you're 10: A freeze isn't the end of the conversation — it's the start of a specific, pre-agreed conversation instead of an open-ended argument.

This is the part that doesn't make it into most secondhand summaries of error budgets, and it's the part this page's brief specifically asked for. A freeze doesn't mean Product's launch is dead — it means the default has flipped from "ship" to "don't," and the burden has shifted onto whoever wants to override that default to make a specific case. In practice, per the shape both books describe, that conversation tends to go one of three ways:

⚠ Watch out

The most common way organizations sabotage this mechanism isn't refusing to write the policy — it's writing one and then quietly overriding it "just this once" without going through the agreed escalation path. The first unofficial override is free. The second one is precedent. By the fifth, the freeze has no teeth left, the SLO has become decorative, and the next serious outage gets exactly the political fight the error budget was built to prevent — see postmortems & blameless culture for what that looks like once it surfaces in an incident review.

Why one global policy doesn't work for shared infrastructure

☺ Like you're 10: A shared pantry can't have one "how much can you take" rule if one kid needs a snack every hour and another only bakes once a month — the rule has to fit the actual user.

Chapter 3 draws a distinction that matters more the deeper a service sits in a stack: a consumer-facing service usually has one dominant way it's used, so one SLO reasonably captures what its users need. A shared internal infrastructure service — a storage layer, a queue, an internal API — routinely serves multiple internal customers with genuinely different risk tolerances at once: one team building an interactive, latency-sensitive product on top of it, another running an overnight batch pipeline that cares far more about eventual completeness than millisecond latency. A single blanket SLO tuned for the interactive customer would force the infrastructure team to over-engineer for the batch customer's needs too, burning effort nobody asked for; tuned for the batch customer, it would silently fail the interactive one.

The practical fix the book describes is per-class or per-customer targets rather than one number for the whole service — sometimes expressed as different priority tiers of traffic against the same backend, each with its own budget and its own consequences at exhaustion. This is a genuinely harder policy to write and govern than a single-service freeze, and it's one more reason this page doesn't pretend to reproduce Google's actual internal numbers: the real complexity here is organizational as much as it is arithmetic, and the specifics are exactly the part that's least likely to be published.

A worked, illustrative walkthrough

☺ Like you're 10: A made-up example, clearly labeled as made up, so you can see the shape without anyone pretending it's a real Google number.

The excerpt below is this course's own illustrative construction — modeled after the shape both books describe, not a reproduction of any real policy document. Use it to see how the pieces from the table above actually read once assembled, not as a template to copy verbatim into a real org without adjusting it to that org's actual risk tolerance.

Service:        checkout-api  (illustrative example — not a real Google service)
SLO:            99.9% successful requests, trailing 28-day window
Error budget:   0.1% of valid requests, ≈ 40 minutes-equivalent of failed traffic

Budget state                    → Policy response
──────────────────────────────────────────────────────────────────────
0–50% burned                    → normal release velocity, no restriction
50–100% burned                  → soft warning to Product's tech lead;
                                   SRE flags newly risky changes for review
100% burned (exhausted)         → hard freeze: new feature launches halted;
                                   config & feature-flag changes need SRE
                                   sign-off; active-incident fixes and
                                   security patches are explicitly exempt
Exhausted 2+ consecutive windows → SLO escalated to joint leadership for
                                   renegotiation, not just repeatedly excused

Read the bottom row carefully — it's the detail most casual retellings of "Google invented error budgets" leave out entirely. The mechanism isn't just a launch gate; it has a built-in escape hatch for the possibility that the target itself, not the team, is the thing that's wrong.

🦥 Sol's arithmetic · 15 min

Take a service you actually own. Write its SLO the way this course already taught you on SLIs, SLOs & error budgets, then write three sentences: what specifically freezes when the budget hits zero, what stays explicitly exempt, and who — by role, not by name — is allowed to grant an exception. If you can't answer that third question, you don't have an error-budget policy yet. You have an error budget, which is just a number until someone writes down what happens when it's spent.

What Google says this actually bought them

☺ Like you're 10: Less arguing, more building — because the rule already answered the question before the argument could get personal.

As with any org's account of its own practices, treat the following as Google's stated rationale rather than an independently audited result — there's no external study measuring how many launch disputes an error budget actually prevented. What both books do claim, consistently, is a shift in the shape of the conversation: instead of every outage triggering a fresh, personal argument about whether it was "bad enough" to slow down for, the argument gets settled once, in advance, by people who aren't currently angry about a specific incident. That reframing does two things at once. It gives SRE a legitimate, pre-agreed claim on the team's priorities when reliability work is genuinely warranted — rather than losing that argument every sprint to the next feature. And it gives Product a real, quantified amount of risk they're explicitly permitted to spend without asking permission each time, which is a genuine grant of autonomy, not just a constraint with a friendlier name.

What to steal for your own team

☺ Like you're 10: You don't need Google's size to copy the habit — write the rule down before you need it, and mean it when the number says stop.

Honest caveats: what doesn't transfer

☺ Like you're 10: This story comes from two real, generous, free books — but even generous books don't publish every internal number, and this page won't pretend they do.

🎬 At the Reliability Watch
🦥

Sol the Sloth: ...I finished the arithmetic. Checkout's error budget hit zero at four this morning. It's exhausted.

🦊

Foxy: So the launch tomorrow is dead?

🦥

Sol: ...Not dead. Frozen. Those aren't the same word, and the policy already says what happens next — we don't get to invent it right now just because we're annoyed.

🐢

Timmy the Turtle: The policy names three paths out, not one. Which does Product want — pay the budget down, ask for a scoped exception, or argue the SLO itself was set too tight?

🦉

Professor Owl: And notice what none of those three paths is — someone quietly overriding the freeze because the launch felt important enough. That option was removed on purpose, before today.

🦊

Foxy: Fine. I'll go find out which of the three Product actually wants. That's a much shorter argument than "was last night's outage really that bad."

Where this connects in the course

☺ Like you're 10: One real company's written rule touches half this course — read whichever link matches what you're actually building.

The arithmetic this whole policy is built on top of is SLIs, SLOs & error budgets — read that first if the 100%-minus-SLO calculation above didn't already make sense. How fast a service burns its budget, and how urgently that should page someone, is Multi-Window, Multi-Burn-Rate Alerting. The launch-gate half of this story — deciding whether a service is even allowed to accept new risk in the first place — is Production Readiness Reviews. The organizational question of who has standing to grant an exception, and how Product and SRE are structured relative to each other in the first place, is SRE Team Topologies, and the cost side of "should we spend engineering effort chasing another nine" is Reliability Economics. For what happens once a freeze-triggering incident actually gets written up afterward, see postmortems & blameless culture and this course's own worked incident in Case study: an outage post-mortem. And for how two other real companies handled the people side of incidents — not the budget math, the culture — see Etsy & the Origin of Blameless Postmortems and Cloudflare's Public Postmortem Culture.

🦥 Sol's checkpoint

1. What organizational problem, in Google's own framing, is an error budget actually designed to solve? 2. Name two categories of change that stay exempt from a freeze even when a service's budget is fully exhausted. 3. List the three legitimate paths back to normal that this page describes once a freeze is triggered. 4. Why doesn't one global SLO usually work for a shared infrastructure service with multiple internal customers? 5. Why does this page hedge its specific numbers instead of quoting exact figures out of Google's books?

Check your answers
  1. The recurring, political argument between Product development (rewarded for shipping) and SRE (rewarded for stability) over whether any given outage was "bad enough" to justify slowing down. An error budget converts that argument into a pre-agreed number, settled in writing before any specific incident, instead of relitigated every time.
  2. Fixes for the incident that actually burned the budget (blocking the rollback would be self-defeating), and security or compliance-critical patches (freezing those trades one risk for a worse one). A well-formed policy states both exemptions explicitly in advance.
  3. Paying the budget down by fixing what caused the burn; requesting a scoped, leadership-approved exception through the policy's own escalation path; and escalating the SLO itself for renegotiation if the service is chronically exhausted, since that can mean the target was set wrong rather than that the team is failing.
  4. Because a shared infrastructure service often has multiple internal customers with genuinely different risk tolerances — for example a latency-sensitive interactive consumer and a throughput-oriented batch consumer — and a single blanket target either over-engineers for one or silently fails the other. The practical fix is per-class or per-customer targets and budgets instead of one number for the whole service.
  5. Because Google's books explain the mechanism and use illustrative examples rather than publishing the live, current SLO numbers or freeze thresholds for named production services — treating an invented or half-remembered figure as if it were Google's actual internal data would misrepresent the source, so this page marks specific numbers as illustrative and points readers to the books themselves for anything they need to cite precisely.