learn-data-reliability-with-phoebe / Leader session 3 of 6
Learn Data Reliability with Phoebe · Leader session 3 of 6

On-call is a design, not a rota

Most data teams design their on-call by opening a calendar and typing names into it. The names are the last decision, and the three that come before them are usually never made: what is allowed to page, how often it will, and what the person holding the pager is expected to do when it does. Harborlight's month makes the cost concrete. Paging on every bad partition produced 35 pages in 30 nights, 8.2 a week, of which 5 were the first word of an incident. Paging on burn rate produced 5, all of them useful, for the same five incidents. Nobody on the rota changed. The design did.

🟡 Core Data and analytics leaders Whoever owns the rota 45 min
0-3 · Welcome 3-22 · Pages, load and the humane version 22-40 · Build-along: redesign one week 40-45 · Q&A
Part 0

Where session 3 sits in the leader track

Six sessions, one running example: the orders pipeline at Harborlight, 24 hourly partitions a night, 720 a month, feeding the settlement report that pays sellers. Session 1 replaced the word "reliable" with 95.14 percent. Session 2 turned the gap to a target into an error budget and showed that a 97 percent promise, 21.6 bad partitions a month, was gone by night 15. Tonight is about the person who gets woken when the budget is being spent. Session 4 is the postmortem afterwards, session 5 is the backfill and the debt it leaves, and session 6 reports all of it upward. The builder track writes the alerts and the runbooks; the leader track decides what a human being should be asked to carry.

Live = presented in the 45 minutes Self-study = the full depth, after class 🔍 Every diagram zooms

★ What you walk out with tonight. The three design decisions that come before a name on a calendar, in the order they have to be made. The argument, in Harborlight's numbers, for why a noisy pager is a design fault rather than a staffing shortage. And a redesigned week for one real rota: primary, escalation, business-hours scope and a page budget you would defend in front of the team that carries it.

LiveWhy the rota is the wrong place to start3 min▶

A rota answers one question: whose week is it. It cannot answer what that person will be woken for, how many times, or what they are supposed to do about it. Those answers live in three other places: the alert policy, the load it produces, and the runbook the on-call opens at three in the morning. When the rota is filled in first, the other three are decided by default, which means decided by whoever configured the monitoring, months ago, without anybody's week in mind.

Harborlight's rota was tidy. Six engineers, one week each, handover on Monday. What sat underneath it was an alert on every bad partition, no escalation beyond "call the platform lead", and a runbook that consisted of the previous on-call's chat history. The tidy rota was distributing an untidy design across six people in turn, and each of them believed the problem was theirs.

Real world

The clue that a rota is carrying a design fault is that every handover sounds the same. At Harborlight the Monday message for four consecutive weeks was a variation on "rough week, mostly noise, nothing I could do about the outage". Four different people, one description. A staffing problem sounds different on different people. A design problem sounds identical.

Self-studyThe vocabulary tonight leans on3 min▶
  • Page - an alert that is allowed to interrupt a person, at any hour. Everything else is a ticket, a dashboard or a morning message.
  • Alert policy - the rule that decides when a page is sent. Paging on every bad partition is one policy. Paging when the error budget is burning faster than a threshold, measured over a fast window and a slow window, is another. Builder session 3 writes both; the leader chooses between them.
  • Load - pages per person per week, counted from history rather than guessed.
  • Actionable - a page that was the first word of a real incident, so something the on-call did or said changed the outcome. Defined mechanically on the bench as the first page inside an incident.
  • Escalation path - who the on-call is allowed to wake, in what order, written down before the night it is needed.
  • Page budget - the number of pages per person per week the team has agreed is acceptable, reviewed the way an error budget is reviewed: exceeded means something changes.
  • Business-hours scope - the set of alerts that may only fire during the working day because nothing that matters at night depends on them.
Part 1 · covers load, and the three inputs that come before names

The rota is the last decision, not the first

