learn-data-reliability-with-phoebe / Builder session 8 of 8
Learn Data Reliability with Phoebe · Builder session 8 of 8

The on-call bench

Seven sessions of contract, and now the month you would actually have lived. The bench below replays Harborlight's last thirty nights: 720 hourly partitions, 35 of them bad, five incidents. You pick the target and the alert policy, and it computes what the budget did, when it ran out, how often the pager went, and how many of those pages told the on-call something new. Two levers, and the most common mistake in the field is treating them as one.

🔴 Hardest Data and analytics engineers Whoever carries the pager 45 min
0-3 · Welcome 3-15 · Two levers, not one 15-40 · Build-along: live the month 40-45 · Q&A
Part 0

What the bench measures

A reliability contract has two independent parts: the target, which decides how much failure you have promised to absorb, and the alert policy, which decides when a human is woken. Teams routinely tighten the first hoping to fix the second, and the bench shows why that never works: the page count does not move when the target does.

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

★ What you walk out with tonight. The month replayed under four targets and three policies, all computed. The number that ends the "just alert on everything" argument: 35 pages, five of them useful, against five pages, all useful, for the same five incidents. And the other trap, computed too: promise the current p50 night for every night and the budget is gone on night 4 of 30.

LiveWhy the target and the policy are separate levers3 min▶

The target is a promise about the month: this proportion of partitions will be good. It sets the error budget, which is the number of bad partitions you can afford before the promise is broken. The alert policy is a rule about the hour: under what pattern of bad partitions does the pager go. One is arithmetic over the window; the other is a decision about the next sixty minutes.

Because they are separate, tightening the target does not reduce pages and loosening it does not add them. What tightening the target does is exhaust the budget sooner, which is a conversation with the business about what to stop shipping, not a conversation with the on-call about sleep.

Real world

Harborlight moved the target from 97 to 99 percent after a bad quarter, on the theory that a stricter promise would make the pipeline more reliable. Pages that month: identical. Budget exhausted: night 9 instead of night 15. The pipeline had not changed and the on-call had not slept any better; the team had simply promised something the history said it could not deliver.

Self-studyWhat is real here3 min▶
  • The history. 720 hourly partitions, fixed and identical for every learner. 35 are bad, in five incidents: night 4 late load (3), night 9 upstream outage (14), night 15 corrupt batch (6, on time and wrong), night 21 flapping connector (8 scattered), night 27 partial load (4). Achieved compliance 95.14 percent.
  • The budget. One hundred percent minus the target, times 720. At 97 percent that is 21.6 bad partitions; at 99.9 it is 0.72, less than one.
  • The pages. "Every bad partition" pages on each bad hour. "Multi-window burn rate" pages when the two-hour window burns at 14.4 times the sustainable rate or the twelve-hour window at 3 times, on the rising edge only, never twice inside twelve hours. Those windows and rates are this bench's choices, stated as such.
  • Actionable is defined mechanically: the first page inside a real incident. Nothing about the human is modelled.
Part 1 · covers the matrix of targets and policies

The matrix, with the numbers it actually produces

10 min live

Read the two tables separately, because they are about two different things. The first is what the target does to the budget. The second is what the policy does to the pager. Nothing in either table depends on the other.

TargetBudget (bad partitions allowed)Budget left at night 30Exhausted on night
95 percent363 percentnever
97 percent21.6015
99 percent7.209
99.9 percent, the current p50 night promised every night0.7204
Alert policyPages in 30 nightsPages per weekActionableIncidents paged
No alerting00-0 of 5
Page on every bad partition358.25, which is 14 percent5 of 5
Multi-window burn rate51.25, which is 100 percent5 of 5

Both policies catch all five incidents. The difference is thirty pages that told the on-call something they already knew: the outage on night 9 alone is fourteen of them. Coverage is the same. Sleep is not.

Budget remaining by night, four targets night 1 night 30 100% 0 95%: 3% left 97% out night 15 99% night 9 99.9% night 4 Pages in 30 nights, two policies 35 pages 5 useful every bad partition 5 pages 5 useful burn rate The left chart does not change when you change the policy. The right one does not change when you change the target.
🔍 Click to zoom - two levers, two charts, and neither moves the other.
Build-along

Live the month

★ 25 min · everyone builds

