← the whole book on one page

Chapter 1: What Production Is — Running Software in the Cloud Era

Code is finished when it ships. Production never is.

On the morning after Encore’s new Notification service went live, nothing happened, and that was the first thing worth noticing. Overnight a coding agent had rebuilt the service on a new framework, with better retry semantics and 40 files that no person had typed or read in full. The contract tests passed, the boundary rules passed, the security checks passed, and the canary, judged against its service level objective (SLO), promoted the new version. By breakfast the service had delivered about 180,000 tickets to fans’ phone wallets and email inboxes, and every dashboard was green.

One engineer had nonetheless spent 20 minutes on that change before it merged, reading the behavior it promised more than the code, and had found that the new retry semantics could, under the wrong timing, send a fan the same ticket twice. No automated check would have noticed, because a duplicate ticket is a perfectly healthy delivery, twice. She added a specification-level idempotency test, and the change went out. The green dashboards raise this book’s question, which is older than it looks. Who runs code that nobody fully read, and what do they need from it at 3 a.m.?

People have always run code they did not write, and how to do it well without understanding all of it is the founding question of our discipline. This chapter traces how it was answered, from the machine-room operators of the 1950s to Google’s first site reliability engineering (SRE) team in 2003, then sets out what users feel of production, the stack of practices we run it with, and the principles that make a system operable by strangers.

Encore, the System We Will Run

Encore is our companion again, as it was throughout the Architecture book, which followed it from nine engineers to 400. For most of the week it could pass for an ordinary online shop, selling seats at concerts across Europe, in euros. Then a famous artist’s tour goes on sale, nearly always at 10:00 on a Friday, and within minutes the traffic reaches 500 times its weekday level. A million people want a few thousand seats; every seat must be sold exactly once, never lost and never sold twice in a race; and the bots arrive before the fans do, because a reseller’s scripts are faster and more numerous than any person. Nearly every structure in Encore exists to answer one of those demands, and most of this book’s trouble lies where those demands conflict.

On such a morning the first problem is the size of the crowd, and only then the selling of seats, so Encore is built to manage the crowd first. Figure 1.1 is the map, and the part of it that matters most is short. The fan’s purchase path begins at the Sale Gate, Encore’s virtual waiting room, where fans meet a queue instead of a seat map and are let through at a metered rate, about 1,200 a second per event, chosen so that nothing behind the Gate runs hot. That makes the Gate an admission controller, a component that protects a scarce resource by deciding how much work may reach it, and its rate is the most powerful single control Encore has. Alongside it, Bot Screening judges, session by session, whether it faces a fan or a script. Past them, Seat Inventory is the one authority on whether a seat is free: it holds a fan’s chosen seats for five minutes and sells each one once, whatever else is failing. Orders & Payments turns the hold into a sale within a 3 s checkout budget, calling an external payment service provider (PSP), with a second provider ready to take new payments if the first falters. The PSP’s slowness once took the whole site down; the Architecture book told that story, and Chapter 2 reads it again.

Encore's system map Fans, organizers, partners and tenants enter through the API gateway. The purchase path runs from the Sale Gate through Bot Screening and Seat Inventory to Orders & Payments and the external payment providers, two of them. Catalog uses a bought search product; Support uses the AI gateway to reach model providers and asks Orders for refunds. Seat Inventory and Orders publish to the ticket-sales.v2 stream, which Notifications, the Finance ledger and Sales Analytics consume. BROWSE, SEARCH, SEAT MAPS REFUNDS Fans queue, seats, wallet Organizers events, payouts Partners venues, resale apps Tenants venues on SaaS cells API gateway api.encore.com Sale Gate waiting room, admission Bot Screening rented edge signals Seat Inventory 4 shards, 5-min holds Orders & Payments purchase saga, 3 s Catalog events, seat geometry Support assistant, refund agent PSPs two; cards, ~800 ms Search a bought product AI gateway routes model turns Model providers frontier, cheap tier ticket-sales.v2 SeatReserved · SeatSold · TicketIssued · SaleCompleted Notifications email, wallet passes Finance ledger daily reconcile Sales Analytics a consumer only People Encore service Holds the record Bought or outside Purchase path Event, not a call

Figure 1.1 — Encore’s system map. The purchase path runs down the middle; everything else either hangs off it or listens to it.

Figure 1.2 follows one fan along that path, from the queue to a ticket in the phone wallet.

