Artifact critiqueAdvancedShipping & Model Lifecycle / Incident management for AI products / #6

Describe the on-call runbook entry for a sudden quality drop.

The direct answer
The runbook entry opens with exactly one question: did a model, prompt, or index change land in the last 24 hours? If yes, roll back to the last pinned version, immediately, no diagnosis needed. If no, do not roll back into nothing. Flip the confidence threshold circuit breaker to suppress shaky comments and hand the drift investigation to the ML team in daylight. Everything else in the entry exists to make that one question answerable in under two minutes.
Do this, in order
  1. Check the unified change log first, before opening any dashboard.Why: the whole entry hangs on this one branch; skip it and on call is back to scanning a dozen screens with no order.
  2. If a change is logged inside the alert window, roll back to the last pinned version right away.Why: a rollback is fast and reversible, and every extra minute a bad change stays live costs more acceptance rate and more trust.
  3. If nothing is logged, do not roll back into nothing. Flip the confidence threshold circuit breaker instead.Why: reverting with no known bad change to undo is a guess, not a fix, and it can make a fine model look like the culprit.
  4. Make the change log span every surface that can move: model weights, prompt templates, the retrieval index, and threshold config, all in one place.Why: a log that only tracks half the surfaces gives false confidence exactly when the real cause is hiding in the half it does not track.
  5. Hand the drift investigation to the ML team's daytime queue, not to on call.Why: replaying the eval set and finding why a change hurt quality takes hours of careful work, not a decision made at 3am.
  6. Leave the auto-rollback bot and the per-language dashboards for a later version.Why: an unattended bot that reverts on one bad alert can turn a genuinely better model into its own incident; day one only needs the single branch to hold.

How to answer this, stage by stage

Nobody is grading whether you can say "we'd have a runbook." They are grading whether you can design the one line in it that actually decides what happens at 3am. Seven moves get you there.

STEP 01
Scope it to one real incident
Say it like this
"Let's ground this in something real. Lintbrook makes Patchwright, a tool that comments on every pull request the moment it's opened: a missing test, a bug, a function that already exists somewhere else. Kaveh Nazari is the senior engineer on call the night it broke."
Why this works
Grounds the design question in a real product and a real person before any policy talk starts.
STEP 02
Name the habit the old way built
Say it like this
"Before this entry existed, the page just said 'quality dropped, go look.' So whoever got paged opened Grafana, then the GPU dashboard, then the model host's status page, then Slack, hunting for anything red. That's not a plan. That's a scan, and it has no natural stopping point."
Why this works
Shows the situation without you: this is the S step, and it makes the design problem concrete before offering a fix.
STEP 03
Say the habit you're designing for
Say it like this
"The habit I want on call to build isn't 'check more dashboards, faster.' It's 'check the one thing that tells you which of two branches you're on, then stop looking at everything else.'"
Why this works
This is the P step, the payoff. Naming the habit before the mechanism keeps the design answer from turning into a feature list.
STEP 04
Give the anchor, word for word
Say it like this
"So the entry's first line reads: open the unified change log for the last 24 hours. Did a model, a prompt, or the retrieval index change inside the alert window? That's it. That one question decides everything that happens next, rollback or circuit breaker."
Why this works
This is the A step, and it's the answer to the question. A reader should be able to point at this exact line and say that's the decision.
STEP 05
Show what breaks the first time the anchor is wrong
Say it like this
"Here's where it actually broke on us. A prompt template edit shipped forty minutes before the alert, from a different team, logged in their own feature flag system, not the model deploy log Kaveh was told to check. He checked it, it said clear, so he ruled out a change and spent twenty more minutes hunting elsewhere while three teams quietly turned Patchwright off."
Why this works
This is the R step. Naming the exact failure proves the anchor was tested against its own risk, not just described.
STEP 06
Say what you fixed and what you left out on purpose
Say it like this
"The fix wasn't a sharper on-call engineer. It was one merged change log covering model, prompt, and index in the same place. What I didn't build on day one: an auto-rollback bot. If the log is wrong even once, a bot reverting a genuinely better model becomes its own incident."
Why this works
This is the K step. Naming what stays out shows judgment, not just caution.
STEP 07
Close on the one line
Say it like this
"So the whole entry in one breath: check the unified log first, roll back if something changed, flip the circuit breaker and escalate if nothing did, and never let the log itself have a blind spot, because the one time it does is the one time this whole design has to earn its keep."
Why this works
Closes on a line someone could actually paste into a wiki page, not a promise to "have good on-call process."
If you remember one thing A rollback only helps when something actually changed. A runbook entry that skips straight to "revert" without checking that first is guessing, and a guess at 3am is how a fine model gets blamed for someone else's bug.

