CaseAdvancedQuality, Cost & Token Economics / Success metrics for AI products / #17

Describe a metric that would have caught a quality regression before users complained.

Incident review, read backward
The direct answer
Track a daily golden set eval score for each comment category on its own, not one weekly number blended across all of them, and pair it with a dismiss rate pulled from real comments, also split by category. The moment one category's score or dismiss rate moves while the others hold steady, treat that as a live regression and check it that day. A blended average can drop a single category by twenty eight points and still read as a normal week.
Do this, in order
  1. Score every comment category on its own, checked daily, not blended into one weekly number.Why: a blended average lets one category crater while the average dips just enough to look like a normal week.
  2. Pair the eval score with a dismiss rate, also split by category, pulled from real production comments.Why: the golden set alone catches it eventually; a live dismiss rate catches it even faster, without waiting for a scheduled eval run.
  3. Before trusting any swing in either number, rule out a broken tracker: check comment volume and logging code first.Why: a real regression and a broken tracking pipeline look identical on a dashboard, and only one of them needs a rollback.
  4. Pin and log the exact model version and prompt template version behind every comment.Why: it turns "something changed sometime" into a two minute lookup instead of a six week hunt.
  5. Set the gate as a rolling multi day average with an automatic rollback, not a single day's read.Why: one bad day happens on its own. A category failing for three straight days does not.
  6. Read real comment text before and after a suspect change, not just the score.Why: a comment can lose its specificity, and its usefulness, without ever becoming wrong enough for an automated eval to flag it.

How to answer this, stage by stage

Nobody is grading whether you can name a metric. They are grading whether you can find the day a regression actually started, before you go looking for the number that would have caught it. Eight moves get you there.

1
Scope it to one real bot, one real regression
Say it like this
"Let's ground this. Kestrelwood Systems built Marginalia, a bot that reads a pull request and leaves inline review comments, sorted into four kinds: style, correctness, security, and performance. For about five weeks this spring, its performance comments quietly stopped saying anything specific, and almost nobody noticed."
Why this works
Grounds the answer in a real product and a real incident before naming a single metric.
2
Say you are going backward, not defending the dashboard
Say it like this
"Here's my plan. Two people filed a complaint about vague comments. I'm not going to explain those two tickets. I'm going to find the day this actually started, because it almost never starts on the day someone tells you."
Why this works
Two seconds of structure that tells the interviewer you have a method, not just a story.
3
Find the real start date, not the complaint date
Say it like this
"The first complaint landed March 26th. But nobody wrote a new prompt that week. The team shipped a template edit on March 3rd, over three weeks earlier, meant to make comments sound less preachy. That's where the timeline actually starts."
Why this works
This is the T step. It separates when someone noticed from when the thing actually broke, which is the whole point of a diagnosis question.
4
Recut by category before you trust the average
Say it like this
"The team's weekly quality digest dipped from 90 to 86 the whole time, which still looked like a normal week. I split it by category instead. Style, correctness, and security barely moved. Performance fell from 89 to 61 in three weeks, and it was getting averaged into three fine categories."
Why this works
This is the R step. A four point dip on a blended number is nothing. A twenty eight point fall inside one slice of it is a fire.
5
Rule out the boring explanation first
Say it like this
"Before I trust that drop, I have to rule out the boring answer. Did the dismiss button log differently? Did we just get fewer performance comments, so the rate got noisy? I checked both. Comment volume held at about 340 a week. The logging code hadn't shipped a change since January. This is real."
Why this works
This is the A step. Skipping it is how a team ships a rollback for a tracking bug, or ignores a real regression because it looks like one.
6
Name three suspects, not everything possible
Say it like this
"Three things could have caused this. One, the underlying model got upgraded out from under us. Two, the March 3rd prompt edit changed what the performance template actually asks for. Three, an unrelated change to how we chunk big diffs before sending them to the model. I'm not chasing every possibility, just these three."
Why this works
This is the C step. A named, short list of suspects reads as judgment. A shrug and "it could be anything" does not.
7
Run the one check that tells them apart
Say it like this
"The model version pin hadn't changed since January, so that's out fast. Between the prompt edit and the chunking change, I pulled ten real performance comments from before and after March 3rd and read them side by side. Correctness and security comments on those same large files still cited real numbers. Only performance got vague. That's a prompt problem, not a diff size problem, and the template's own git history shows exactly which line got cut."
Why this works
This is the E step, and framework-library.md is right that it's the strongest move in TRACE. It turns three guesses into one confirmed cause.
8
Name the metric that would have caught it early, and the cost of keeping it
Say it like this
"Going forward, the number I watch isn't one blended weekly score. It's a golden set score per category, checked every day, plus how often developers dismiss a comment, also by category. That would have shown performance sliding by March 10th, over two weeks before anyone complained. It costs something: a comment that cites a real number runs longer and costs more tokens than the friendlier, shorter version we shipped by mistake. I'd pay that every time over a comment nobody trusts."
Why this works
Matches the direct answer, names a real trade off, and closes on a number instead of a promise to "watch things closely."
If you remember one thing A blended number does not lie. It just answers a different question than the one you're actually asking. Split it before you trust it either way.

