THIS EXPLANATION
THE ROOM
CDA·86 Computing, Data & AI 7 MIN · 8 STATIONS

Evaluation suites

A Socratic walk-through of evaluation suites — reasoned out one step at a time, not lectured.

abcdefgh
a

The question we started with

THE QUESTION #

Why can you not tell whether a change improved an AI system by simply trying it?

You change a prompt. You run it on the example that was bothering you. The output is better. You ship.

Nothing about that sequence feels wrong — it is exactly how we debug ordinary software, and there it works. So I want to ask what is different here. In a normal program, the failing input either fails or it does not, and after the fix it does not, and you are done. What has changed about the system that makes the same procedure stop being evidence?

b

Reasoning it through

REASONING #

Start with the most uncomfortable property. Run the same prompt twice through a modern serving stack and you may not get the same answer. Some of that is deliberate — sampling at a non-zero temperature is random on purpose. But even with greedy decoding, outputs can differ between runs, because the arithmetic on a GPU is done in an order that depends on how requests happened to be grouped into a batch, and floating-point addition is not associative. Change the batch composition, change the last bits, occasionally change the chosen token, and from there the whole continuation.

So before you have changed anything at all, your single observation already has noise in it. What does that do to a before-and-after comparison of one example?

It destroys it, and in a specific way worth naming. You are trying to detect a small effect using a sample of one, drawn from a distribution you have not characterised. If the system gets that example right sixty per cent of the time, then a "before" failure and an "after" success is an event with probability around a quarter even if your change did nothing whatsoever. You have not measured an improvement; you have observed a coin.

Now the second problem, which is worse because it is silent. Suppose the change genuinely does help that example. What did it do to the other cases — the ones you did not look at? In ordinary code, the blast radius of an edit is bounded by what the edit touches. A prompt has no such structure: every instruction interacts with every input. Telling the model to "always cite the source document" fixes the ungrounded answers and, quite plausibly, breaks the cases where no source exists and it now invents one. You would never see it, because you were looking at your example.

That is the shape of the thing: high variance in each measurement, and unbounded coupling between behaviours. Which suggests what remedy?

Two, and they are different. Against the variance, you need repetition — the same case run several times, so you are comparing rates rather than outcomes. Against the coupling, you need breadth — many cases, chosen to cover the behaviours you care about, including the ones you are not currently worried about. A suite is what you get when you insist on both at once, and then insist on running it unchanged for every candidate change so the comparisons are like-for-like.

One honest caveat: nothing here promises a suite is right. A suite is a sample of the world, and the world moves. It tells you whether you got better on the cases you thought to write down — which is enormously more than one example tells you, and considerably less than "better".

c

The analogy

THE ANALOGY #
THE FIGURE

Think of a doctor judging a blood-pressure drug from a single patient who felt better after taking it. Blood pressure varies with the hour, the cuff, the walk to the clinic, and whether the patient was nervous — so a single lower reading is compatible with the drug working, and equally compatible with it doing nothing at all. This is why trials exist: many patients, measured repeatedly, on a protocol fixed in advance, so that the signal has somewhere to stand out from the wobble.

WHERE IT BREAKS DOWN

a trial can randomise patients into treatment and control and thereby handle causes nobody thought of, whereas an evaluation suite only ever contains cases someone chose to write, so it is blind by construction to the failure mode you never imagined.

d

Clarifying the model

THE MODEL #

It helps to see that a suite is doing two different jobs that people run together.

The first is regression detection: did anything that used to work stop working? This is the job most like ordinary testing, and it is where the value is highest and the argument least contested. It wants breadth and stability far more than it wants sophistication — a large set of ordinary, boring cases with cheap automatic checks catches more real damage than a small set of hard ones.

