Artifact critiqueIntermediateEval-Driven Specification / Acceptance criteria for non-deterministic output / #4

Write acceptance criteria for an AI feature that extracts fields from an invoice.

The direct answer
Don't write one blended accuracy number as the acceptance bar. Set a target for every required field, tighter for the money fields than for a field like the PO number, then compute a separate whole-invoice pass rate as the product of all of them, because one invoice needs every field right, not just most fields on average. Give both as ranges, and name which field's accuracy would swing that whole-invoice number the most before you ship.
Do this, in order
  1. Replace the single blended accuracy number with two numbers: a target for every required field, and a computed whole-invoice pass rate.Why: one flat percentage hides which field is failing and lets a bar look met while every real invoice still needs checking.
  2. Set the tightest accuracy band on the fields tied to money, total, tax, subtotal, and a looser one on a field like the PO number.Why: a wrong total gets paid or disputed; a wrong PO number gets flagged and fixed by a person.
  3. Compute the whole-invoice pass rate by multiplying every required field's accuracy together, never by averaging them.Why: an invoice fails the moment any one required field is wrong, so the real pass rate is always lower than any single field's own number.
  4. Give both numbers as a range, and check that range against how many invoices a bookkeeper would actually open and fix by hand in a week.Why: a range that looks fine on a spreadsheet can still mean someone hand-correcting dozens of invoices.
  5. Name the one field whose accuracy swings the whole-invoice pass rate the most, and put it in the criterion by name.Why: it's rarely the field that looks highest-stakes, and a bar that doesn't say so gets watched in the wrong place.
  6. Require a flag-to-human fallback on the weakest field instead of a silent guess.Why: a field that's wrong and confident does more damage than a field that's wrong and known to be shaky.

How to answer this, stage by stage

Seven moves. The trap is naming one confident percentage that hides seven different fields, each with its own way of going wrong.

1
Scope it to one real spec
Say it like this
"Let's scope this. Say I'm the product lead on Capture, the invoice and receipt extraction feature inside Runwell, a bookkeeping tool for small businesses. Someone already wrote the acceptance bar as one line: field extraction has to be at least ninety-nine percent accurate. I'm rewriting that line."
Why this works
Grounds the critique in one real artifact instead of a general lecture on accuracy targets.
2
Say what the naive bar can't tell you
Say it like this
"That line doesn't say which fields it's counting, and it doesn't say what a whole invoice needs to look like to pass. That's the level a bookkeeper actually has to trust before she approves a payment."
Why this works
Shows the interviewer you can critique a flawed artifact, not just replace it on faith.
3
Break it into its two real numbers (B)
Say it like this
"There are really two bars hiding inside one number. One: how accurate is each required field on its own. Two: what share of whole invoices come through clean, meaning every one of those fields landed right on the same document."
Why this works
This is the whole method. An estimate with no visible equation is a guess in a confident voice.
4
Own a real target per field, split by stakes (O)
Say it like this
"Total, tax, and subtotal are money fields, so I'd hold them to ninety-nine to ninety-nine point five percent. Invoice date and invoice number sit around ninety-eight. Vendor name at ninety-seven. And PO number, usually stamped or handwritten in a corner, at ninety-five, because that's the field the model actually struggles with."
Why this works
Names the assumption out loud instead of hiding it inside one round number.
5
Give both as a range, run the invoice-level math (U)
Say it like this
"Multiply all seven together instead of averaging them, and the whole-invoice pass rate lands around eighty-six percent, somewhere between seventy-three and eighty-nine depending on which end of each field's range shows up that week. That's not ninety-nine invoices out of a hundred clean. It's closer to one in seven needing a person."
Why this works
A range beats false precision, and it says plainly how far off "sounds accurate" actually is.
6
Sanity check it against a real week (N)
Say it like this
"Does eighty-six percent survive a smell test? One client sends about sixty invoices a week. At eighty-six percent, that's roughly eight a week landing in the bookkeeper's queue, about four minutes each to fix. Real, but survivable. At seventy-three, the low end, it's closer to seventeen a week, and that's where I'd stop and ask why before shipping."
Why this works
Proves the number was checked against a felt cost, not just arithmetic on a slide.
7
Name the swing field, close on the line for the spec (D)
Say it like this
"So the criterion reads: seven fields, each with its own target, whole-invoice pass rate seventy-three to eighty-nine percent, and PO number is the field to watch first, because its own range swings that whole-invoice number more than twice as much as any other field, including the total."
Why this works
Ends on a sentence someone could paste straight into the spec, not a vibe about "accurate enough."
If you remember one thing A blended accuracy number is not an acceptance bar. Multiply the fields, don't average them, and name which one you'd watch first.