Let's learn

Say we build a tool that reads every pull request the moment it opens and leaves comments on it: a missing test, a null check about to bite someone, a function that already exists somewhere else in the repo. Patchwright is Lintbrook's version of that tool. Before it existed, a human reviewer read the diff line by line to catch that class of issue, about 22 minutes for an average pull request, and still missed close to six in ten of them by eye.

With Patchwright live, comments show up the moment the pull request opens. Authors got in the habit of fixing the flagged issue before asking a human to look at all, and review rounds dropped from an average of 2.3 back-and-forths to 1.1. On a normal week, about 58 percent of Patchwright's comments get resolved by the author actually applying the fix, its trailing baseline acceptance rate.

Knowledge spark: what's a confidence threshold circuit breaker? A setting that raises the bar for how sure the model has to be before it posts a comment at all. Flip it up and shakier, lower confidence comments stop showing up, on purpose, while someone figures out what's actually wrong.

Then came a Tuesday. A different team shipped a prompt template edit at 1:20am, meant to nag harder about missing unit tests. It had a small bug: it broke how Patchwright cited line numbers in some comments, so a chunk of them pointed at the wrong line or rendered as broken text. By 2:00am, fleet-wide acceptance rate had fallen from 58 percent to 21 percent.

Say plainly: the 37 point drop is not the real problem. The real problem is what a developer does the third time a Patchwright comment points at the wrong line. They stop reading the fourth one. Then they stop reading Patchwright at all, and tell their team lead to turn it off for the repo.

We did not lose 37 points of acceptance rate that night. We lost the half second a developer's eyes still gave the comment before clicking past it.
The decision that mattered Give the runbook entry one branching question, not a checklist. Did something change in the last 24 hours, checked against a log that covers every surface, model, prompt, and index alike. Yes means roll back. No means flip the circuit breaker and wait for daylight, not a guess in either direction.

At its worst, Patchwright keeps posting comments all night, the coverage dashboard still shows 100 percent of pull requests reviewed, and nobody is reading a single one of them. The product looks fine on volume and is functionally off, which is a worse place to be than if it had crashed outright, because a crash pages someone.

The choice I would take back. Lintbrook logged model version deploys in one system and prompt template edits in a separate feature flag system, because the two changes ship from different teams on different schedules. That split felt tidy at the time. It's exactly why the first change log check that night came back clear when the real cause was sitting in the other system the whole time.

What I would leave alone. Patchwright also sends team leads a weekly digest of comment stats. If that digest is a day late or a little off, nobody's behavior changes, because nobody reads it in real time. It doesn't need a 3am entry of its own.

The lesson. A runbook that lists everything to check teaches on call nothing about what to check first. The whole job of a good entry is to replace a scan with one branch, and the branch is only as good as the log it's built on.

Hand sketch numbered list titled 3am, no runbook, what Kaveh checks first: API latency dashboard, GPU queue depth, model provider status page, Slack scrolling for complaints, error logs from the last six hours.
Five screens, no order between them. By the time anything useful turns up, three teams have already muted Patchwright.
Patchwright's acceptance rate, the night it dropped
Trailing 7 day baseline58%
During the incident, 2:00am21%
The alert doesn't page anyone over one bad hour. It fires when the rate sits more than 15 points below the trailing median for two hourly checks in a row, a bar tuned against a year of Patchwright's normal noise, not a hard floor picked out of the air. This drop cleared it in under two hours.