10 min live

Three decisions precede any name on a calendar. What pages is the alert policy. How often is the load, and it can be counted from last month rather than argued about. What the person is expected to do is the runbook. Harborlight's thirty nights, replayed under two alert policies with the same five incidents in them, show how much of the pain was in the first decision alone.

Page on every bad partition: 35 pages in 30 nights, 8.2 a week, 5 useful (14 percent) 3 14 6 8 4 night 1 4 9 15 21 27 30 Multi-window burn rate: 5 pages in 30 nights, 1.2 a week, all 5 useful (100 percent) night 1 4 9 15 21 27 30 first page inside an incident: actionable a further page about an incident already being worked Same five incidents, both policies. Thirty of the 35 pages were about a failure somebody was already awake for.
🔍 Click to zoom - two pagers, one month, the same five incidents.
LiveWhat pages: the alert policy is the first decision, and usually nobody made it3 min▶

Every page that reaches a person was allowed through by a rule. At most data teams the rule is inherited: the monitoring tool's default, or a threshold somebody set during an incident two years ago and never revisited. "Page on every bad partition" is what that inheritance usually amounts to, and it feels responsible, because it never misses anything. It also never stops.

The alternative the service-reliability practice settled on is to page on the rate the error budget is being spent, over a fast window and a slow window, on the rising edge, with suppression so the same incident does not page twice. The builder track writes the arithmetic. What a leader needs to hold is the shape of the outcome: the second policy pages once per incident, at its first bad hour, and then trusts the person it woke to handle the rest.

The alert policy and the target are separate levers. Moving the SLO from 95 to 99 percent changes how fast the budget runs out. It does not change how many times the pager goes off. Harborlight's page counts were identical under every target on the bench. Whoever asks for a tighter target to "fix on-call" is pulling the wrong lever.

LiveHow often: count the load, do not estimate it3 min▶

Load is pages per person per week, and it is a number in last month's history rather than an opinion. Harborlight's thirty nights, five incidents, two policies:

Alert policyPages in 30 nightsPages a weekFirst word of an incidentIncidents caught of 5
No alerting00-0
Page on every bad partition358.25 (14 percent)5
Multi-window burn rate51.25 (100 percent)5

The last column is the one to read first. Both policies caught every incident. The first policy did not buy any coverage with its extra thirty pages; it bought thirty interruptions about failures the on-call was already awake for. Night 9 alone paged fourteen times for one outage. The fourteenth page carried no information the first had not.

LiveWhat the person is expected to do: the runbook is part of the rota2 min▶

A page without a runbook is a request for improvisation at three in the morning. The runbook is the third input to the rota because it decides how long each page costs and how much the outcome depends on who happened to be holding the pager. Builder session 4 writes them so a tired person can follow the first three steps without thinking; the leader's question is simpler and comes first: for each thing that is allowed to page, does a written answer to "now what" exist at all.

At Harborlight the honest audit was two runbooks for five classes of page, and one of the two was a link to a dashboard. The late load on night 4 had a procedure. The corrupt batch on night 15 did not, and the on-call spent two hours discovering by hand what the settlement team's spreadsheet would have told them in five minutes.

LiveWhy 8.2 a week at 14 percent useful is a design problem, not a staffing one2 min▶

The instinct when a rota is painful is to add people to it. More names, shorter weeks, a second person on nights. Under the first policy that spreads 35 pages across more people; it does not change the 35, and it does not change that 30 of them were noise. Six people each carrying a bad week is not better than three; it is the same fault with a wider blast radius, and the extra people now also believe on-call is miserable.

Fixing the design changes the number itself. The same five incidents, the same five catches, 5 pages instead of 35. That is not achievable by staffing at any headcount, and it is achievable by policy in an afternoon. The order of operations for a leader is therefore fixed: policy, then load, then runbook, and only then the calendar.

Self-studyCounting "useful" honestly3 min▶