Let's learn

Here's what happens when one confident percentage in a spec meets an invoice that needs seven different things to go right at once.

Say Runwell, a bookkeeping tool for small businesses, ships a feature called Capture. Point a phone at an invoice, or forward it by email, and Capture reads it: vendor name, invoice date, invoice number, subtotal, tax, total, and PO number. Seven fields, every time, before the invoice can post to a client's books.

Before Capture, a bookkeeper typed all seven fields into the ledger herself, for every invoice, from every client. About five minutes each. A bookkeeper carrying five small-business clients might key sixty invoices a week. That's five hours gone before she's touched anything else on her list.

Knowledge spark: what is a whole-invoice pass rate? The share of invoices where every required field came out right, not just the average across all fields pooled together. One wrong field, out of seven, is enough to fail the whole document.

The acceptance bar the team wrote before launch was one line: field extraction must be at least 99% accurate. Pooled across every field on every invoice, Capture landed at 98%, close enough to the line that nobody questioned it.

# measured, per field, pooled across a real month of invoices
Total amount: 99.9%
Tax amount: 99.8%
Subtotal: 99.8%
Invoice date: 99.6%
Invoice number: 99.5%
Vendor name: 99.4%
PO number: 88.0%

# pooled average across all seven (what the dashboard showed)
98.0%

# whole-invoice pass rate (multiplied, not averaged)
0.999 × 0.998 × 0.998 × 0.996 × 0.995 × 0.994 × 0.880 ≈ 86.2%
The build-up: six fields barely move it, the seventh drops it off a cliff
Start
100.0
After total (99.9%)
99.9
After tax (99.8%)
99.7
After subtotal (99.8%)
99.5
After invoice date (99.6%)
99.1
After invoice number (99.5%)
98.6
After vendor name (99.4%)
98.0
After PO number (88.0%)
86.2
Each field, multiplied in PO number, the field that breaks it
Six fields together only cost 2.0 points, from 100.0 down to 98.0. One field, PO number, costs 11.8 points on its own. That single step is the whole story.
We didn't promise ninety-nine invoices out of a hundred would come through clean. We promised ninety-nine percent of fields, and an invoice needs seven of them.

Here's what that cost at its worst. Capture was built to auto-post any invoice above a confidence threshold, and the model was often confident and wrong on stamped PO numbers, not unsure and cautious about them. One invoice from Trellwood Supply, a Runwell client, posted against a PO number that had already been closed on a different order. Nobody caught it until the monthly reconciliation, and a real vendor payment sat a week behind schedule while the accountant untangled it.

The choice I would take back. Writing the bar as one blended number, 99% accurate, instead of a target per field plus a computed whole-invoice pass rate. That was a reasonable shortcut before launch, when the only test set was fifty clean demo invoices and every field behaved about the same. It stopped being reasonable the day a client with stamped, handwritten PO numbers started sending sixty invoices a week.

What I would leave alone. The memo field, the free-text line some vendors add about a return policy or a thank-you note, doesn't need any of this. Nobody reads it before approving a payment, so it can be wrong constantly and nothing downstream breaks. Save the rigor for the fields that actually gate whether an invoice posts.

The lesson. A percentage that sounds strict, ninety-nine, can still mean seven separate ways to fail on the same document. If the bar doesn't say what a whole passing invoice looks like, it isn't really a bar yet.

Now here is the same thing as a story

The short version is above. Read on if you want to feel why a closed purchase order almost cost Runwell a client.

Rosalind Fenn can read a spec and find the one sentence doing too much work before anyone else in the room notices it's there. She's been the product lead on Capture, Runwell's invoice and receipt extraction feature, since before it had a name, back when it only worked on the handful of demo invoices the team had scanned themselves.

She wrote the acceptance bar herself, the week before launch: field extraction must be at least 99% accurate, checked against fifty vendor invoices the team had gathered for the demo. Clean scans. Typed fields, mostly. A PO number here and there, usually printed, never stamped.

A vendor invoice on a desk with seven fields labeled and leader lines pointing to each: vendor name, invoice date, invoice number, subtotal, tax, total marked as highest stakes, and PO number marked as stamped by hand
Seven fields hiding inside one number. On the demo set, none of them behaved differently from the rest.