One fan's purchase, step by step Eight steps in two rows. The fan waits in the Sale Gate's room, is admitted at no more than about 1,200 fans a second per event, passes Bot Screening, sees a seat map whose geometry comes from Catalog's cache and whose availability comes from Seat Inventory, holds seats for five minutes with POST /holds, completes a checkout saga within a 3-second budget of which about 800 ms is the payment provider, after which SeatSold and TicketIssued are published and Notifications delivers the ticket to the fan's wallet. 1 · SALE GATE Wait in the room queue position, in order 2 · SALE GATE Admitted ≤ ~1,200 fans/s per event 3 · BOT SCREENING Screened edge signals, velocity rules 4 · CATALOG + SEAT INVENTORY Seat map shape cached, seats live 5 · SEAT INVENTORY Hold POST /holds · 5-min TTL 6 · ORDERS & PAYMENTS Checkout saga 3 s budget, ~800 ms at PSP 7 · TICKET-SALES.V2 Facts published SeatSold, TicketIssued 8 · NOTIFICATIONS Ticket in the wallet email and wallet pass ONE FAN, ON-SALE MORNING · READ ALONG THE ARROWS minutes, sometimes an hour; the room absorbs the 500× the dial that keeps every shard under 80% load the bots arrive first; real fans must pass geometry: Catalog's cache availability: Inventory on one of four shards, in the event's home region Idempotency-Key on the buy; PSP down: the second PSP SaleCompleted feeds Finance and Analytics one ticket, delivered once: the rewrite's lesson Step, tagged with the service that owns it The two numbers that bound the rush The fan moves on

Figure 1.2 — One fan’s purchase in eight steps, each tagged with the service that owns it. The admission rate and the checkout budget bound the rush from opposite ends.

Forty teams build these services and carry their own pagers, standing on a platform whose golden paths take a new service from template to production, and Figure 1.3 shows where it all runs. Within the platform group sits the Reliability team, ten engineers who own the tooling for service level objectives, the incident process and the readiness review held before every big on-sale. They advise, embed and rehearse; they do not run other teams’ services.

Where Encore runs Two EU regions, EU-1 and EU-2, each with a core Kubernetes cluster, six Professional tenant cells with a database per tenant, a serverless Sale Gate edge and serverless self-service cells of about 50 venues. Fans and partners read from either region. Each event's writes are pinned to a home region, where its seat-ledger leader commits each write once three of five replicas hold it: two in the home region, two in the other region and a witness in a third region, EU-3, which stores the log but serves no traffic. Both regions reconcile toward the encore-deploy Git repository. EU-1 · REGION SIX PROFESSIONAL CELLS · A DATABASE PER TENANT EU-2 · REGION SIX PROFESSIONAL CELLS · A DATABASE PER TENANT EU-3 · WITNESS MAJORITY COMMIT · RPO 0 RECONCILE RECONCILE P1 P2 P3 P4 P5 P6 Core cluster Kubernetes, the services Sale Gate edge serverless, pre-warmed Self-service cells serverless, ~50 venues Seat ledger leader event A's writes land here P7 P8 P9 P10 P11 P12 Core cluster Kubernetes, the services Sale Gate edge serverless, pre-warmed Self-service cells serverless, ~50 venues Seat ledger replica event A, votes, can lead Seat ledger witness stores the log, no traffic Fans and partners public API, apps encore-deploy Git: desired state reads: either region writes: the event's home region Kubernetes cluster Serverless Ledger or repository Replication; any two of three commit GitOps pull

Figure 1.3 — Where Encore runs: two EU regions of Kubernetes cells and serverless edges, reconciled from one Git repository. The seat ledger commits each write to a majority of five replicas in three locations, two in each region and a witness in a third, which is why losing a region loses no sale.

One Friday runs through this book: the on-sale for Vesper Hale, a fictional artist whose 12-date European tour will bring about 1.1 million fans to the Gate in the same minute. Chapter 12 fights it and Chapter 13 learns from it, and earlier chapters point out small, reasonable decisions that will matter that morning. Everything else in Encore, from its tenants and cells to the change freeze and the assistant in the incident channel, is introduced in the chapter where it first does something, and the appendix keeps a glossary for the reader who wants it all on one page.

1.1 Production as a Sociotechnical System

What we mean by production

The word production comes from manufacturing, where it names the floor on which real goods are made, as distinct from the laboratory. Production is the environment in which software serves real users with real consequences, where a mistake costs money, trust or someone’s evening, and where nothing can be undone merely by closing a laptop.

