CaseAdvancedDesigning for Uncertainty & Trust / Feedback loops and data flywheels / #8
How do you design feedback that is useful for debugging rather than just scoring?
SPARK the product is Revyn, an AI code-review assistant at Halberd Systems that leaves inline comments on a pull request before a human reviewer looks at it
Halberd Systems is a platform team of twenty-four engineers. Revyn reads every pull request's diff and leaves inline comments flagging likely bugs, risky patterns, and style issues before a human reviewer looks at it. Dario Salgado is the engineering manager who has to decide what happens after someone clicks thumbs down.
The direct answer
Replace the bare thumbs-down with a required, one-tap reason tag, chosen from a short fixed list, captured at the exact line and rule that triggered the flag. A score tells you the model is disliked. A tagged, located reason tells you exactly what to go fix, which is the only kind of feedback debugging actually runs on.
Do this, in order
Make a thumbs-down require a one-tap reason tag, captured with the exact line and rule.Why: a score alone can't tell an engineer where to look, so every negative click starts a guessing session from zero.
Keep the reason list short and fixed, five categories at most, not free text.Why: free text is slow to give under time pressure and nearly impossible to count across hundreds of reports a month.
Leave the bare thumbs-down alone for pure style nits.Why: a trailing-whitespace flag doesn't need a diagnosis, and forcing one there just adds friction with no payoff.
Watch the reason-tag mix, not just the raw thumbs-down count.Why: a spike in one specific reason points straight at which detector is misbehaving, before the overall number even looks unusual.
Hold off on free-text comments and cross-report clustering until the tagged data has real volume.Why: those features need a base of tagged reports to be useful at all, and building them first would be guessing too.
How to answer this, stage by stage
Nobody's grading whether your feedback widget has enough buttons. They're grading whether a report it produces can actually get a bug fixed.
Stage 1
Scope it to one real team
Say it like this
"I'll answer this for Revyn, a code-review assistant at a twenty-four person platform team, where every flagged comment gets a thumbs up or down."
Why this works
Grounds "design feedback for debugging" in one real report someone actually has to act on.
Stage 2
Say your structure out loud
Say it like this
"I'll use SPARK. Situation, payoff, anchor, risk, keep out. The anchor is the actual design decision."
Why this works
Signals a method for what could otherwise sound like a wish list of feedback features.
Stage 3
Ground it in today's workflow
Say it like this
"Before Revyn, a reviewer read the whole diff by hand, left inline comments, and the author fixed them. That's the workflow I'm designing feedback into, not a blank screen."
Why this works
SPARK's situation step, one person, one real task, never a segment.
Stage 4
Name the habit you want to build
Say it like this
"I want engineers to stop guessing why a flag fired, and go straight to fixing it. Right now a thumbs-down starts a Slack thread. It shouldn't need to."
Why this works
The payoff step. The habit you're building is the actual product, not the time saved.
Stage 5
Give the one design decision
Say it like this
"Every thumbs-down requires a one-tap reason, from a short fixed list: wrong location, false positive, style nitpick, needs context, correct but unclear. That's the anchor."
Why this works
This is the direct answer, concrete enough to argue with, not a category of feature.
Stage 6
Prove it survives being wrong
Say it like this
"If Revyn's model gets noisier next quarter, the false-positive tag spikes on its own, pointing straight at which detector broke, instead of just a vague rise in thumbs-down."
Why this works
SPARK's risk step. The anchor still works even when the thing it's watching gets worse.
Stage 7
Say what you're not building yet
Say it like this
"Day one ships five fixed reason tags, no free text, no clustering across reports. Those need volume of tagged data first, or we'd be building on a guess too."
Why this works
Shows judgment instead of a wish list of every feature that sounds nice.
Stage 8
Close on the one line
Say it like this
"A score tells you the model is disliked. A tagged, located reason tells you exactly what to go fix. Debugging needs the second one."
Why this works
Restates the direct answer in one breath, ready for a follow-up.
Let's learn
Halberd Systems' platform team used to review pull requests by hand. A reviewer opened the diff, read it top to bottom, and left inline comments where something looked off. Before Revyn, that took about forty-five minutes per pull request on average.
Revyn now reads the diff first, flagging likely bugs and risky patterns before a human reviewer even opens it. Review time dropped to about eighteen minutes. A thumbs-up or thumbs-down sits under every flag Revyn leaves.
This is the real workflow the feedback widget has to fit into, not a blank screen with a thumbs icon on it.
The turn: the eighteen minutes saved were never the real story. The real story is what happens after a thumbs-down. With no reason attached, every negative click starts a guessing session from zero, usually a Slack message to whoever owns Revyn asking "why did it flag this?"
A thumbs down with no reason attached doesn't report a bug. It reports a mood, and hands someone else the job of guessing what caused it.
Time spent per flagged comment, before and after reason tags
The fixing time barely changed. The guessing time, twelve minutes down to two, is what a located reason actually buys back.
At its worst: engineers tired of unexplained thumbs-down loops start blanket-dismissing Revyn's flags without reading them, and a real hardcoded-credential warning gets waved through with the rest of the noise.
The decision I would take back
We merged "flag a problem" and "explain what's wrong" into one thumbs-down click with no structured reason. That felt fine when Revyn only flagged a handful of comments a week and anyone could just ask in the team channel. It stopped working once Revyn was leaving hundreds of comments a month across the whole team.
What I would leave alone: a bare thumbs-down is still fine for a pure style nitpick, like trailing whitespace. Nobody needs a reason code for that, and forcing one there just adds friction with no debugging payoff.
The lesson: feedback that's supposed to help you fix something has to point somewhere. A single click that only says "no" is a mood, not a bug report, and the moment your feedback volume outgrows a Slack thread, that gap is what breaks first.
Now here is the same thing as a story
The short version above is what you'd say defending this design to Halberd's leadership. Read this one for how the gap actually got found.
Revyn's inline comment box sits right in the pull request view, a small thumbs-up and thumbs-down under every flag it leaves, the same interface any code review tool would have.
For the first few months, that plain widget was enough. Revyn flagged maybe thirty comments a week across the team, and if someone was confused by a thumbs-down, they just asked in the channel and got an answer in minutes.
A score tells you something is wrong. A diagnosis tells you what to go fix. The widget only gave the team the first one.
By month four, Revyn was flagging closer to six hundred comments a month as it rolled out to two more repositories. The habit that had worked fine at thirty comments a week started thinning in three beats: first, people stopped asking in the channel because the questions piled up faster than anyone could answer; then they stopped reading Revyn's reasoning line at all, since it rarely explained itself anyway; then a few engineers quietly started dismissing every Revyn flag on sight, just to keep moving.
The trigger was small: a new hire asked Dario in a one-on-one, "why does everyone just click no on these without reading them?"
Knowledge spark: what's a false positive here?
A case where Revyn flags something as a bug and it isn't one. Without a way to say "this one specifically was a false positive," every thumbs-down looks the same on the dashboard, whether it's a real miss or a false alarm.
Dario pulled a week of thumbs-down clicks and timed how long it took engineers to figure out what each one meant. Twelve minutes of guessing, on average, before anyone even started the actual fix.
Same wrong flag, two different reports. Only one of them tells you where to look.
Twelve of those fifteen minutes were never spent fixing anything. They were spent finding out what the thumbs-down even meant.
Dario's team shipped the anchor: a required one-tap reason, five fixed categories, captured with the exact line and rule that triggered the flag. No free text yet. No cross-report clustering yet. Just enough structure to turn a mood into a location.
Share of thumbs-down comments resolved the same day, by rollout month
The reason tags didn't make Revyn more accurate. They made a wrong flag cheap to explain, which is why same-day resolution climbed on its own.
Run the same new-hire question forward under the new design: nobody blanket-dismisses Revyn anymore, because a thumbs-down now takes two minutes to understand instead of twelve, and the false-positive tag alone tells the platform team exactly which detector needs a look.
I built the plain thumbs widget because it shipped in a day and felt like enough. It took one new engineer's honest question to see that a feedback signal with nowhere to point isn't lightweight. It's just unfinished.
SPARK, the whole anchorNot a feature list. SPARK is what turns "add feedback" into one design decision worth defending.
S
Situation. The job today, without the tool.
A reviewer reads the diff by hand and leaves inline comments. Revyn adds its own flags on top of that same workflow.
Grounds the design in a real task, not an abstract "add a feedback widget" brief.
P
Payoff. The habit worth building.
Engineers stop guessing why a flag fired and go straight to checking or fixing it.
The habit is the product. Time saved is just downstream of it.
A
Anchor. The one decision.
A required, one-tap reason tag from a short fixed list, captured with the exact line and rule.
The hardest step and the direct answer: concrete enough to argue with.
R
Risk. What breaks first if wrong.
If Revyn gets noisier, the false-positive tag spikes visibly, pointing at the exact detector, instead of a vague rise in thumbs-down.
Proves the anchor still works when the thing it watches gets worse.
K
Keep out. What's not built yet.
No free-text field, no cross-report clustering, on day one. Those need volume of tagged data first.
Shows restraint instead of a wish list dressed up as a roadmap.
Four small facts, and together they turn a click into something someone can actually go act on.
The recap, one line per letter: situation is the manual review workflow Revyn sits inside, payoff is engineers who stop guessing and start fixing, anchor is the required, located reason tag, risk is the false-positive spike that survives a worse model, and keep out is the free-text field and clustering held back for later.
And if you want to be sure it really works, try it somewhere elseSame five letters, an AI diagnosis assistant for a veterinary clinic instead of a code review tool. A different desk, the same anchor.
VetLumen suggests likely causes for a pet's symptoms to a veterinarian before they finalize a diagnosis. Chidinma Obi, a veterinarian at a busy clinic, rates each suggestion with a thumbs up or down before moving to the next patient.
Mapped onto SPARK: situation is a vet who already examines the animal and forms her own read before ever opening the suggestion. Payoff is wanting her to stop silently ignoring VetLumen's suggestions once she's seen a few bad ones, and instead flag exactly what kind of miss it was. Anchor is the same shape as Revyn's: a one-tap reason chosen from a short list, wrong species-typical range, missed a symptom in the notes, right condition wrong urgency, rather than a bare thumbs-down. Risk is a future model update that starts over-flagging rare conditions; the "wrong urgency" tag would spike on its own and point straight at the miscalibration, without needing a single vet to write an essay about it. Keep out is the same restraint: no free text yet, since five clinics don't yet produce enough tagged volume to make clustering useful.
The sweet spot is the one quadrant that's both fast enough to actually use and specific enough to act on.
Swap the trigger and it still runs.
Speed: an interviewer caps you at sixty seconds. Say "a required, located reason tag instead of a bare thumbs-down," and stop.
Cost: there's no engineering time to build a full tagging UI before next sprint. Say so honestly, and ship three reason tags instead of five first, since a thin version still beats a bare thumbs-down.
The model gets better, for real: if Revyn's flags get sharper and thumbs-down volume drops overall, the reason tags still earn their keep, since whatever's left over is now the hardest, most worth-debugging remainder.
Where people run it wrong.
They build a free-text box first because it feels more flexible, and end up with hundreds of comments nobody has time to read.
They track the overall thumbs-down rate and miss that one specific reason is spiking underneath a flat-looking average.
They require a reason tag on every single flag, including the trivial nits nobody needed a diagnosis for.
How to use it live. When someone asks how you'd design feedback for an AI feature, ask yourself one question first: if this exact feedback showed up on my desk tomorrow, would I know what to go do with it. If the answer is no, you've designed a score, not a debugging tool.
Day one ships the smallest version that still points somewhere. Everything after that waits for real data to justify it.
Flashcards (tap any card to flip it)
1 · THE FRAMEWORK
What framework fits a "design this feedback mechanism" question?
Tap to flip
ANSWER
SPARK: situation, payoff, anchor, risk, keep out. The anchor is the hardest step and the actual answer.
2 · THE PEOPLE
Who is this answer about?
Tap to flip
ANSWER
Dario Salgado, engineering manager at Halberd Systems, overseeing Revyn's rollout across a twenty-four person platform team.
3 · THE HABIT
What habit did the design need to build?
Tap to flip
ANSWER
Engineers stopping the guessing session after a thumbs-down and going straight to checking or fixing the flagged line.
4 · THE ANCHOR
What's the one concrete design decision here?
Tap to flip
ANSWER
A required, one-tap reason tag from a short fixed list, captured with the exact line and rule that triggered the flag.
5 · THE OLD DECISION
What decision would you take back?
Tap to flip
ANSWER
Merging "flag a problem" and "explain what's wrong" into one bare thumbs-down click, with no structured reason attached.
6 · THE NUMBER
Fill in the blank: guessing time per flagged comment dropped from 12 minutes to ___ minutes after reason tags shipped.
Tap to flip
ANSWER
2 minutes. Fixing time barely changed. The guessing time is what a located reason actually buys back.
7 · THE REPLAY
Same new-hire question, redesigned widget. What changes?
Tap to flip
ANSWER
Nobody blanket-dismisses Revyn's flags anymore, and same-day resolution climbs from 35% to 81% over four months as the tags roll out.
8 · CROSS PRODUCT TRANSFER
Section 4 answers this again for a different product. Which product, and what's the parallel?
Tap to flip
ANSWER
VetLumen's diagnosis suggestions for a veterinarian. Same anchor shape: a short, fixed reason tag instead of a bare thumbs-down.
Check yourself Score: 0 / 0
Multiple choice
1. Why does a bare thumbs-down fail as debugging feedback, specifically?
A. Because engineers dislike clicking buttons.
B. Because it gives no location and no reason, so every negative click starts a guessing session from zero.
C. Because Revyn's model needs to be retrained more often.
D. Because thumbs-down clicks are rare and don't matter much.
Show hint
Look at what the anchor step actually adds that a bare thumbs-down lacks.
Show answer
B. A score with no location or reason tells you something is disliked, not what to go fix.
True or false
2. True or false: this answer's anchor is to add a free-text comment box under every Revyn flag.
True
False
Show hint
Look at "keep out," what's deliberately not built on day one.
Show answer
False. Free text was rejected as the day-one anchor because it's slow to give and hard to aggregate. The anchor is a short, fixed, tappable reason list.
Fill in the blank
3. Fill in the blank: same-day resolution of thumbs-down comments climbed from 35% in month 1 to ___% by month 4.
Show hint
Look at the line chart tracking rollout months.
Show answer
81%. The reason tags didn't change Revyn's accuracy. They made a wrong flag cheap to explain, which is what drove the climb.
Short answer, where it wouldn't matter
4. Name one kind of Revyn flag where a bare thumbs-down, with no reason tag, is still fine.
Show hint
Look at "what I would leave alone."
Show answer
Model answer: A pure style nitpick, like trailing whitespace. There's nothing to diagnose, so a reason tag there is friction with no debugging payoff.
Short answer, apply it yourself
5. Think of a tool at work that only ever gives you a score, never a reason. What would the single most useful reason tag be, if it could only add one?
Show hint
Ask what you usually end up guessing about, and turn that exact guess into a fixed option.
Show answer
Model answer: Most scoring-only tools share this same gap. The single best tag is almost always whichever guess you find yourself making most often by hand.
Multiple choice
6. If Revyn's underlying model gets noisier and starts over-flagging, what's the first sign this feedback design would surface?
A. The overall thumbs-down count would look completely unchanged.
B. The "false positive" reason tag specifically would spike, pointing at which detector is misfiring.
C. Engineers would need to write a full incident report before anyone noticed.
D. Nothing would surface until the next full model retraining cycle.
Show hint
Look at the risk step, "the day it's wrong."
Show answer
B. The tagged reason itself is the early warning. A spike in one specific category shows up before the raw thumbs-down number even looks unusual.
Before you close the answer
Why this works
Tests whether you can design a feedback signal that produces an actionable next step, not just a mood, and whether you know which detail to skip on day one.
Follow-up traps
"Doesn't a required reason tag slow engineers down?" Response: it's one extra tap, and it replaces a twelve-minute guessing session with a two-minute confirmation, so the net time cost goes down, not up.
"What if five categories aren't enough to describe every kind of miss?" Response: an "other" category with no forced detail still beats no structure at all, and the tag list can grow once real volume shows which categories are actually missing.
If pressed
The real rollout tied each reason tag to the specific detector rule ID that fired, not just a general category, so a spike could be traced to one rule inside Revyn's rule set, not just "code quality flags" in general.
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.