For a year, that bar did its job. Runwell's early customers were small operations with a handful of vendors each. Capture hit 99% and stayed there. Rosalind checked the dashboard once a month, saw the number holding, and moved on to the next thing on her roadmap.

Then Runwell signed Trellwood Supply, a regional building-supply chain with sixty invoices a week and a purchasing department that still stamped its PO number in the corner of every vendor invoice by hand, the way it always had.

Noemi Salgado is the bookkeeper who runs Trellwood's books inside Runwell, along with four smaller clients. For the first two weeks, Capture looked fine. The dashboard still said 98%. She barely opened a flagged invoice.

Then a payment got stuck. A vendor called Trellwood's office asking why a $4,200 order hadn't been paid. Noemi pulled it up. Capture had posted it weeks earlier, against a PO number that had already been closed out on a different order. The model had read the stamp with total confidence. It was wrong.

She dug through the last month's invoices. Eleven more, same pattern. All against Trellwood, all PO number misreads, all posted with nothing flagged for review, because Capture's confidence threshold had never been tuned to catch a field it was consistently, wrongly sure about.

Here's the turn. Capture never stopped hitting its number. The dashboard was telling the truth the whole time. What the dashboard couldn't say was that the small share it was missing wasn't spread evenly across seven fields. It was landing, again and again, on the one field that decided whether an invoice matched the right purchase order.

We didn't promise ninety-nine invoices out of a hundred would come through clean. We promised ninety-nine percent of fields, and an invoice needs seven of them.

Monday morning, Rosalind pulled the original bar she'd written herself, a year earlier. One line: 99% accurate. No mention of which fields, no mention of what a passing invoice actually required.

She rewrote it as seven fields, each with its own target and range, and a whole-invoice pass rate underneath all of them: 86% at the point estimate, 73 to 89% depending on which end of each field's range showed up on a given week. And one line flagged in bold: PO number is the field to watch, because its accuracy swings that whole-invoice number more than any other field, more than the total itself.

Trellwood's purchasing department switched to a printed PO number on new orders within a month, at Rosalind's request, and Capture's fallback started sending any stamped PO number below its new, tighter confidence bar straight to Noemi's queue instead of guessing. Six weeks later, Trellwood's flagged queue settled at about six invoices a week, caught and fixed, not swallowed silently into a wrong posting.

The part I'd go back and tell myself: I wrote down how accurate it needed to be. I never wrote down what a whole invoice needed to look like to actually pass.

BOUND, sized to Capture's acceptance bar

This is a sizing question wearing a critique's clothes, so BOUND fits and FLIPS doesn't. Nobody's habit snapped here. A number that was true on average quietly stopped describing the thing it was supposed to guarantee.

Number line marking a 73 percent low bound, an 86 percent point estimate, and an 89 percent high bound for the whole-invoice pass rate, with a note that at the point estimate about 8 invoices a week land in a bookkeeper's queue by hand
The range against a felt cost. Both bounds sit close enough to what one bookkeeper can absorb, until the low end.

B, break it down. Whole-invoice pass rate equals every required field's accuracy multiplied together: vendor name times invoice date times invoice number times subtotal times tax times total times PO number. Not their average.
O, own the numbers. Total, tax, and subtotal, the fields tied to money, sit at 99 to 99.5 percent. Invoice date and invoice number sit at 98. Vendor name at 97. PO number at 95, the field that's usually stamped or handwritten and the one the model struggles with most.
U, use a range. Multiplied together, that's 86 percent at the point estimate, 73 to 89 percent depending on which end of each field's own range shows up in a given week.
N, nail the sanity check. Trellwood sends about 60 invoices a week. At 86 percent, that's roughly 8 a week landing in Noemi's queue, about 4 minutes each. Real, but survivable. At 73 percent, the low end, it's 17 a week, over an hour just for one client, and that's the point where I'd delay a launch, not ship it.
D, direction. PO number's own range swings the whole-invoice pass rate by about 6.4 points, more than double vendor name's 3.1, the next closest, and more than ten times total amount's 0.6, even though total amount is the field everyone assumes matters most because it's the money. The field to watch first is rarely the one that sounds highest-stakes.