The theatre teaches something the factory does not. A script is written once, but the production is made again every night by a crew that adjusts to a cold house or a missed cue, and a good stage manager keeps the show running through small failures the audience never sees. The analogy breaks at scale: a crew can see the whole stage, whereas Encore runs thousands of copies of its services for millions of people it never sees, and the gap between what is happening and what anyone can perceive is where most of this book’s techniques live.

People and machines, jointly

The term sociotechnical system comes from the Tavistock Institute in London, where Eric Trist and Ken Bamforth, studying British coal mines in 1951, found that the technically superior longwall method had made the mines worse by breaking apart the small, self-managing teams that kept the old method safe. Their conclusion, relearned in every industry since, was that the social and the technical parts of a work system cannot be optimized separately.

A sociotechnical system, then, is one whose behavior is produced jointly by its people and its technology, so that neither can be understood or improved without the other. Production is such a system, and its reliability is no more a property of the code than a ship’s safety is a property of its hull. It is produced continuously, by people knowing what the system is doing, changing it carefully, withstanding what goes wrong, responding when it does and learning afterwards. Those five verbs organize the rest of the book.

The Notification rewrite shows what this means. As an artifact the new service was better than the old one; as part of a sociotechnical system it was briefly worse, because its operators understood less of it. The engineer’s test moved a piece of human knowledge into a check that would outlast her attention, the oldest move in operations. In the Architecture book’s language, Encore’s 500× spike is essential complexity, whereas the gap between what a system does and what its operators perceive is usually accidental, and much of operations is the patient work of closing that gap.

Recap. Production is where software meets real consequences, a sociotechnical system whose reliability people and machines produce jointly. Much operational work closes the gap between what the system does and what its people can perceive.

Exercise 1.1. List the last five times a person, not an automated check, prevented or shortened a problem with a service you know. For each, ask whether that person’s knowledge now lives in a test, an alert or a runbook, or still only in their head.

1.2 From Operators to SRE — A Short History of Running Software

The machine room

In September 1947 someone working on the Harvard Mark II taped a moth into the machine’s logbook, beside the note “First actual case of bug being found.” The logbook is the more instructive object: running a computer has always meant recording what went wrong, and Chapter 12’s incident timelines continue that record.

Through the 1950s and 1960s, as machines like the IBM 704 and later the System/360 spread through universities, banks and government, computer operator became a job with its own shifts and skills. Most installations ran as a closed shop: programmers handed their card decks across a counter and came back hours later for the printout. Behind the counter, operators mounted tapes, watched the console and restarted failed jobs from instructions the programmers had left, often in a binder called a run book.

The operator stood where Encore’s on-call engineer stood after the rewrite, running programs they had not written and could not usefully read. What made that workable was a contract: the program declared what it needed, the run book said what to do when it stopped, and judgment covered the rest. The contract failed through stale instructions, programs written for the happy path, and improvisation at 3 a.m. while the authors slept.

Automating the operator

Much of computing’s history is the operator’s work being absorbed into software. In 1956 General Motors Research and North American Aviation wrote GM-NAA I/O for the IBM 704, one of the first operating systems, chiefly to cut the idle time between jobs. Spooling and time-sharing absorbed more of the role, and by the 1980s the work had passed to the system administrator, who tended fleets of smaller Unix machines through scripts.

Aviation went through a parallel change. Large airliners once carried a flight engineer to manage engines, fuel and electrics, until from the early 1980s new wide-body airliners, beginning with the Boeing 767 and the Airbus A310, were certified for two pilots and the engineer’s panel was folded into automation. The role dissolved into the aircraft’s design and the pilots’ training, as computer operations dissolved into operating systems, scripts and eventually the code. The analogy breaks because an airliner is certified once and software changes daily. Every era left something automation could not absorb: judgment for the failure nobody had written down.

The wall, and two ways over it

As software moved onto the web, developers were rewarded for change and operations staff for stability, and releases were thrown over the wall between them. The IT Infrastructure Library (ITIL), published by the UK government from the late 1980s, disciplined change management but often institutionalized the wall.