"Actionable" is a word that gets argued about, and the argument is usually a way of avoiding the number. The mechanical definition that settles it: a page is actionable if it was the first page inside a real incident. The person it woke learned something they did not know and could act on. Every subsequent page about the same incident is, by definition, telling somebody who is already working on it that it is still happening.

  • It is deliberately strict. A page that arrives while the on-call is mid-fix is not useless in every sense, but it is not the reason anything got fixed, and counting it as useful hides the noise.
  • It survives disagreement about severity. Every bad partition counts the same. Whether night 21's eight scattered failures mattered to the settlement report is a target conversation, not a paging one.
  • It gives a percentage the team can be shown. 14 percent is a number a leader can put in front of the people carrying the pager and say: this is what we have been asking of you.
Part 2 · covers escalation and the humane version

The humane version, and why it is also the effective one

9 min live

A rota people can survive is not a softer version of a rota that works. It is the same thing. The four layers are decided from the bottom up: what pages, what the person does about it, who they can wake when stuck, and only then whose week it is. Each layer inherits everything beneath it, which is why a name typed in first inherits every unmade decision.

4 · The rota: whose week it is the last decision, not the first a name inherits every layer beneath it 3 · Escalation path: who to wake when stuck written down before the night it is needed a stuck on-call is not a heroic on-call 2 · Runbook: what to do when it fires the first three steps a tired person can follow Harborlight had 2 runbooks for 5 kinds of page 1 · Alert policy: what pages, and how often 35 pages or 5 pages for the same month 8.2 a week at 14 percent, or 1.2 at 100 percent Name the rota first and the three layers under it get decided at 3am by whoever is holding the pager.
🔍 Click to zoom - the on-call design stack, numbered in the order the decisions have to be made.
LiveThe shape of a survivable rota3 min▶

Four properties, each of which is a decision a leader can make this week without writing a line of configuration.

  • One primary, one escalation. One person holds the pager. One named person is the one they wake when stuck. Not a group, not "the team channel", one name per week, and both names are on the calendar.
  • Business hours only for anything the settlement report does not depend on. If a failure will not change what the reader sees at nine, it does not need a human at three. It needs a ticket that is read at nine. The test is the reader's sentence, not the engineer's anxiety.
  • A page budget per person per week. A number, agreed with the people carrying it, above which the team stops and asks what is wrong with the design. At Harborlight, two pages a week was the number the team said it could carry indefinitely; the first policy was delivering four times that.
  • Reviewed like the error budget. Every week the pages are counted against the budget, in the same meeting where the error budget is read. Exceeded means a design action, not an apology to the person who had the week.
LiveEscalation is a written path, so a stuck on-call is not a heroic on-call2 min▶

The word "escalation" gets treated as a failure of the on-call. It is the opposite: a working escalation path is what stops a hard night from becoming a story about one person's stamina. The path is written down before it is needed. Who to wake first, on what condition, and what to hand them. Below what threshold of time or budget the on-call is expected to escalate rather than permitted to. What the escalation contact is expected to do that the primary could not: authority to call the source team, authority to declare the report late, access the primary does not have.

Harborlight's path before the redesign was a single line: "call the platform lead". After it, the primary was expected to escalate at forty minutes without a fix, or at any page involving an upstream source, and the escalation contact's job was explicitly to own communication with the settlement lead so the primary could keep working. Nobody worked less hard. Fewer people worked alone.

LiveNight 9: the honest case where the job was communication2 min▶

On night 9 the upstream source stopped publishing at two in the morning and did not resume until after six. Fourteen partitions failed. Nothing the on-call could do would fix it; the data did not exist yet on Harborlight's side of the boundary. The right response was to confirm the outage, tell the settlement lead before eight which hours would be missing and when the backfill would land, and go back to sleep. That is a fifteen-minute job.