Let's learn

What does a quality regression look like three weeks before anyone complains about it?

Marginalia is a bot built by Kestrelwood Systems. It reads a pull request and leaves comments right on the lines that matter, sorted into four kinds: style, correctness, security, and performance.

Knowledge spark: what is a golden set? A fixed stack of real examples with the right answer already marked, checked the same way every time. It does not grow or change month to month, so a score against it means the same thing this week as it did last month.

Through February, Marginalia's performance comments (the ones that flag a slow query or a loop that runs longer than it needs to) scored 89 out of 100 on Kestrelwood's golden set, a fixed stack of 150 real past pull requests with known issues already marked. Developers dismissed about 13 percent of those comments as unhelpful, roughly the same rate as the other three categories.

On March 3rd, the team shipped a small prompt edit meant to make every comment type sound less preachy. Nobody flagged it as risky. It was a tone pass, not a rewrite. Three weeks later, the same golden set scored performance comments at 61. The dismiss rate for that one category had climbed to 44 percent. Nothing else moved.

Performance's golden set score, week by week
89 60 prompt edit ships first complaint, day 23 fix reverted, day 40 Mar 3 Mar 24 Apr 12 Apr 19
The blended weekly digest only dipped from about 90 to 86 across this whole window, still inside the range Kestrelwood already treated as normal noise. Performance's own score, never pulled out on its own, fell twenty eight points before anyone acted on it.
The blended quality number never dipped below 86. It was never wrong. It was just answering the wrong question.
Golden set score by category, before the edit versus early April
91 90 88 89 92 90 89 61 Style Correctness Security Performance
Grey is the February baseline, before the edit. Teal is early April, still holding or slightly up in three categories. Performance's after bar is the one colored alert red, because it is the one that broke.

At its worst, this ran for 40 days before anyone found it: about 1,900 vague performance comments landed on real pull requests at customer companies, each one a small, silent reason to stop trusting that category of comment. Only two developers ever said anything out loud about it.

The decision I would take back We scored quality as one blended number, checked once a week, with no history kept by category. Nobody could see performance quietly drifting, because nobody had ever built a place to look at it on its own.

What I would leave alone: the one line comment Marginalia posts once, on a repo's very first pull request ("Marginalia is now reviewing this repo"). It is not written by the model. It cannot drift, so it does not need the same daily watch as everything else.

The lesson: a number that blends four different jobs into one score will always look calm. Calm is not the same thing as healthy. It just means you built one number where you needed four.

Now here is the same thing as a story

The short version is above. Below is the week this almost went unnoticed for good, told in order.

Every Friday afternoon, Edda Falk pulls the week's quality digest before anyone else at Kestrelwood sees it. She has run product for Marginalia for two years, since before it had a name, and she built the golden set herself: 150 real pull requests, each with the issues a good reviewer should catch already marked. For eighteen months the digest read the same story every week, one blended score, usually 89 to 92, a green check next to it, and Edda moved on to the next thing on her list.

Early March, the tone edit for less preachy comments shipped. The Friday digest that week read 90 percent. Edda glanced at it for maybe four seconds and closed the tab. Two weeks later, still holding near 88. Why would she reread it. It was close to where it had lived for over a year. By the last week of March, the digest read 86, four points under where it had sat for months. She noted it, decided four points was nothing, and moved on to the next thing.

On March 26th, a senior engineer at a customer company posted one line in the shared support channel: "Marginalia's perf comments have gotten vague lately. Feels like it's just guessing now." Support saw five tickets that week against a normal week of three, filed it as within range, and closed it.