The bench is live below. Bars are bad partitions per night, the amber badge is a page, and nights after the budget ran out turn red underneath. Work the steps in order.

Start at 97 percent with no alerting. Budget of 21.6 bad partitions, exhausted on night 15. All five incidents happened and nobody was told; every one was found by whoever opened the dashboard first. That is the baseline every policy is measured against.

Switch the policy to "page on every bad partition". 35 pages, 8.2 a week. Hover night 9: fourteen pages for one outage, the first one useful and the other thirteen telling the on-call the source was still down. Five of 35 pages were the first word of an incident.

Switch to multi-window burn rate. Five pages: nights 4, 9, 15, 21 and 27, each at the first bad hour of its incident. 1.2 a week, all five actionable. Notice night 21, the flapping connector: eight scattered bad hours, one page, because the twelve-hour window sees the pattern the two-hour window cannot.

Now change only the target: 95, then 99, then 99.9. Watch the pages. They do not move. Watch the budget: 3 percent left, then exhausted night 9, then exhausted night 4. This is the whole lesson in three clicks.

Sit on 99.9 percent for a moment. That is Harborlight's typical good night, promised for every night. The budget is less than one bad partition for the month, and the first incident spends it before dawn on night 4. Everything after that is a broken promise, regardless of how well anyone responds.

Go back to 95 percent. Three percent of budget left at night 30, which is one bad partition of headroom. That is what the history actually supports, and session 2 is where you decide whether to promise it as it stands or fund the work that earns 97.

Write down the pair you would sign for Monday. A target the history supports, and a policy that pages once per incident. If you find yourself wanting a stricter target because the pager is too noisy, you have the levers confused.

What the bench leaves out, on purpose. Every bad partition counts the same. A corrupt settlement total is worse than a late one, and a real budget would weight them. Add that first when you build your own; it changes which incidents burn the most and does not change which policy pages sensibly.

Homework

Closing the track

45 min
  1. Replay your own last thirty nights from the partition log: budget by night under your current target, and pages under your current policy. Count how many pages were the first word of an incident.
  2. Compute the target your history actually supports at the 3-percent-headroom level and compare with the one in your contract.
  3. If you page on thresholds, write the burn-rate version and run both over the same month. Keep whichever pages once per incident.
  4. Put the two numbers, budget remaining and pages per week, in the monthly report from leader session 6, and keep them there.
Check yourself

Three questions

Harborlight tightens the target from 97 to 99 percent. What happens to the number of pages?

The two levers are independent. Tightening the target changes when the promise breaks; it does not change when the pager goes.

Both alert policies catch all five incidents. Why prefer burn-rate alerting?

Coverage is identical. The difference is entirely in repeats: night 9's outage alone produces fourteen threshold pages, thirteen of them saying the source is still down.

Why is 99.9 percent the trap for a pipeline that achieved 95.14?

The service-reliability guidance is explicit: do not pick a target from current performance. A p50 night promised for every night is a budget of 0.72 partitions and a broken promise by dawn on night 4.

Sources covered

What tonight maps to

✓ SRE book - error budgets and "don't pick based on current performance" The 99.9 percent trap is that rule computed against a real month.
✓ SRE workbook - error budget as 100 percent minus the SLO Applied at four targets over 720 events, with the exhaustion night for each.
✓ Multi-window burn-rate alerting against threshold alerting Both computed over the same month. The bench's windows and rates are its own stated choices.
◐ Weighting bad partitions by impact Named as the first extension. Every partition counts the same here.
· How a bad partition is detected Not covered by design. The data observability course owns detection; here a bad partition only has to be counted.

Session 8 cheat sheet

Two leversTarget sets the budget; policy sets the pages. Neither moves the other.
35 or 5Same five incidents caught. Thirty pages of "still down".
Actionable rateFirst page inside an incident. 14 percent against 100.
95 percentWhat the history supports: 3 percent budget left, one partition of headroom.
99.9 is the trapThe p50 night promised every night. Budget 0.72, gone on night 4.
Flapping needs the slow windowEight scattered bad hours, one page, because twelve hours sees the pattern.
Noisy pager, wrong leverIf you want a stricter target because of noise, change the policy instead.
Weight by impact nextA corrupt total is worse than a late one. Your budget should know.