What moves the whole-invoice pass rate most, if a field lands at the shaky end of its range
PO number, usually stamped or handwritten±6.4 pts
Vendor name, OCR against varied logos±3.1 pts
Invoice number, free-form per vendor±2.2 pts
Invoice date, many formats in the wild±1.8 pts
Tax amount (subtotal moves the same)±1.3 pts
Total amount, the field with the most money riding on it, swings the total by only 0.6 points, the smallest of all seven, because its own accuracy band is the tightest. The field worth watching is the shakiest one, not the priciest one.
What I would leave alone The memo field doesn't need any of this. Nobody checks it before a payment posts, so it can be wrong constantly and nothing downstream breaks. Save the rigor for the fields that actually gate whether an invoice passes.

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

Basalt Diagnostics builds the software labs use to read a paper requisition form, patient ID, date of birth, ordering physician, test code, priority flag, specimen type, before a blood sample ever reaches a machine. The same one-number trap shows up wearing a different coat.

B, break it down. Whole-requisition pass rate is the product of six required fields, not their average.
O, own the numbers. Patient ID sits at 99.8 percent, because it's barcode-assisted, not typed. Date of birth at 99.5. Test code at 98. Priority flag at 99. Specimen type at 96. Ordering physician's NPI number, a ten-digit code usually handwritten on the form, at 97.
U, use a range. Multiplied together, about 90 percent at the point estimate.
N, nail the sanity check. Perrin Vasquez, Basalt's eval lead, checked that number against how many requisitions a lab tech already re-keys by hand on a busy morning, and 90 percent landed close to what techs already tolerated without complaint.
D, direction. Here the swing field isn't the safety-critical one. Patient ID is barcode-scanned and barely moves, about 0.4 points across its whole range. The physician's NPI number, handwritten and free-text, swings the total by about 6.5 points, nearly the entire gap between a comfortable pass rate and an uncomfortable one.

The old decision Basalt would take back is a cousin of Rosalind's, not a copy of it. Runwell had merged seven fields into one blended number. Basalt had picked one flat target, 97 percent everywhere, and applied it to a barcode-scanned field and a handwritten one alike. Same mistake, wearing a different shirt: treating fields that behave nothing alike as though a single number could describe both.

Swap the trigger and it still runs.
Speed: an interviewer wants a usable bar before the meeting ends. Same seven fields, same equation, PO number's target stated as a range instead of researched to the decimal, tightened once real client data exists.
Cost: engineering caps how much review capacity goes to flagged PO numbers. Same equation, solved backwards: at that fixed budget, the achievable pass rate falls from 86 toward 82 percent, so the flagged-queue estimate has to grow to match, not get quietly ignored.
The model got better: a new OCR model cuts vendor-name errors in half, from 97 to about 98.5 percent. The whole-invoice number only moves from 86 toward about 88, a small gain, well short of what fixing PO number alone would buy. Fixing a field that isn't the sensitive one buys less than it sounds like it should.

Where people run it wrong.
They write one blended number because it reads clean in a slide, and have no way to say which field to check when a real invoice fails.
They average field accuracy instead of multiplying it, so the bar always sounds better than the invoice-level reality behind it.
They chase the field that looks highest-stakes, usually the dollar amount, instead of the field that actually swings the total most, which is often the one nobody's watching.

How to use it live. Say the equation out loud before naming a single number: list the required fields, say you're computing a pass rate as a product, not an average, and that a real target needs a range once you know which field is shakiest. That buys thinking time and tells the interviewer a real number is coming, not a guess dressed up as one.

Flashcards (click a card to flip it)