Two answers emerged. In 2003 Benjamin Treynor (now Ben Treynor Sloss) joined Google to run a production team of seven engineers, and staffed it with software engineers who treated operations as a software problem: automate the repetitive work, cap the manual share of each engineer’s time at half, and set the balance between change and stability by measuring it. He later put it in a line quoted ever since: “SRE is what happens when you ask a software engineer to design an operations team.” The other answer came from web companies. In 2009 John Allspaw and Paul Hammond described Flickr’s practice of deploying more than 10 times a day, and later that year Patrick Debois organized the first DevOpsDays in Ghent. DevOps tried to take down the wall, and Amazon’s “you build it, you run it”, which the Architecture book discussed, pushed the pager to the team that wrote the code.

Encore has inherited all three answers: teams run their own services, a small Reliability team works in the SRE tradition, and the incident commander rotation borrows trained engineers, most of them senior, from everywhere. The question is still the one the closed shop faced: how to run software whose authors are not in the room. With a coding agent as author they may not be anywhere. Figure 1.4 sets the lineage on one line.

Who runs the software, 1945 to today A timeline of running software: the computer operator of the closed shop from the 1950s, the system administrator from the 1980s, site reliability engineering and DevOps from 2003 and 2009, and today coding agents as authors. Events marked: the 1947 Mark II logbook, GM-NAA I/O in 1956, System/360 in 1964, ITIL in the late 1980s, Google's first SRE team in 2003, Flickr and the first DevOpsDays in 2009, and coding agents today. 1950 1960 1970 1980 1990 2000 2010 2020 2030 Computer operator the closed shop System administrator scripts and config files SRE and DevOps ops as a software problem AGENTS WHO STANDS BETWEEN THE CODE AND ITS USERS 1947 Mark II logbook: the first bug, taped in 1956 GM-NAA I/O cuts setup time between jobs 1964 IBM System/360 spreads the operator's job LATE 1980S ITIL: change boards, and the wall between 2003 Google's first SRE team, seven engineers 2009 Flickr's 10 deploys a day; first DevOpsDays, Ghent TODAY the author may not be a person at all

Figure 1.4 — Who has stood between the code and its users, from the 1947 logbook to today.

Recap. Operators have always run code they did not write, relying on a contract with its authors and on judgment for the unwritten cases, which no era of automation has removed. SRE and DevOps are two answers to the wall between change and stability, usually combined today.

Exercise 1.2. Draw your organization’s closed-shop counter, where code passes from those who wrote it to those who run it. Who is on each side, what crosses it with the code, and what is lost in the crossing?

1.3 Reliability, Availability, and What Users Actually Feel

Definitions worth quoting

The reliability engineers of the 1950s, facing military electronics that failed at alarming rates, gave us a definition that has held up well: reliability is the probability that a system performs its intended function, under stated conditions, for a stated period. Intended function means that a system can be running and still be failing; stated conditions means that reliability on a quiet Tuesday says nothing about reliability during an on-sale; stated period means a window, never an instant.

Availability is narrower: the fraction of time, or of requests, for which the system is able to serve. Its classical steady-state form divides the mean time between failures (MTBF) by the sum of that and the mean time to repair (MTTR). Availability rises by failing less often or by recovering faster, and for modern systems, built from many parts that fail partially and often, designing for fast recovery is usually far cheaper, which is why “expect failures” was the first tenet of James Hamilton’s 2007 paper on internet-scale services. Figure 1.5 draws the arithmetic.

Two ways to raise availability Availability equals mean time between failures divided by the sum of that and mean time to repair. Lines of equal availability (99.9%, 99.95%, 99.99%) fan out from the origin. A service that fails once a month and takes 43 minutes to recover sits at 99.9%; it reaches 99.95% either by failing half as often or by recovering twice as fast. 0 15 30 45 60 0 24 48 72 96 MEAN TIME BETWEEN FAILURES (DAYS) MEAN TIME TO REPAIR (MINUTES) 99.9% 99.95% 99.99% FAIL HALF AS OFTEN RECOVER TWICE AS FAST FAILS MONTHLY, 43 MIN TO RECOVER Fewer failures: the hard way Faster recovery: usually the cheaper way

Figure 1.5 — Availability as mean time between failures over the sum of that and mean time to repair, with lines of equal availability. Halving recovery time raises availability as much as doubling the time between failures. Chapter 4 turns availability into targets.

The lesson concerns design; it does not make average recovery time a number to manage by, because incidents are few and their durations wildly skewed. Štěpán Davidovič showed by simulation at Google that even a genuine 10% improvement in incident durations is usually lost in the noise of MTTR, and the VOID, Courtney Nash’s public collection of thousands of incident reports, shows the same skew. We judge recovery by drills and by what each incident teaches, as Chapters 4 and 13 do.