Now here is the same thing as a story

The short version is above. Read on if you want to feel how close a merged log came to arriving one incident too late.

Kaveh Nazari has been a senior platform engineer at Lintbrook for five years, three of them owning the pager for Patchwright. Ask him what makes a good pull request comment and he'll tell you it's not the finding, it's whether the line number is right, because a developer forgives a wrong opinion faster than a comment that points at code that isn't there.

For most of that Tuesday, nothing about the night suggested trouble. Kaveh checked the on-call dashboard at handoff, saw acceptance sitting at its usual 57, 58 percent, and went to bed. Patchwright had been steady for months. He'd stopped opening the fleet health page every hour the way he used to in his first year on call. It kept being fine, so he checked it less.

At 1:20am, a totally different team, the one that owns Patchwright's prompt templates, shipped a small edit meant to make the missing-test nag a little firmer. Nobody paged Kaveh. Why would they. It wasn't his system, and it looked like a wording change.

At 1:52am, PagerDuty went off. Acceptance rate had fallen from 58 to 41 percent in half an hour. Kaveh opened his laptop, saw the number, and did what the old runbook told him to do: check everything. Grafana for latency, clean. The GPU queue, clean. The model host's status page, green across the board. He typed "patchwright" into the internal deploy log, the one his team owned, filtered to the last 24 hours. Nothing there either.

By 2:00am the number was 21 percent and still falling.

The log he trusted was telling the truth. It just wasn't the whole truth.

What Kaveh didn't know yet, because it lived in a different team's feature flag dashboard he had no reason to open at 2am, was that the prompt edit from 1:20am had a formatting bug. Comments that used to read "line 214, missing test for this branch" now sometimes read "line [object Object], missing test," or cited a line three files away from the actual change. Developers didn't need a runbook to know that was broken. They just stopped trusting it, one pull request at a time, and by 2:10am two teams had disabled Patchwright review on their repos entirely, a setting that takes one click to turn off and, Kaveh would learn later, a full sprint planning meeting to turn back on.

He found the real cause at 2:24am, twenty two minutes after the page, by finally scrolling through the engineering Slack channel and seeing someone mention the prompt update almost as an aside. He rolled back the template in four minutes. Acceptance rate started climbing by 2:35am.

The post-incident review asked one question that mattered: what would have gotten Kaveh to the fix faster. Not more monitoring, Lintbrook already had plenty. Not a smarter engineer, Kaveh knew the system better than almost anyone. The gap was that the one log he checked first, the one the old runbook told him to trust, didn't cover the surface that actually broke.

The redesigned entry does two things the old one didn't. It merges the model deploy log and the prompt flag system into one queryable history, so "did anything change" means everything, not just the half Kaveh's own team owns. And it puts that single question first, before latency, before GPU, before Slack, so the very first thing on call does is the thing most likely to actually answer the page.

Run that Tuesday again with the new entry, and the change log shows the prompt edit at 1:20am inside the 24 hour window on the first check, not the twenty second one. Kaveh rolls back by 1:58am, six minutes after the page, before a second team has even noticed anything wrong enough to disable review over.

What Kaveh would tell his past self, the one who trusted a log because it was the one he owned: a change log that only watches your own team's surface will tell you, correctly and unhelpfully, that nothing changed.

SPARK: the shape this runbook is built on

This is a design question, describe the artifact you'd build before the failure happens, not a diagnosis of a habit that already flipped, so SPARK fits and TRACE doesn't.