Edda almost didn't see it either. A second, sharper complaint came in on April 2nd. Two data points is still easy to explain away at a company with hundreds of customers. What actually made her stop was smaller than either complaint: a habit she had built years earlier, never trust a summary number without reading five real examples underneath it. On April 7th, instead of glancing at 86 percent again, she pulled ten real performance comments Marginalia had left that week and read them next to ten from January.

The two complaints were not the damage. The damage was every developer who read a vague comment, believed the tool had gotten worse at its job, and never filed anything at all.

It was never about the two tickets. It was about the number that had stayed calm for five straight weeks while the thing underneath it got worse. Three suspects made sense once Edda actually went looking: the model could have quietly changed under Kestrelwood's feet, the March 3rd prompt edit could have changed what the performance template asked for, or an unrelated change to how large diffs get chunked before hitting the model could have hurt every category at once.

Hand sketched comparison titled Three suspects, one confirmed. Left panel a gauge icon labeled Model upgrade, version pin checked, unchanged since January, ruled out. Middle panel a document icon labeled Prompt edit, one line removed March 3rd, confirmed. Right panel a funnel icon labeled Chunking change, would have hit every category on big files, it only hit one, ruled out.
The model version pin ruled out the first suspect in minutes. The other two needed a real check, not a guess, before either one could be crossed off.

The model version log had not changed since January, so that suspect was out fast. Between the prompt edit and the chunking change, Edda pulled ten real performance comments from before and after March 3rd and read them next to correctness and security comments from those same large files. Correctness and security still cited real numbers. Only performance had gone vague. That ruled out chunking (which would have hurt every category on a big file, not just one) and pointed straight at the prompt edit. The template's own git history showed exactly what changed: the line that used to read "cite a specific complexity class or an estimated latency or throughput number" was gone from the performance template, cut in the March 3rd tone pass, still present in all three of the others.

Two years earlier, when the golden set first shipped, the design meeting lasted maybe twenty minutes. Someone asked whether the score should be split by category or reported as one number. One number was simpler, and at the time all four categories moved together anyway, so splitting it felt like solving a problem nobody had yet. Nobody in that room was picturing one category quietly failing while the other three propped up the average. Why would they. It had not happened yet.

Edda reverted the missing line on April 12th, at 2:14 in the afternoon, forty days after it shipped. Ten weeks later, in June, a routine dependency upgrade nudged the security category's golden set score from 92 to 84 overnight. The new daily, per category alert caught it by 6:40 the next morning. Edda reverted the change by 11 a.m. Zero complaints, zero tickets, and a fix that took under five hours instead of forty days.

What I would tell myself, back in that twenty minute meeting: a score that blends four jobs into one number will always look calmer than the truth underneath it. You do not find out which job broke until you build a place where each one can fail on its own.

TRACE, in the order I actually ran it

This is a diagnosis question read backward from a symptom to a cause, so TRACE fits. Not a forward-looking metric picked with no incident behind it.

T
Timeline. When did it actually start, not when did someone complain.
March 3rd, when the prompt template lost its number citing instruction. Not March 26th, when the first complaint landed.
Twenty three days apart, and the whole answer turns on closing that gap.
R
Recut. Slice it before you trust the average.
Split the score, and the dismiss rate, by comment category instead of reading one blended weekly number.
Performance's dismiss rate jumped from 13 to 44 percent while the other three barely moved.
A
Assume nothing. Rule out a broken tracker before you trust the number.
Checked comment volume, flat at about 340 a week, and the dismiss logging code, unchanged since January.
Only then was the drop treated as a real regression instead of a tracking glitch.
C
Cause candidates. Three named suspects, not every possibility.
A silent model version bump, the March 3rd prompt edit, or an unrelated diff chunking change shipped around the same time.
Three, named up front, not a shrug and a promise to look into it.
E
Evidence test. The one check that tells them apart.
The version pin ruled out the model in minutes. Reading ten real comments before and after March 3rd, plus the template's own git diff, pointed straight at the missing citation line.
The strongest move in TRACE: one check, not three parallel investigations.