Under the first policy the on-call was paged fourteen times for it, once an hour, each page for a partition they already knew would fail. The policy punished the person for the source's failure. Under the burn-rate policy the same night produced one page at the first bad hour. The on-call did the communication, silenced nothing, and was not woken again by an outage they had already reported.

Real world

The most common shape of a bad on-call night in a data team is not a hard problem. It is an easy problem, correctly diagnosed in the first ten minutes, followed by hours of being told about it again. Teams that count their pages usually find the worst night of the month was one incident, repeatedly announced.

LiveThe quiet cost of a noisy pager2 min▶

This is an observation about teams rather than a number from the bench, and it holds across every team that has run a noisy pager for long enough. People stop reading it. Not out of negligence: as a rational adaptation to a signal that is wrong six times in seven. The on-call learns to glance at the alert title, recognise the shape, and go back to sleep. Then one night the shape is the same and the incident is not, and the one page in seven that mattered is treated like the six that did not.

A noisy pager is therefore not merely tiring. It trains the team to ignore the instrument the whole design depends on. The people carrying it are usually the last to say so, because admitting they have stopped reading the pager sounds like a confession. It is a finding about the policy, and it is the leader's job to say it first.

Self-studyThe page budget, reviewed like the error budget3 min▶

Session 2 made the error budget a currency: a number of bad partitions the team may spend, and a rule about what happens when it is gone. The page budget is the same instrument pointed at people instead of partitions. A page budget is a number per person per week that has been agreed in the open, is counted from the paging tool rather than remembered, and has a consequence when exceeded.

  • Set it with the people carrying it. A budget imposed from above is a target. A budget the on-calls proposed is a promise the leader has made to them.
  • Count actionable pages separately. Two useful pages a week is a busy pipeline. Eight pages with one useful is a broken policy. The budget is on the total; the percentage tells you which fix to reach for.
  • Exceeded means a design action. Silence an alert, move a class of failure to business hours, change the policy, fix the thing that flaps. Never "we will be more careful next week", which is a wish rather than an action, and session 4 has more to say about that.
  • Read it in the same meeting as the error budget. The two numbers move together. A month that spent the error budget on night 15 and the page budget in week one is one month, not two problems.
Build-along

Redesign one week

★ 18 min · everyone builds

No code, one rota, one page. Bring last month's pages from whatever tool sends them; an export, a screenshot, a count on a napkin. If you have nothing to hand, use Harborlight's thirty nights: 35 pages under the current policy, five incidents on nights 4, 9, 15, 21 and 27. The output is one week of the rota redesigned from the bottom of the stack up.

Count last month's pages, and how many were the first word of an incident. Total pages, then walk the list and mark each one that told the on-call something new. Harborlight: 35 pages, 5 first words, 14 percent. Write both numbers and the percentage; the percentage is the one the team has never seen.

Compute pages per person per week. Divide by the number of weeks in the window, then note that whoever held the pager that week carried all of it. Harborlight: 8.2 a week under the current policy, against 1.2 under the alternative the builder track has already benched. Put the two numbers side by side.

List what the on-call was expected to do for each class of page, and whether a runbook existed. One row per class of failure: late load, upstream outage, corrupt batch, flapping connector, partial load. Two columns: expected action, runbook yes or no. Harborlight's honest answer was two of five, and one of those was a dashboard link.

Write the page budget you would defend. Pages per person per week, agreed with at least one person who has carried the pager recently, with the consequence for exceeding it in the same sentence. Read it aloud to that person before writing it down.

Redesign one week with primary, escalation and business-hours scope. One name as primary, one as escalation, the condition on which the primary is expected to escalate, and the list of alerts that move to business hours because the settlement report does not depend on them. That page is the rota. The calendar is just where it is published.