S, situation. Without a runbook entry, whoever's on call for Patchwright when acceptance rate craters opens every dashboard in reach, in whatever order panic suggests, hoping something looks red.
P, payoff. The habit worth building is checking one thing first, the thing that tells on call which of two branches they're on, instead of scanning a dozen screens with no order between them.
A, anchor. The entry's first line: open the unified change log for the last 24 hours. A change in the window means roll back. No change means flip the circuit breaker and escalate. This is the answer to the question.
R, risk. The first time the log is wrong, because it only watches half the surfaces that can change, on call trusts a false "all clear" and burns twenty extra minutes while trust in the product erodes team by team.
K, keep out. Root-causing why a change hurt quality, an auto-rollback bot with no human check, and per-language dashboards all wait past day one. None of them are needed for the branch to work.

One more thing worth naming: the rejected alternative. Early drafts of this entry were a fifteen item checklist, latency, then GPU, then cost, then status page, in a fixed order. It was rejected because a checklist with no priority just recreates the panic scan with extra steps, and by item eight, teams have already started disabling Patchwright.

The circuit breaker branch has a real cost, and it's worth saying out loud instead of pretending the fix is free. Raising the confidence threshold means fewer comments post at all while the breaker is up, so some real bugs pass through completely unflagged for those hours. That's a deliberate trade of coverage for safety, cheaper than letting a broken comment train more teams to stop trusting Patchwright, but a cost all the same, not a free win.

Hand sketch decision tree titled The runbook's first line. Root box reads acceptance rate dropped, check the change log. Left branch, model, prompt, or index changed in window, leads to roll back to last pinned version. Right branch, no change logged anywhere, leads to circuit breaker, page ML for drift check.
One question, two branches. Everything else in the entry exists to make this question answerable fast.

There's an AI-specific failure mode worth naming here too: hallucinated citations. That prompt bug didn't just make Patchwright wrong, it made some comments cite a file or line number that plainly didn't match the diff, a different kind of failure than an ordinary bad opinion. The guardrail Lintbrook added afterward is a citation validity check: before a comment posts, its cited file and line get checked against the real diff, and anything that fails validation gets suppressed instead of shown. That suppression rate now feeds the same quality metric that pages on call, so a citation bug shows up as a page, not just a slow trickle of Slack complaints.

Hand sketch comparison titled The day the check was wrong. Left panel, deploy log alone, misses the prompt flag change, says clear. Right panel, unified change log, catches model, prompt, and index in one place.
Same question, two different logs behind it. Only one of them was ever going to catch that Tuesday's actual cause.

And if you want to be sure it really works, try it somewhere else

Husklane Cooperative runs Kernscope, a camera on the grain intake belt that grades incoming truckloads for kernel damage, standing in for the manual probe check a human grader used to do on every load. Halvdan Kristoffersen is the night-shift ag-tech engineer on call during harvest.

S, situation. Without a runbook entry, Halvdan's first move when Kernscope's numbers look wrong is to physically walk out to the intake belt and start checking hardware, one camera at a time, while trucks queue up behind him.
P, payoff. Same habit as Lintbrook: check the one thing that tells you which branch you're on before touching hardware.
A, anchor. The identical first line. Open the change log for the last 24 hours. A software or calibration change in the window means roll back. No change means flip the circuit breaker, in this case reverting to full manual grading, and escalate.
R, risk. Here the anchor is tested by the opposite failure. The log correctly says no change happened, because nothing did, and that's exactly right: three weeks of harvest dust had been slowly fouling one camera's lens, and a wet, high-volume morning finally pushed its readings past the threshold. Rolling back would have reverted to nothing and fixed nothing.
K, keep out. Dust and moisture self-diagnostic sensors on every camera, and automatic lens wipers, both real fixes, both hardware investments that wait for the off-season, not a fix on a Tuesday during peak intake.

Agreement between Kernscope's grade and the elevator's official manual grade normally sits at 91 percent. That morning it fell to 53 percent across 60 trucks in about 45 minutes. The runbook's first check came back clear, correctly, because the real cause was a slowly dirtying lens, not a shipped change. Halvdan flipped the circuit breaker, put manual grading back on for that camera's lane, and the hardware team replaced the lens by evening. A model retrain was considered and rejected for day one: training Kernscope to tolerate a smeared lens is a weeks-long eval cycle, not a same-morning fix, and the operational fallback, manual grading, was already sitting there ready to use.