Two things are worth naming straight, since this is where the AI-specific judgment actually sits. The team considered just raising the alert on total complaint volume instead, watching for five tickets in a week instead of three. That was rejected on purpose: complaint count is a lagging, blended signal, and it sat inside its normal weekly range for all twenty three days the regression was live, because most developers who lose trust in a comment type just stop reading it instead of writing in about it. The failure mode worth naming by name is silent degradation, a prompt or model change that makes output less specific without ever becoming wrong in a way an existing check would catch, and the guardrail is the daily, per category golden set score plus a per category dismiss rate alert, not a person spot reading the weekly digest. The bar for that score is calibrated, not absolute: a category's gate holds at or above 85 on a rolling three day average, not any single day's read, because one bad day happens on its own and a rollback triggered on noise wastes an afternoon for nothing. The trade off is real too: a comment that cites a real number or a complexity class runs longer and costs more tokens to make than the shorter, friendlier version that shipped by mistake. That is the cost of a comment a developer can actually check, instead of one that just sounds confident.

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

Same five letters, a county permitting office instead of a code review bot, so the method proves itself instead of repeating a story I happened to prepare.

Dellmar County's planning department runs Curbline, a tool that pre-screens residential permit applications and flags anything missing or wrong before a human reviewer opens the file. Ambrose Brennick supervises the review team.

T, timeline. A vendor pushed a routine update to the document reading model behind Curbline on a Tuesday in October. Nobody at the county controls that update or gets a warning before it ships.
R, recut. Split the correct flag rate by permit type instead of reading one office wide number. New construction permits, mostly typed digital plans, stayed steady. Renovation permits, mostly scanned pages with a contractor's handwriting on them, fell hard.
A, assume nothing. Checked whether fewer renovation permits simply came in that month. Volume was flat, about 40 a week, the whole time.
C, cause candidates. The vendor's document reading update, a queue change that had started routing renovation permits to a newer reviewer pool, or turnover on the scanning team changing how pages got prepared.
E, evidence test. Ambrose reran the exact same batch of scanned renovation applications through Curbline twice, once against the model version from before the update and once against the current one. Same files, same scans, a different score. That isolated the vendor's update as the cause in under an hour.

Renovation permits misflagged, stacked by the week nobody had split the number yet
Week 1: 12 Week 2: 15 Week 3: 18 Week 4: 21 66 renovation permits misflagged before the pattern surfaced
Four weeks of drift, stacking to a total nobody saw as one number until Ambrose split it by permit type.
Same shape, different stakes At Kestrelwood, the unwatched cost was a developer quietly losing trust in one comment type. At Dellmar, it is a homeowner's renovation permit stalling for weeks because a scan the tool used to read cleanly, it no longer reads at all. The recut step does not change: split the number by the group most likely to be hurt, never trust the office wide average.

Swap the trigger and it still runs.
Speed: an interviewer caps you at ninety seconds. Skip straight to the recut: whatever the blended number says, split it by the group most likely to be hurt, before you trust it either way.
Cost: engineering says a daily, per category eval costs too much compute to run every day. Do not fall back to a blended weekly number as a stopgap. Run it daily for the categories most likely to drift and weekly for the rest, instead of daily for none.
The model got better, for real: say the underlying model gets meaningfully better at writing comments generally. That is still not proof one category, tuned by one prompt template, is safe. A better model finds a new way to satisfy a vague instruction just as easily as an old one did.

Where people run it wrong.
They read a flat blended number as proof nothing changed, instead of asking whether four different things are being averaged into it.
They treat the first complaint as the start of the problem, instead of the day it finally got loud enough to hear.
They chase every possible cause at once instead of naming three real suspects and running the one check that tells them apart.

How to use it live. Say the split before naming a single cause: "the number I would trust least right now is any average blending more than one kind of output, because an average is exactly where a real regression hides." That buys you room to actually trace it, instead of reciting "we would monitor closely" on reflex.

Flashcards (click a card to flip it)