A third property matters most to Encore. Correctness is the property that the system’s answers are right: a seat sold once, a ticket for every charged fan, each ticket delivered once. The dependability literature folds it into the definitions (Avižienis and colleagues’ 2004 taxonomy calls availability readiness for correct service), but availability as we usually measure it counts responses, recording whether the system answered while users judge what it said. The duplicate ticket would have appeared nowhere in that measure, and the dashboard would still have been green as fans found two copies of one seat in their wallets.

Vital signs and the patient

Medicine offers the right analogy. A hospital monitors pulse, temperature and blood pressure because they are cheap, continuous and correlated with health, yet a patient can have normal vital signs and be seriously unwell, and the patient’s own account is evidence too. Health checks, CPU graphs and pod counts are a system’s vital signs; what the fan feels in the queue and at checkout is the patient’s account, and surprising outages hide in the gap. The analogy breaks in our favor, since software can report its users’ experience directly, as Chapter 5 shows.

What the system reports What the fan feels
All Seat Inventory pods healthy “Seat unavailable” on every seat I click, because one shard is mid-failover
Payment API 99.95% available My card was charged and the page spun until it timed out
Notification delivery success 100% I got my ticket twice and don’t know which one is valid
Sale Gate p99 latency 40 ms I have been in the queue 25 minutes and the position hasn’t moved
Bot Screening blocked 2% of sessions I am a real fan and I was told I am a robot

Figure 1.6 — Vital signs against the patient’s account. Each left-hand statement can be true while the right-hand one is also true.

Two features of user experience shape the rest of the book. Failure is usually partial, so the useful questions are “for whom?” and “how many?” And users feel their own latency, never the median, so in a purchase touching a dozen services a fan will often meet the slow tail of at least one, as the Architecture book’s tail-at-scale argument showed.

Recap. Reliability is the probability of doing the intended job under stated conditions over a stated period; availability is narrower, and correctness is a third property that availability as commonly measured cannot see. Design for fast recovery, but do not steer by average recovery time. Failure is partial and felt individually.

Exercise 1.3. For a user journey you own, write five rows of Figure 1.6. Which of the right-hand column could you detect today, and how?

1.4 The Modern Production Stack

Layers, and why we need them

A touring concert production is organized in layers: riggers hang the structure, a power crew brings in electricity, the sound and lighting desks run their systems, and the stage manager calls the cues, each layer with its own specialists and each depending on the ones beneath it.

Production is organized the same way, because hierarchy is how we master a whole too complex to hold at once: each layer hides detail from the ones above. The layered hierarchy has a precedent in Google’s Site Reliability Engineering (2016), whose Service Reliability Hierarchy, drawn by Mikey Dickerson, stacks monitoring, incident response, postmortems, testing and release, capacity planning, and finally development and product, since a team cannot respond to what it cannot see or learn from incidents it never handled. No standard stack exists; ours is a teaching device in that tradition.

At the bottom sits the runtime and its control plane: clusters, functions and managed services, declared as code and reconciled continuously. Above it, delivery carries change through pipelines, canaries and flags. Telemetry reports what the system is doing, and SLOs judge whether that is good enough for users. The incident process takes over when users are hurting, and learning decides what changes afterwards. Alongside runs the platform, packaging the lower layers into paved paths. Two concerns sit on no single layer: security operations, since attackers use our runtime, pipeline and credentials as readily as we do, and AI workloads, which run on all of them. Figure 1.7 lists its rows in the book’s order, which makes it a reading map.

Layer The question it answers Encore today Chapter
Safety foundations Why do complex systems fail? The first outage, re-read 2, 3
SLOs and error budgets Is it good enough for users? Seat-map and tenant SLOs 4
Telemetry and observability What is it doing, and why? Traces across the purchase path 5
Capacity and cost Will it hold, and at what price? 1,200 fans/s, four shards, cost per ticket 6
Runtime and control plane Where does it run, and what keeps it there? Kubernetes cells, serverless Gate, GitOps 7
Delivery How does change arrive safely? Canaries, flags, the on-sale freeze 8
Resilience What happens when parts fail? Retry budgets, load shedding, cells 9
Data and recovery What is lost, and how fast do we return? A seat ledger that may lose nothing 10
Security operations Who else is acting on the system? Bots, leaked keys, signed artifacts 11
Incident response What do we do while users hurt? Incident commander rotation 12
Learning from incidents What do we change afterwards? Postmortems that change the system 13
AI workloads How do we run nondeterministic components? Support assistant, refund agent, AI gateway 14
Platform and organization Who owns what? Golden paths, the Reliability team 7, 15