1 · THE FRAMEWORK
Which framework fits a question asking you to turn a vague accuracy target into acceptance criteria, and why not FLIPS?
Tap to flip
ANSWER
BOUND. This is arithmetic behind a spec, per-field targets multiplied into a whole-invoice pass rate, not a habit that snaps.
2 · THE PERSON
Who is this answer about?
Tap to flip
ANSWER
Rosalind Fenn, product lead on Capture, Runwell's invoice and receipt extraction feature. She wrote the original one-line accuracy bar herself, before launch.
3 · WHAT THE NUMBER HID
What did Capture's single, pooled accuracy number hide?
Tap to flip
ANSWER
That PO number sat at 88 percent while every other field sat above 99. Pooled together the average still read 98, close enough that nobody questioned it. Multiplied together, because an invoice needs every field right, the real whole-invoice pass rate was 86 percent.
4 · THE EQUATION
State the whole-invoice pass rate equation in one line.
Tap to flip
ANSWER
Whole-invoice pass rate equals every required field's accuracy multiplied together: vendor name times invoice date times invoice number times subtotal times tax times total times PO number, not their average.
5 · THE OLD DECISION
What decision would you take back, and why did it make sense at the time?
Tap to flip
ANSWER
Writing the acceptance bar as one pooled number instead of a target per field plus a computed whole-invoice pass rate. It made sense before launch, when the only test invoices were fifty clean demo scans that all behaved about the same.
6 · THE NUMBER
Fill in the blank: multiplied field by field, Capture's real whole-invoice pass rate under the old bar came out to about ______ percent, even though the pooled average read about ______ percent.
Tap to flip
ANSWER
About 86 percent, not 98 percent. Six fields above 99 percent times PO number's 88 percent, multiplied instead of averaged, land far below any single field's own number.
7 · THE REPLAY
Same Trellwood volume, new bar. What changes?
Tap to flip
ANSWER
PO number gets a tighter confidence threshold and a flag-to-human fallback instead of a silent guess. Six weeks later, Trellwood's flagged queue settles at about six invoices a week, caught and fixed, not swallowed silently into wrong postings.
8 · CROSS-PRODUCT TRANSFER
Section 4 answers this same question again for a different product. Which product, and which field swings its whole-requisition pass rate the most?
Tap to flip
ANSWER
Basalt Diagnostics' lab requisition form. The ordering physician's handwritten NPI number, not the barcode-scanned patient ID, swings the total the most.

Check yourself Score: 0 / 0

Fill in the blank
1. Multiplied field by field, not averaged, Capture's whole-invoice pass rate under the old bar worked out to about ______ percent, even though the pooled field accuracy read about 98 percent.
Show hint
Multiply all seven fields' measured accuracy together, don't average them.
Show answer
About 86 percent. 0.999 x 0.998 x 0.998 x 0.996 x 0.995 x 0.994 x 0.880 = about 0.862, or 86.2 percent.
True or false
2. True or false: because Capture's pooled field accuracy read about 98 percent the whole time, the acceptance bar was working as intended.
  • True
  • False
Show hint
Compare the pooled average to the whole-invoice pass rate, not to itself.
Show answer
False. The bar pooled all seven fields into one average. PO number sat at 88 percent while the rest sat above 99, and multiplying all seven together, because one invoice needs every field right, produced a real whole-invoice pass rate closer to 86 percent, not 98.
Multiple choice
3. According to the sensitivity chart, which field's own low-to-high range swings the new target's whole-invoice pass rate the most?
  • A. Total amount, because it's the highest-dollar field.
  • B. Invoice date, because dates come in many formats.
  • C. PO number, because it's usually stamped or handwritten.
  • D. Vendor name, because OCR struggles with logos.
Show hint
Look at which bar on the sensitivity chart is longest, and whether that field is inside or outside the team's easy control.
Show answer
C. PO number's range swings the total by about 6.4 points, more than double vendor name's 3.1 and about ten times total amount's 0.6, even though total amount is the field with the most money riding on it.
Short answer
4. What old decision does this answer take back, and why did it make sense when it was made?
Show hint
Look at how the original bar was written, and how varied the test invoices were at the time.
Show answer
Model answer: Writing the acceptance bar as one pooled "99% accurate" number instead of a target per field plus a computed whole-invoice pass rate. It made sense before launch, when the only invoices to test against were fifty clean demo scans that all behaved about the same, so pooling didn't yet hide anything.
Short answer, apply it yourself
5. Pick an AI feature you've used that claims a single accuracy number, a spam filter, a spell-checker, a photo tagger. If it needs to get several things right at once to actually be useful to you, what would you want broken out before trusting that one number?
Show hint
Think about how many separate things have to be right together before the feature actually saves you work, not just on average.
Show answer
Model answer: The accuracy of each separate thing it has to get right together, multiplied into one number for how often the whole result is usable, not just how often any single part of it is correct. A 95 percent accurate spam filter making five decisions per email is not 95 percent of your inbox handled cleanly.
Fill in the blank
6. If PO number's accuracy improved from 88 to 95 percent, with the other six fields unchanged at their old measured levels, Capture's whole-invoice pass rate would rise from about 86 percent to about ______ percent.
Show hint
Take the six-field product before PO number is applied, 98.0 percent, and multiply in 95 percent instead of 88.
Show answer
About 93 percent. 98.0 percent times 0.95 is about 93.1 percent, a seven-point jump from fixing the one field that was dragging the whole number down.
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