The second is measuring quality, and that is genuinely hard, because for most interesting outputs there is no single correct string. So the checks come in tiers: exact match or a schema validation where the task has a right answer; a programmatic property check where it has a rule but not an answer ("cites a real document ID", "returns valid JSON", "never names a competitor"); a model grading the output where nothing else will do. Each tier down is cheaper to write and less trustworthy, and the model-graded tier has its own bias that must itself be checked against human labels on a sample.

Two misconceptions to correct gently. First, a suite is not primarily about a headline score — the number is nearly meaningless in isolation, and useful almost entirely as a difference between two versions run the same way. Second, more cases is not automatically better: a suite so slow that people stop running it before shipping has a measured value of zero, which is why teams usually keep a fast subset for every change and the full set for releases.

And the failure to watch for is the one you cause yourself. Once a suite becomes the thing you optimise against, you will, over many iterations, fit to it — your changes start passing the suite without generalising. The standard defence is to hold back cases the tuning process never sees, and to refresh the set with real production failures as they arrive.

e

A picture of it

THE PICTURE #
Evaluation suites
Evaluation suites the horizontal axis is how much of the behaviour space you sampled; the vertical is how much of the run-to-run randomness you averaged out. The bottom-left quadrant, marked as anecdote, is where "I tried it and it looked better" lands. Moving right protects against the change quietly breaking something you were not looking at; moving up protects against mistaking noise for improvement. Only the top-right quadrant supports the sentence "this version is better" -- the other two corners each fix one of the problems and leave the other untouched. {"generator":"[email protected]","source":"../Socrates/.diagram-cache/_src/evaluation-suites.md","sourceIndex":1,"sourceLine":4,"sourceHash":"1e2b3e469e60ec3dcde0a8deaaed417020bd3bf2f245b3b255ea58e1f98bfdd5","diagramType":"quadrantChart","layoutVariant":"source","repairedDuplicateIds":[],"motion":"entrance-with-reduced-motion-fallback","presentation":"editorial","attempt":1,"viewBox":{"x":0,"y":0,"width":720,"height":621},"qa":{"passed":true,"findings":[]}} Supports a claim Q1 Noise handled only Q2 Anecdote Q3 Coverage only Q4 Broad suite with repeats and held-out cases One case run twenty times Broad suite run once Ten hard cases run once A demo to a colleague Trying the example that annoyed you Few cases Many cases Single run each Repeated runs each What a piece of evidence can support

How to readthe horizontal axis is how much of the behaviour space you sampled; the vertical is how much of the run-to-run randomness you averaged out. The bottom-left quadrant, marked as anecdote, is where "I tried it and it looked better" lands. Moving right protects against the change quietly breaking something you were not looking at; moving up protects against mistaking noise for improvement. Only the top-right quadrant supports the sentence "this version is better" — the other two corners each fix one of the problems and leave the other untouched.

f

What became clearer

WHAT CLEARED #
WHAT CLEARED

Trying it is not a weak experiment; it is not an experiment at all, because it lacks both the repetition that separates a real effect from randomness and the breadth that would reveal what the change quietly cost elsewhere. A suite buys those two things, and only those two — it still cannot tell you about the failure nobody wrote a case for, so its cases should keep arriving from production rather than from imagination.

g

Where to go next

ONWARD #
  • How many cases you actually need, and how a confidence interval on a pass rate shrinks with sample size.
  • Model-graded evaluation: where a judge model is reliable, where it is systematically biased, and how to calibrate it against human labels.
  • The relationship between an eval suite and an A/B test in production — what each can see that the other cannot.
h

Key terms

TERMS #
TermWhat it means
Regressiona behaviour that used to be correct and no longer is; the class of damage a suite is best at catching.
Greedy decodingalways taking the highest-probability next token; removes deliberate randomness but does not, on its own, guarantee identical outputs across runs.
Held-out setcases deliberately excluded from the tuning loop, kept as an honest check against fitting to your own suite.
Model-graded checkusing a language model to score another model's output; the most flexible tier of checking and the one that most needs auditing.

Every term the collection defines is gathered in the glossary.

Nearby on the shelf

4