Figure 1.7 — The production stack in the book’s reading order, not bottom to top; security and AI workloads cut across the other rows.

What the stack hides, and what it cannot

Layers help only while the interfaces between them behave as documented. A node drain in the runtime shows up as a latency spike in telemetry, an SLO burn, a page, an incident and, if we are diligent, a change to delivery. Here the touring analogy breaks: a tour has one stage manager calling every cue, whereas a cloud system’s cues are called by hundreds of control loops, none aware of all the others. No layer sees the whole, and the incident process exists partly to assemble it, as Figure 1.8 shows.

One bad minute crosses the stack Six layers of Encore's production stack as horizontal bands. A node drain in the runtime appears as a latency spike in telemetry, a burning error budget in the SLO layer, a page and an incident, a review in learning, and finally a change shipped through delivery. Each layer sees only its own part of the event. Node drain reconciler, on time Latency spike seat map p99 climbs Budget burns seat-map SLO Page, incident on-call, then IC Review why it made sense Change ships drain policy fixed Learning Incident process SLOs Telemetry Delivery Runtime SECONDS MINUTES DAYS Where it starts What each layer sees How it shows up next

Figure 1.8 — One node drain, as each layer of the stack sees it. Every layer holds a piece of the event and none holds all of it, which is why an incident needs someone to assemble the whole.

The largest outages of recent years were of this kind: a content update to CrowdStrike’s Falcon sensor in July 2024, a policy change with blank fields in Google Cloud’s Service Control in June 2025 and a doubled bot-management file at Cloudflare in November 2025, all three told in Chapter 8, and a race in the DNS automation of AWS’s DynamoDB in October 2025, told in Chapter 3. None began with a broken machine; each began with a change to configuration or automation and crossed layers faster than anyone could follow. Modern production failure is mostly self-inflicted, and its blast radius is set by how far a change can travel before anyone sees it.

On the morning after the Notification rewrite, no layer required anyone to have read the 40 files, and none could say whether “acceptable” had been defined correctly. That took a specification of behavior, written by someone who understood what a ticket is for.

Recap. The production stack is a teaching hierarchy in the line of Google’s Service Reliability Hierarchy, with security and AI workloads cutting across it. The great outages of 2024 and 2025 each began with a change and crossed the whole stack.

Exercise 1.4. Fill in Figure 1.7’s “Encore today” column for your own system. Mark each row strong, adequate or missing, and pick the weakest row on your most important journey.

1.5 Principles for Operable Systems

A definition, and a stranger

Operators have never been able to understand everything they run. Operability is the degree to which a system can be understood, controlled and repaired in production by people who did not build it, under time pressure and with partial knowledge. Every author will one day be asleep or gone, and with coding agents the author may never have been a person at all.

None of what follows is new. Hamilton’s paper, drawn from running Microsoft’s Windows Live services, reads as a list of obligations a service has to its operators, under three tenets: expect failures, keep things simple, automate everything. AWS wrote much of the same advice into the operational excellence principles of its Well-Architected Framework: frequent, small, reversible changes, anticipating failure, learning from every operational failure. The five principles below are this book’s distillation of that tradition, and they apply equally to code written by people and by agents.

Legible. The system tells us what it is doing, in terms of its users’ experience, without anyone reading its source. Encore’s new Notification service emits a delivery record per ticket with the order and attempt number, so an escaped duplicate would show within minutes.

Steerable. The system offers controls that operators can turn safely and quickly while it runs: admission rates, feature flags, drains, load-shedding thresholds. The best controls degrade the product instead of dropping it, as Hamilton’s “big red switch” sheds non-essential work under extreme load, so that a ticket site under strain might draw a simpler seat map and keep selling. Controls are tested and access-controlled like any change.

Bounded. When the system fails, the damage stays inside a known perimeter: a cell, a shard, a tenant, a slice of traffic. The Architecture book drew these boundaries; they make a bad change survivable only if changes cross them one at a time, since a configuration pushed everywhere at once has no perimeter. A bounded system is also statically stable, in the Amazon Builders’ Library’s phrase: what is running keeps serving when a control plane or dependency fails. Chapter 9 develops both ideas.