Same anchor, opposite answer, both right At Lintbrook the log said clear and was wrong, because it didn't watch every surface. At Husklane the log said clear and was right, because nothing had actually shipped. The anchor's job isn't to always find a change. It's to correctly tell you whether one exists, so the branch you take is the right one either way.
Hand sketch numbered list titled Left out of day one, on purpose: why the change hurt quality, auto rollback with no human check, per language acceptance dashboards.
Judgment shows up in what you don't build yet as much as in what you do.
How far each incident actually fell below its baseline
Lintbrook, prompt citation bug37 points
15pt trigger
Husklane, lens fouling38 points
Both incidents landed well past the 15 point trigger, one caused by a shipped change, one by nothing shipped at all. The trigger doesn't know the difference. Only the change log check does.

Swap the trigger and it still runs.
Speed: an interviewer caps the answer at ninety seconds. Skip straight to the anchor: check the unified change log first, roll back if something changed, circuit breaker and escalate if nothing did.
Cost: the on-call team can't staff a 24 hour ML rotation. Don't skip the circuit breaker to save headcount, that's the one piece that buys safe time until daylight without needing anyone awake to investigate.
The model got better: the new prompt template turns out to be a genuine improvement once the citation bug is fixed. That doesn't make the runbook entry wasted work, it's still the only way anyone would have caught the citation bug fast enough to keep the improvement instead of reverting it for good out of caution.

Where people run it wrong.
They write a checklist instead of a branch, so on call still has to decide what order to check things in under pressure.
They build the change log around whichever team is writing the runbook, and miss the surfaces owned by everyone else.
They set a rollback as the automatic first move for any quality drop, even when nothing changed, which turns a drift problem into a wasted rollback and a still-unsolved incident.

How to use it live. Say the anchor before naming a single dashboard: "the entry opens with one question, did something change, because that's what decides whether you roll back or wait." That buys the room to talk about what this product's own change surfaces actually are, instead of reciting a generic incident-response checklist.

Flashcards (click a card to flip it)

1 · THE FRAMEWORK
What framework fits "describe the on-call runbook entry for a sudden quality drop," and why not FLIPS?
Tap to flip
ANSWER
SPARK. This is a design question, building an artifact before the failure happens, not tracing a habit that already flipped on someone.
2 · THE PERSON
Who is this answer about?
Tap to flip
ANSWER
Kaveh Nazari, a senior platform engineer on Lintbrook's on-call rotation for Patchwright, its AI pull request review tool.
3 · THE HABIT
What habit does a good runbook entry build in the on-call engineer?
Tap to flip
ANSWER
Check the one thing that tells you which branch you're on, before scanning any dashboard. That's the P step, the payoff the design is built around.
4 · THE ANCHOR
What's the one design decision the whole runbook entry hangs on?
Tap to flip
ANSWER
The first line: open the change log for the last 24 hours. A logged model, prompt, or index change means roll back. No change means flip the circuit breaker and escalate.
5 · THE CHOICE TAKEN BACK
What old decision does this answer take back, and why did it make sense at the time?
Tap to flip
ANSWER
Logging model deploys and prompt template edits in two separate systems, because the two changes shipped from different teams. It made sense until the prompt edit that caused the incident hid from the very log meant to catch it.
6 · THE NUMBER
Fill in the blank: acceptance rate fell from ___% to ___% in about ___ minutes, well past the alert's ___ point trigger.
Tap to flip
ANSWER
58% to 21% in about 90 minutes, past the 15 point trigger.
7 · THE REPLAY
Same 2am page, new runbook entry. What changes?
Tap to flip
ANSWER
Kaveh checks the now-unified change log, finds the prompt edit inside the window immediately, and rolls back by 1:58am, six minutes after the page, before a second team disables Patchwright.
8 · CROSS-PRODUCT TRANSFER
Section 4 answers this same question for a different product. Which one, and what does the anchor check find there?
Tap to flip
ANSWER
Husklane Cooperative's grain grading camera, Kernscope. The change log correctly comes back clear, since nothing shipped, so the same anchor question correctly routes to the circuit breaker branch instead of a rollback.