✕ What most on-call policies say On-call engineers respond to all alerts within 15 minutes and escalate to the platform lead if unable to resolve.
★ What Harborlight's redesigned week said Primary: Ana. Escalation: Devi, expected at 40 minutes without a fix or on any page naming an upstream source; Devi owns the message to settlement before 08:00. Pages: burn-rate policy only, one page per incident. Budget: 2 pages per person per week; a third page in any week is reviewed on Monday as a design fault. Business hours only: row-count drift on non-settlement tables, dashboard refresh failures, anything the 09:00 report does not read.

Do not add a person tonight. If the redesigned week still looks unsurvivable with one primary and one escalation, the fault is in the layers below the rota and another name will not fix it. Take the page count back to whoever owns the alert policy first.

Homework

Before session 4

30 min
  1. Get last month's page count for one real rota from the tool that sends the pages, not from memory. Mark the first-word pages and compute the percentage. Show it to the people who carried the pager and write down their reaction.
  2. Finish the five-row table of page classes: expected action, runbook exists or not. For every "no", write the name of the person who would have to write it.
  3. Propose the page budget to the team in writing, with the consequence for exceeding it. Note what they change.
  4. For the single worst night in the window, write down how many pages it produced and how many minutes of actual work it needed. Bring the pair to session 4; that night is the postmortem you will rewrite.
Check yourself

Three questions

Harborlight's rota is painful: 8.2 pages a week, 14 percent of them the first word of an incident. A manager proposes adding two more engineers to the rotation. What does that do?

The alert policy decides the pages. Under the burn-rate policy the same month produced 5 pages, all useful, with no change to the rota. Staffing cannot reach that number; design can.

On night 9 the upstream source was down for four hours and fourteen partitions failed. Nothing on Harborlight's side could fix it. What was the on-call's job that night, and what did the every-partition policy do about it?

The job was communication, about fifteen minutes of it. A policy that pages once per incident let the on-call do that and sleep. Fourteen pages punished the person for the source's failure.

The steering committee wants on-call to be less painful and proposes tightening the SLO from 95 to 99 percent so "problems get caught earlier". What happens to the page count?

On the bench the page counts did not move when the target did. Tightening the target only moved the night the budget ran out, from never at 95 percent to night 9 at 99.

Sources covered

What tonight maps to

✓ Load, escalation and the humane version of on-call The three inputs before the rota, the four-layer stack, one primary plus one escalation, business-hours scope and the page budget.
✓ Harborlight's on-call bench: 35 pages against 5 for the same five incidents 8.2 a week at 14 percent actionable, or 1.2 a week at 100 percent. Actionable defined as the first page inside an incident. Both policies caught all five.
✓ Multi-window burn-rate alerting as the established alternative to threshold paging A fast and a slow window, rising edge, suppression. The bench's specific windows and rates are its own choices and are stated as such in builder session 3.
◐ Burn-rate arithmetic and the alert configuration Builder session 3 writes it. Here a leader chooses between two outcomes and holds the shape of each.
◐ Runbook structure Builder session 4 owns what a tired person can follow. Here the runbook is an input to the rota and the question is whether one exists.
◐ How a bad partition gets noticed The data observability course owns detection. Here a bad partition only has to be counted and paged on once.
· On-call for AI services, traces and spans Not covered by design. The AI observability course owns those; the objects here are tables, partitions and the people on call for them.

Session 3 cheat sheet

Rota lastAlert policy, then load, then runbook, then escalation, then names on a calendar.
35 or 5Same month, same five incidents. Every-partition paging: 35 pages. Burn rate: 5.
8.2 at 14 percentPages a week and the share that were the first word of an incident. 1.2 at 100 percent is the alternative.
ActionableThe first page inside a real incident. Every later page tells someone what they already know.
Separate leversThe target decides the budget. The alert policy decides the pages. Tightening the SLO does not quiet the pager.
Staffing spreads, design fixesMore names carry the same 35 pages. Only the policy can make it 5.
One primary, one escalationWritten path, expected at a threshold. A stuck on-call is not a heroic one.
Page budgetPer person per week, agreed with the carriers, reviewed like the error budget. Exceeded means a design action.