Reversible. Every change can be undone faster than it can do serious harm, and the irreversible ones, mostly changes to data, are identified in advance and made in reversible steps. The Notification canary was safe only because the previous version could be restored in minutes.

Rehearsed. Recovery paths never exercised are untested. Hamilton insisted that rollback be tested and recovery scripts exercised in production, and Google’s Disaster Recovery Testing (DiRT) program made such exercises a yearly habit.

Ownership, which holds the principles together

The tradition insists on a sixth principle, which belongs to the organization. Every production system needs an owner, a named team that answers its pages, keeps its runbooks current and decides when its risks are acceptable. The Fan Messaging team woke that morning owning code it had not written, the operator’s oldest position. What made that tolerable was a service with the five properties, plus one person’s 20 minutes of specification.

Figure 1.9 turns the six into questions a readiness review can put to any service before launch, each answered with evidence.

Principle Ask before launch Evidence that settles it
Legible Can on-call tell from telemetry whether users are served correctly? A user-journey service level indicator
Steerable Which controls turn at runtime, who may turn them, and how fast? Each control exercised, access logged
Bounded How many users can one bad change or one failed dependency reach? Per-cell rollout stages; serving survives a control-plane outage
Reversible How is each change undone, and which changes cannot be? A timed rollback; irreversible changes listed
Rehearsed When were failover, restore and rollback last exercised? Dates and durations from the last drill
Owned Who answers the page, with what runbook and what authority? A named team in the service catalog

Figure 1.9 — Operability as a readiness checklist. Chapter 15 returns to the review that asks these questions.

I have come to believe that this answers the question with which the chapter began. We cannot read everything we run, and we never could. We can insist that whatever we run, whoever or whatever wrote it, comes with what a stranger needs to operate it at 3 a.m. We can also insist that someone is accountable when that stranger is us. Operability is the contract between a system and the people who will run it, and like every contract it is worth exactly as much as its enforcement.

Recap. Operability is the degree to which strangers can understand, control and repair a system under pressure. Five principles distill Hamilton’s 2007 advice and AWS’s operational excellence principles, and ownership holds them together. Each holds only under its condition: tested controls, boundaries crossed one at a time, practiced rollbacks.

Exercise 1.5. Answer Figure 1.9’s questions for a service you own, with evidence, and score it from one to five on each principle. For the lowest score, describe when it would hurt at 3 a.m. and the smallest change that would raise it.

Kata: The Night Ferry

Your brief: “Tideway.” A ferry operator’s booking platform: 14 island routes, about 9,000 bookings a day. When storms cancel crossings, rebooking traffic jumps 40× within an hour, and island residents with hospital appointments cannot afford to be stranded. It has 22 developers in four teams and a three-person infrastructure team that receives releases on Thursday evenings and holds the only pager. Half of last quarter’s code came from a contractor’s coding agent; the contract ended in September. Outages are reported by port staff phoning the office. The board’s request: “fewer surprises, without slowing down.”

Deliverables:

  1. Sociotechnical map — the people, automated systems and external parties in a storm rebooking, and who knows what about each.
  2. Operations history — where Tideway sits in Section 1.2’s lineage, where its counter is, and what crosses it.
  3. User-felt reliability — a Figure 1.6 table for storm rebooking, with at least two rows where availability looks healthy and residents are failed.
  4. Stack map — a Figure 1.7 table rated strong, adequate or missing, with three layers chosen for investment.
  5. Operability review — Figure 1.9 answered for the rebooking service, an owner for the contractor’s code, and a 90-day plan.

Rubric:

Criterion The question to ask yourself
Sociotechnical view Does the map show people and judgment, or only boxes and arrows?
Honest lineage Is the Thursday handover recognized for what it is, with what is lost in it?
User truth Would a stranded resident recognize the right-hand column of your table?
Prioritization Are the chosen layers the ones on the storm path, rather than the most fashionable?
Ownership Does the contractor’s code now have a named owner who can operate it without reading all of it?
Restraint Does the plan fit 22 developers and three operators, and honor “without slowing down”?

Where you now stand

You can now describe production as a sociotechnical system, place your organization in the history of running software, separate what a dashboard reports from what a user feels, map the production stack, and judge operability whoever wrote the code. What you lack is an account of how such systems actually fail, and Chapter 2 turns to safety science, from Three Mile Island onward, for that account.

References