1 · THE FRAMEWORK
What framework fits a question asking you to name a metric that would have caught a regression before anyone complained, and why?
Tap to flip
ANSWER
TRACE. It is a diagnosis question read backward: find the real start date, then find the number that would have shown it early, not a forward metric picked with no incident behind it.
2 · THE PERSON
Who is this answer about?
Tap to flip
ANSWER
Edda Falk, who runs product for Marginalia, Kestrelwood Systems' pull request review bot, and built its golden set herself two years ago.
3 · THE TIMELINE
What was the real start date of the regression, and how far off was the first complaint?
Tap to flip
ANSWER
March 3rd, the day a prompt template edit shipped. The first complaint landed March 26th, twenty three days later.
4 · THE RECUT
What did splitting the score by comment category show that the blended weekly number hid?
Tap to flip
ANSWER
The blended score only dipped from about 90 to 86, inside its normal range. Split by category, performance alone had fallen from 89 to 61.
5 · THE OLD DECISION
What decision would you take back, and why did it make sense at the time?
Tap to flip
ANSWER
Scoring quality as one blended number with no history kept by category. It made sense back when all four categories moved together, before one of them could quietly fail on its own.
6 · THE NUMBER
Fill in the blank: performance's golden set score fell from 89 to ___ by the time the first complaint arrived.
Tap to flip
ANSWER
61. Nobody could see it, because it was never pulled out of the blended weekly number on its own.
7 · THE FIX, REPLAYED
How fast did the next similar incident get caught, once the fix was in place?
Tap to flip
ANSWER
A June dependency upgrade nudged the security category's score from 92 to 84 overnight. The new daily, per category alert caught it by the next morning, and it was reverted within five hours instead of forty days.
8 · CROSS-PRODUCT TRANSFER
Section 4 runs TRACE again on a different product. Which one, and what did the evidence test confirm?
Tap to flip
ANSWER
Curbline, Dellmar County's permit pre-screening tool. Rerunning the same scanned renovation applications through the old and new model versions confirmed a vendor document reading update as the cause.

Check yourself Score: 0 / 0

Multiple choice
1. Why doesn't watching total complaint volume work as the metric that would have caught this regression early?
  • A. It is a lagging, blended signal, and it sat inside its normal weekly range for all twenty three days the regression was live.
  • B. Complaints are always unreliable and should never be tracked.
  • C. Support tickets were not being logged correctly that month.
  • D. Users do not file complaints about AI quality issues.
Show hint
Check what support actually saw that week, and how it compared to a normal week.
Show answer
A. Five tickets against a normal three still reads as noise. A number that only moves after people notice and bother to write in will always arrive weeks after the real regression started.
True or false
2. True or false: the same daily, per category golden set score should also run for the static welcome comment Marginalia posts once on a repo's first pull request.
  • True
  • False
Show hint
Check what I would leave alone, in Let's learn.
Show answer
False. That comment is not written by the model, so it cannot drift. Watching it the same way as the other four categories would just be extra work for no reason.
Fill in the blank
3. The prompt edit shipped March 3rd. The first complaint arrived ___ days later.
Show hint
Check the timeline, stage 3 in the walkthrough.
Show answer
23 days. Nobody wrote a new prompt in the week the first complaint landed. The real start date was over three weeks earlier.
Short answer
4. What old decision does this answer take back, and why did it make sense when it was first made?
Show hint
Look for the meeting memory, not a setting anyone could just turn up.
Show answer
Model answer: Scoring quality as one blended weekly number with no history kept by category. It made sense two years earlier, when all four comment categories moved together and splitting the score felt like solving a problem nobody had yet. It stopped making sense the day one category could fail on its own while the other three kept the average looking calm.
Short answer, apply it yourself
5. Think of an AI feature you use that gives you one overall score or rating. What might that blended number be hiding right now, if you could split it into its real parts?
Show hint
Look for a number that combines more than one kind of output into a single score.
Show answer
Model answer: A shopping app's overall "recommendation quality" score might blend electronics, groceries, and clothing into one number. If clothing recommendations quietly got worse after a catalog change, a strong grocery and electronics score could keep the blended number looking fine for weeks.
Fill in the blank
6. Performance's golden set score fell from 89 to ___ by the time the first complaint arrived.
Show hint
Check the number flashcard, or the line chart in Let's learn.
Show answer
61. A twenty eight point fall in one category, sitting inside a blended number that only moved from about 90 to 86.
Before you close the answer
Why this works
Tests whether you will go find the number that was already moving, or defend the dashboard that told everyone it was fine. Most candidates start with "we would look into the complaints" instead of the twenty three days before them.
Follow-up traps
"Isn't a daily per category eval just going to flag noise constantly?" Response: no, because the gate reads a rolling three day average, not a single day, and a category has to stay under its bar for three days running before anything triggers.

"Couldn't you catch this just by reading the digest more carefully?" Response: no. The digest was correct. It was a blended average doing exactly what an average does, hiding one bad category inside three fine ones. The fix is a different number, not more attention on the same one.
If pressed
The golden set itself gets a slow refresh, about ten pull requests swapped in every quarter, because a fixed set that never changes eventually stops matching what real pull requests look like, and a perfect score against a stale set stops meaning anything.
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