Check yourself Score: 0 / 0

True or false
1. True or false: since the change log said no deploy happened at Lintbrook, the real fix was to stop trusting change logs and rely on scanning dashboards instead.
  • True
  • False
Show hint
Check what the redesigned entry actually changed about the log itself.
Show answer
False. The fix was making the change log cover every surface, model, prompt, and index alike, not abandoning the idea of checking a log first. A merged, complete log is still faster and more reliable than a dashboard scan.
Multiple choice
2. Why does the runbook entry branch instead of running one fixed sequence for every alert?
  • A. Dashboards take too long to load during an incident.
  • B. A rollback only helps when something actually changed, so the branch decides whether rolling back helps or makes things worse.
  • C. Branching runbooks are easier for new hires to memorize than a checklist.
  • D. The model needs retraining every time acceptance rate drops, regardless of cause.
Show hint
Think about what happens if you roll back and nothing was actually wrong with the last deploy.
Show answer
B. Rolling back when nothing changed reverts a possibly fine model into an unrelated problem and wastes the one fast fix available. The branch exists to pick the right response, not just a faster one.
Fill in the blank
3. The alert doesn't page anyone over one bad hour. It fires when acceptance rate sits more than ___ points below the trailing 7 day median for ___ consecutive hourly checks in a row.
Show hint
Check the chart note under the acceptance rate comparison in Section 1.
Show answer
15 points; two. That's a calibrated bar tuned against a year of normal noise, not a hard floor picked out of the air, which is what keeps the page from firing on an ordinary bad hour.
Short answer, apply it yourself
4. Think of a tool at your own job that could suddenly get worse. What's the one thing you'd check first before doing anything else, and why that one thing?
Show hint
Look for the thing that tells you which of two very different next steps to take, not just any fact about the system.
Show answer
Model answer: A bakery's automated ordering system that forecasts how much flour and yeast to reorder each week. The one thing to check first if the forecast suddenly looks wrong: did anyone change the recipe or portion sizes in the last few days. If yes, the forecast is right and the recipe changed. If no, something in the forecasting logic itself broke, and that's a different fix entirely.
Short answer, the number question
5. If Patchwright's acceptance rate had fallen only 10 points instead of 37, would the alert in this runbook have paged Kaveh? Why or why not?
Show hint
Compare the drop to the stated trigger threshold.
Show answer
No. The alert only fires past a 15 point drop, held for two consecutive hourly checks. A 10 point dip sits under that bar, which is the point of calibrating the threshold against real noise instead of paging on every small wobble.
Before you close the answer
Why this works
Tests whether you can design an artifact for the failure itself, not just describe good on-call culture in general. Most candidates describe a checklist. The strong answer designs the one branching decision a checklist can never give you.
Follow-up traps
"What if the change log itself is down during the incident?" Response: the circuit breaker is the safe fallback either way, since flipping it doesn't require the log to be up, it just suppresses shaky comments until someone can confirm what happened.

"Isn't checking one thing first riskier than checking everything?" Response: no, because the anchor's job isn't to find every fact, it's to pick the right branch fast. A slower, broader scan just delays the same two outcomes while trust in the product keeps eroding.
If pressed
The citation validity check that catches hallucinated line numbers runs on every comment before it posts, not just during incidents, and its ongoing suppression rate is graphed alongside acceptance rate so a slow citation problem shows up as a trend, not just a single night's page.
From U2xAI Academy

From answering questions to owning outcomes.

A live workshop where you ship a working AI agent, defend a launch decision, and walk away with a portfolio recruiters can't wave off, not just more questions to study.

  • A live AI agent you actually shipped
  • A launch decision you can defend under pressure
  • An interview-ready portfolio, not more flashcards
Know more