ConceptAdvancedModel Fluency & the AI PM Role / What changes when the product is probabilistic / #10
How does non-determinism change your regression testing strategy?
SPARK · an AI assistant that drafts replies inside a support inbox
Quillhatch sits inside Marlstrand's support inbox and drafts the reply before an agent even opens the ticket. Marcellus Rutherglen owns how its regression suite decides a build is safe to ship. Three weeks ago, engineer Emeric Carrow trimmed a slow, wordy line out of Quillhatch's prompt. The nightly test passed. Two days later, support agent Osbert Duvalier caught the wrong refund date sitting in a live draft, seconds before it would have gone out.
The direct answer
Stop testing a single sample against one saved string. For any draft where a fact matters, a price, a date, a policy figure, sample the model twenty times a night, check each sample against the real fact it's supposed to state rather than its exact wording, and require the build to clear a pass-rate bar, at least 95 percent, before it can ship. Give tone-only cases a looser, separate bar. A single pass or fail can no longer tell you whether the model is right or whether you just got a lucky roll.
Do this, in order
Replace single-sample exact match with a twenty-sample, graded pass-rate check on every fact-critical draft.Why: this is the only design that would have caught the refund bug instead of getting lucky on deploy night.
Split the pass-rate bar by category: about 95% for facts, about 80% for tone-only cases.Why: one shared bar either misses real regressions or drowns the team in false alarms, confirmed both ways on our own numbers.
Grade each sample against the actual fact it states, not the literal string.Why: policy wording changes over time; a fact check survives that, a string diff has to be rebuilt every time.
Reject pinning the model to temperature zero as the fix.Why: real alternative considered, it flattens every reply into the same robotic wording, and a version bump on the provider's side can still shift the one deterministic answer to a new wrong one.
Accept the slower nightly run, about 35 minutes instead of 4, and roughly twenty times the model calls.Why: names the real cost being taken on, on purpose, to catch this class of bug before a customer reads it.
Leave tone and warmth ungraded for now, caught by a small human spot check instead.Why: judging whether a reply "sounds like us" is its own hard problem, not worth building before the fact safety net exists.
How to answer this, stage by stage
Nobody is grading whether you can say "we'd add more tests." They're grading whether you understand why a single pass, from a model that samples, proves almost nothing.
1
Put a real product, a real build, and a real name on it
Say it like this
"Let's ground this in one case. Quillhatch is Marlstrand's assistant that drafts replies to inbound support email, and Marcellus Rutherglen owns how its regression suite decides a build is safe. A prompt change her engineer, Emeric Carrow, shipped is where this actually happened."
Why this works
Keeps every claim after this checkable against a real build, not a hypothetical one.
2
Name the method before naming a fix
Say it like this
"I'll run this as SPARK. What the test assumes today and why that assumption is wrong for a model, the habit I actually want, the concrete check I'd build, what breaks the first time it's tested against itself, and what I'm leaving out on purpose."
Why this works
Signals a plan is already moving, not five thoughts arriving as they occur.
3
Say what the current test actually assumes
Say it like this
"Right now Quillhatch's suite runs one sample per case, once a night, and diffs it word for word against a saved reply. That only tells you something if the same input always makes the same output. A model that samples doesn't do that. So the test isn't really asking 'is this fixed,' it's asking 'did tonight's roll come up right.'"
Why this works
This is the reframe the whole answer turns on. Skip it and the fix sounds like busywork instead of a real correction.
4
Hand over the actual mechanism, not a metaphor
Say it like this
"Here's what I'd build. For every draft where a fact matters, a refund window, a price, a date, run twenty samples a night instead of one. Check each sample against the real fact it's supposed to state, not the exact words. Require at least ninety five percent of those twenty to land on the right fact before the build can ship, blocked automatically, nobody has to notice by hand."
Why this works
This is the direct answer, concrete enough that Marcellus's team could actually build it tomorrow.
5
Run the fix against both ways a threshold breaks
Say it like this
"This has to survive being wrong in both directions. Set the bar too low, say sixty percent, and the exact bug we shipped, which was right about sixty five percent of the time, sails straight through again. Set it too high across every kind of case, we tried a shared ninety five percent bar for a week, and it false-alarmed on eight nights out of ten, because ordinary wording variation in the tone-only cases kept dipping under it. Nobody trusts an alarm that goes off over breakfast, so a fact needs a different bar than a phrase."
Why this works
The hardest step, and the one a rushed answer skips. Testing the fix against its own failure is what makes it a design, not a wish.
6
Name what stays a person's job, on purpose
Say it like this
"One thing I'm not trying to grade yet: whether a reply actually sounds like us, warm instead of stiff. That's a real quality question, but a fuzzy one. I'd rather put the engineering time into the fact safety net first, and catch tone with a small human spot check until that's solid."
Why this works
Naming the limit on purpose is what makes this judgment, not a wish list of everything an eval could someday check.
7
Close on the one sentence that answers it
Say it like this
"So: stop trusting a single sample. Run twenty, grade the fact it actually states, hold fact-critical cases to a high bar and everything else to a looser one, and accept that the nightly run gets slower, because slower and honest beats fast and lucky."
Why this works
Restates the direct answer plainly, so the interviewer leaves with the decision, not just the story.
Let's learn
Quillhatch drafts the reply. A person reads it, fixes anything off, and hits send. Most days, that's the whole product, and it works exactly like that.
Before Quillhatch, an agent on Marlstrand's support team wrote every billing or account reply from scratch, about six minutes each: read the ticket, check the account, type the answer. A queue of forty emails ate most of a morning.
With Quillhatch, an agent opens a ticket and a full draft is already sitting there, built from the account and the question. Most mornings, reading and fixing a draft takes under two minutes instead of six.
This is what Quillhatch's suite checked every night, right up until the week this happened.
Knowledge spark: what is sampling temperature?
A dial that controls how much a model varies its wording, run to run, on the exact same question. Turn it down and answers get more repetitive. Turn it up and they get more varied. Either way, the same input can still produce a different output the next time you ask, and Quillhatch runs at a setting where that's expected, not a bug.
Here's the turn. Quillhatch's mistakes were never really the risk. The risk was that Marcellus's team had a test built to answer a question the model had already stopped answering the same way twice.
Every night, the suite picked one golden case, refund window on an annual plan cancelled mid-term, sampled Quillhatch's draft once, and diffed it against the saved, approved answer: no refund after the first 30 days, prorated inside them. When Quillhatch gets that fact right, it almost always writes it the same way the approved paragraph does. When it gets it wrong, it swaps in a different, equally fixed, wrong paragraph, borrowed from the monthly plan's 14-day policy instead.
Five steps, and the whole outcome turns on step three, which nobody controls and the old test never checked twice.
On a Monday, Emeric Carrow trimmed a slow, wordy clause out of Quillhatch's prompt, the one that spelled out the refund policy explicitly, to shave latency from 2.4 seconds to 1.6 and cut token cost by about 15 percent. After the trim, that one case came out right about 65 percent of the time and wrong, stating a 14-day window instead of 30, about 35 percent of the time.
One sample passing does not mean the model is right. It means that one time, it happened to be.
Fact-critical pass rate, night by night, if you'd been sampling 20 times all along
Healthy nightsBroken, but only one sample a night ever ranFixed, graded eval live
Night 6, the single nightly sample happened to land on the correct branch and the old suite showed a plain pass. The real pass rate had already dropped to about 65 percent and stayed there for six nights before anyone knew.
The nightly suite ran that Monday night and sampled the correct branch, the 65 percent chance, so it showed a clean pass. The build merged Tuesday morning. On Wednesday, Osbert Duvalier, reviewing a live draft before sending it to a customer cancelling an annual plan, caught the 14-day figure sitting in the text and stopped it. On Thursday, Marcellus's team reran the exact same case, same code, nothing changed, twenty times: 7 of 20 came back wrong. Not a fluke in the code. A coin that had been landing wrong more than a third of the time, and the suite had only ever flipped it once.
The decision that mattered
When Quillhatch's suite was built, the team chose one sample, exact match, because it was cheap and Quillhatch's early replies were short and rigid enough that it barely mattered. Nobody came back to revisit that choice as the prompts got longer and the model got more room to vary its answer.
At its worst, this costs more than one wrong email. A prompt regression this size, caught by luck once, ships again the next time nobody happens to open the right draft. And a graded suite that flags every ordinary paraphrase as broken teaches the team to stop reading its own alerts, which is its own way of going blind, just slower.
What I would leave alone: the sign-off boilerplate at the bottom of every draft, the greeting line, the "let us know if you need anything else." Those come from a fixed template with no fact in them at all. Testing them for exact wording was never buying Marlstrand anything, and it still isn't.
The lesson: a test that checks one sample against one saved string only proves the model can be right once. It never proves the model is right often enough to trust with a real customer's inbox.
Now here is the same thing as a story
Read the short version above when you're in the room. Read this one when you want to feel why a green checkmark almost wasn't enough.
The support queue at Marlstrand fills up fast right after nine, when overnight billing questions land all at once.
Osbert Duvalier has worked that queue for three years. He's the one people ask when a ticket looks routine but reads a little off, a cancellation with a strange date, a refund that doesn't match the plan. He reads carefully, out of habit more than instruction.
Quillhatch arrived a year ago, and for months it was the best part of his shift. He'd open a ticket, a full draft was already there, and nine times out of ten it needed nothing more than a name check before he sent it. He read every draft closely at first, the way he read everything. Then, slowly, the way anyone would, he started reading faster. The drafts kept being right, so there was less to catch.
Nothing about that was careless. It was what a good tool earns.
On a Monday, three weeks ago, Emeric Carrow shipped a small change on his side of the building. Quillhatch's prompt had a long clause spelling out the refund policy word for word, and it was making every draft a little slower and a little more expensive to generate. He trimmed it, trusting the model to still know the policy from the rest of the prompt around it. The nightly suite ran that night. It passed.
Not a bigger test. A different question asked twenty times instead of once.
By Wednesday, a customer named nothing in particular to Osbert, just another annual plan, cancelled seven days after paying, wrote in asking what she'd get back. Quillhatch's draft said fourteen days. Osbert didn't know that number was new. He knew it was wrong, because he'd read the actual policy a hundred times and it had never once said fourteen. He deleted the draft and wrote the real answer by hand, then flagged it to Marcellus before his coffee was cold.
The draft did not get caught by the test. It got caught because Osbert still reads before he sends.
Marcellus's first question wasn't "how did this get past the test." It was "how many times has this happened and gone out." Nobody could answer that, which was its own answer. On Thursday, her team reran the exact case Emeric had touched, the same code, nothing changed since Tuesday's merge, twenty separate times. Seven came back wrong. The bug hadn't been fixed and rediscovered. It had never gone anywhere. The test had simply never asked twice.
Marcellus's team tried both wrong versions before landing on the right one, and both failures taught them something the story alone wouldn't have.
The decision Marcellus traced it back to wasn't Emeric's prompt edit. It was older than that: the day the suite was built, someone chose one sample and an exact string match, because it was cheap, and because Quillhatch's earliest replies were short enough that the model barely had room to vary. That was a sensible call for the product Quillhatch was then. Nobody ever came back to ask whether it still fit the product Quillhatch had become.
Run the same Monday again, with the new suite already live. Emeric trims the same clause. That night, the suite samples the case twenty times instead of once: 13 pass, 7 fail, a 65 percent rate, well under the 95 percent bar. The build is blocked automatically before it ever reaches a customer's inbox, three days before Osbert would have had to catch it by hand, and before anyone can ever ask how many times it already went out.
The whole answer to this question, in one picture. A single sample tells you about the night. Twenty samples tell you about the model.
One design left the truth up to which branch got sampled on a Monday night. The other one asks the same question often enough that luck stops mattering.
What Marcellus would tell herself, back on the day the first suite got built: a test that only ever asks once was never really testing the model. It was testing the night.
SPARK: teaching the suite to stop trusting a lucky roll
Not a way to dress up "add more tests" in five letters. SPARK forces you to say what the old test actually assumed, then prove the new one survives being wrong in both directions.
SSituation. What the test assumes today, without a fix.
One sample a night, diffed word for word against a saved reply. That only means anything if the same input reliably makes the same output. A model that samples breaks that assumption outright, and the test can't tell "we got lucky tonight" apart from "this is actually fixed."
Name the broken assumption before naming the fix, or the anchor sounds like extra process instead of a real correction.
PPayoff. The habit worth building.
Not "more tests." A suite the team actually trusts, one that catches a real prompt regression without also crying wolf on ordinary wording drift, so nobody has to rerun a case by hand to find out what a red X actually means.
A habit is something you can check for on the next build. A mood, "be more careful," isn't.
AAnchor. The actual mechanism you'd build.
For every fact-critical draft, sample the model 20 times a night instead of once. Grade each sample against the real fact it states, a rule-based check on the actual figure, not the literal words. Require at least 95 percent of the 20 to land on the right fact before a build can ship. Below that, the build is blocked automatically.
This is the concrete answer to the question. Everything else exists to protect it.
RRisk. What breaks the first time it's tested against itself.
Two failure directions, and both are real. A bar set too low, 60 percent, still lets the exact bug that shipped, 65 percent right, sail through untouched. A bar set too high across every kind of case, a shared 95 percent for facts and phrasing alike, false-alarmed 8 nights out of 10 in a real shadow trial, until the bar got split by category. That's the trade Marlstrand is accepting on purpose: about 35 minutes a night instead of 4, and roughly twenty times the model calls, to catch this class of bug before a customer reads it.
Design the anchor against this specific risk, in both directions, or the fix just moves the failure somewhere new.
False-alarm nights per 10, three suite designs
Old suite: quiet, but blind to the bugSame bar for facts and phrasing95% facts, 80% phrasing
The old suite never false-alarmed, because it also never asked the question twice. A single shared bar catches real bugs but drowns the team in noise. Splitting the bar by category is the only design that's both quiet and honest.
KKeep out. What doesn't get graded on day one.
Tone and warmth stay a human spot check, not an automated score, until the fact-critical net is solid. And the team rejected the tempting shortcut of pinning temperature to zero: it would flatten every customer's reply into the same robotic wording, and it still wouldn't stop a model-version bump on the provider's side from shifting the one deterministic answer to a new, confidently wrong one.
Naming the shortcuts you're refusing is what makes "we'll test it differently" sound like a real decision instead of an excuse to test it less.
Three things Marcellus's team is deliberately not automating yet, and why none of them are the fact that almost went out wrong.
And if you want to be sure it really works, try it somewhere else
Same five letters, a real estate follow-up assistant instead of a support inbox, and this time the fact that drifted wasn't a refund window. It was a monthly fee.
Kerbside, built by Osterholt, drafts the follow-up email an agent sends after a showing: the price, the square footage, the monthly fee, how long the listing has been on the market. Caspian Merrivale owns its regression suite. Osterholt runs 150 golden follow-ups through it nightly, 25 of them fact-critical, price and fee figures a buyer could reasonably rely on.
Different product, different fact, same shape of failure: a single nightly sample that can't tell lucky from right.
A provider-side model version bump, not anything Osterholt's own team touched, quietly changed how Kerbside handled co-op listings with a maintenance fee that's separate from the HOA fee. After the bump, about 70 percent of samples on that case still stated the fee correctly, and about 30 percent conflated the two figures, understating what a buyer would actually owe every month. The nightly suite, one sample, exact match, happened to land on the correct branch the night of the bump. It passed. Days later, an agent caught the wrong fee in a live follow-up before it reached a buyer.
The decision Kerbside's team would take back
Same shape as Quillhatch's: the original suite tested one sample against one saved string, because it was cheap and the model's early answers were short enough that it rarely mattered. Nobody revisited it once the model, and the listings it had to describe, both got more complicated.
Same rank, different fact: Caspian's team built the identical fix, 20 samples a night on the 25 fact-critical cases, graded against the real fee and square-footage figures rather than the exact wording, a 95 percent bar. Their own shadow trial with one shared bar across all 150 cases false-alarmed 6 nights out of 10; splitting the bar by category brought that down to almost none.
Swap the trigger and it still runs.
Speed: an interviewer caps you at ninety seconds. Skip straight to it: twenty samples, grade the fact not the wording, a high bar for facts and a lower one for phrasing.
Cost: no budget this quarter to run 20 samples on every case. Start with only the handful of fields a customer could actually be harmed by, price and fee, and widen the graded set later.
The model got better, for real: say the provider's next version drops the conflation entirely. The pass rate on that case climbs to 100 percent and the bar stops flagging it, exactly as it should. A better model doesn't change the design, it just clears the bar the design was already checking.
Where people run it wrong.
They keep a single exact-match sample and just run it more often, without changing what "pass" actually checks.
They set one shared bar for every kind of case, and either miss real regressions or drown the team in noise.
They treat a human catching it once, by luck, as proof the process is working, instead of proof it isn't.
How to use it live. Ask this before naming a fix: "does this test's pass or fail actually mean the same thing every time it runs, or could the exact same code pass tonight and fail tomorrow?" That question alone usually finds the flaky spot before you have to guess at one.
Flashcards (tap any card to flip it)
1 · THE FRAMEWORK
What framework fits this question, and what's its job?
Tap to flip
ANSWER
SPARK: design the actual fix against the failure it has to survive, before you build it. Used here because the question asks you to design a testing strategy, not diagnose a drop or pick a metric.
2 · THE PERSON
Who is this answer about?
Tap to flip
ANSWER
Marcellus Rutherglen, who owns how Quillhatch's regression suite decides a build at Marlstrand is safe to ship.
3 · THE SITUATION
What does the old test actually assume, and why does a model break it?
Tap to flip
ANSWER
It assumes the same input always makes the same output, so one sample is enough. A model that samples doesn't do that, so a single pass only proves that one run got lucky.
4 · THE ANCHOR
What's the concrete anchor, the actual system Marcellus builds?
Tap to flip
ANSWER
Twenty samples a night on every fact-critical case, each graded against the real fact stated rather than the exact wording, blocked from shipping below a 95 percent pass rate.
5 · THE OLD DECISION
What decision would Marcellus take back?
Tap to flip
ANSWER
Building the original suite on one sample and an exact string match, because it was cheap and Quillhatch's early replies were short enough that it rarely mattered. Nobody revisited it as the prompts grew.
6 · THE NUMBER
Fill in the blank: after the prompt trim, the refund case came out right about ___ percent of the time, and wrong about ___ percent.
Tap to flip
ANSWER
About 65 percent right, about 35 percent wrong, confirmed by rerunning the same untouched code 20 times and getting 7 failures.
7 · THE REPLAY
Same Monday, new suite already live, what changes?
Tap to flip
ANSWER
The 20-sample run comes back 13 pass, 7 fail, a 65 percent rate under the 95 percent bar, and the build is blocked automatically before it reaches a customer, three days before Osbert would have had to catch it by hand.
8 · CROSS-PRODUCT TRANSFER
Section 4 answers this same question again for a different product. Which product, and what's the equivalent fact-critical case?
Tap to flip
ANSWER
Kerbside, Osterholt's real estate follow-up assistant. The equivalent case is the monthly fee on a co-op listing, conflated with the HOA fee after a provider-side model version bump.
Check yourself Score: 0 / 0
Multiple choice
1. Why did the nightly regression suite pass on the Monday night Emeric trimmed the prompt, even though the refund case was already broken?
A. The bug hadn't started yet; it appeared two days later.
B. The suite only ran one sample that night, and it happened to land on the correct branch.
C. The golden reply text was updated to match the new, wrong answer.
D. Osbert approved the draft before the test ran.
Show hint
Check the pass-rate math in "Let's learn": right about 65% of the time, wrong about 35%.
Show answer
B. A single sample at a 65% correct rate has better than a two-in-three chance of passing on any given night, which is exactly what happened.
Fill in the blank
2. The new suite runs ___ samples a night on every fact-critical case, and requires at least ___ percent of them to state the right fact before a build can ship.
Show hint
Look at the A step in the SPARK recap.
Show answer
20 samples, 95 percent. That bar is high enough to catch the exact bug that shipped, which was only right 65 percent of the time.
True or false
3. True or false: setting one shared 95 percent pass-rate bar across every kind of case, facts and tone-only phrasing alike, is a safe way to simplify the new suite.
True
False
Show hint
Check the false-alarm chart in the SPARK recap.
Show answer
False. A shared 95% bar false-alarmed on 8 of 10 nights in the real shadow trial, because ordinary wording variation on tone-only cases kept dipping under it. Splitting the bar by category is what made the suite both catch the bug and stay quiet.
Short answer, name the rejected alternative
4. What alternative did Marcellus's team consider instead of the graded, multi-sample suite, and why did it lose?
Show hint
Look at the K step in the SPARK recap.
Show answer
Model answer: Pinning Quillhatch's temperature to zero to make the exact-match test reliable again. It lost because it would flatten every customer's reply into near-identical, robotic wording, and it still wouldn't stop a provider-side model version bump from shifting the one deterministic answer to a new, confidently wrong one.
Short answer, apply it yourself
5. Think of a feature you've used that's built on an AI model. Where might a single-sample test give a false sense of safety, the way Quillhatch's did?
Show hint
Look for anywhere a chatbot or generator states a specific fact, number, or date rather than just a style of answer.
Show answer
Model answer: A recipe app that lets an assistant convert measurements between metric and imperial. A single passing test on "2 cups to milliliters" says nothing about whether the model gets every conversion right; it needs to be sampled and checked across many runs, on the actual math, not the exact sentence.
Short answer, work the number
6. If Quillhatch's refund bug had only been wrong 10 percent of the time instead of 35, would a single nightly sample have been more or less likely to catch it, and would the 95 percent bar still catch it?
Show hint
Think about how often a single sample passes at a 90% correct rate, versus what the 20-sample average would show.
Show answer
Less likely with one sample, but the bar would still catch it. A single sample would pass about 90% of nights, even more likely to hide the bug than the original 65% case. But 20 samples at a 90% true rate still average out to about a 90% pass rate, under the 95% bar, so the graded suite would still block it.
Before you close the answer
Why this works
Tests whether you understand that a model's non-determinism breaks the core assumption behind exact-match testing, and whether you can design a check that's calibrated, not just "more tests" or "no tests."
Follow-up traps
"Isn't running 20 samples a night just expensive and slow for no real benefit?" Response: it costs about 35 minutes and twenty times the model calls, on purpose, because that's what it takes to tell a real 65 percent regression apart from ordinary noise. The alternative is a customer reading the wrong refund date.
"Why not just lower the temperature so answers are more consistent, instead of building a whole new suite?" Response: it doesn't fix the underlying risk. A version bump on the provider's side can still shift the one deterministic answer to a new wrong one, and it makes every customer's reply read the same, which is its own quality cost.
If pressed
The 20-sample size wasn't picked for round numbers. To reliably tell a true 95 percent pass rate apart from a true 80 percent one, at a confidence level worth trusting a ship decision on, you need somewhere close to 15 to 20 samples; fewer than 10 and ordinary sampling noise can make a broken 80 percent case look like a clean pass almost as often as a real 95 percent case does.
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.