The practice that separates working AI systems from stalled ones
There is one habit that reliably distinguishes teams whose AI systems keep
improving from teams whose systems quietly decay: they have a fixed set of cases
with known correct answers, and they score against it before every change.
Everything else follows from that. You can compare two prompts. You can evaluate a
new model version in an afternoon. You can give a compliance reviewer a number
rather than a reassurance. You can detect that a change made things worse before
your customers do.
Teams without it are not merely less rigorous — they are structurally unable to
improve, because no change can be shown to be an improvement.
Why the cases must come from your own history
Synthetic evaluation cases test the situations you thought of. Your real traffic
contains the situations you did not, which is precisely where systems fail.
Support transcripts, resolved tickets, historical documents, completed
applications — these are labelled datasets that already exist inside your company.
Turning a few hundred of them into an evaluation set takes roughly a week of
adjudication with someone who knows the process. Include the awkward ones. Include
the ones a human got wrong, labelled with what the right answer was.
Synthetic cases still have a place: they cover rare paths that history is too thin
on. They are the supplement, not the foundation.
Judge validation, or you are measuring nothing
For open-ended output, scoring usually means asking a model to grade the answer
against a rubric. This works, and it is easy to do badly.
An unvalidated judge produces confident numbers that correlate with nothing. Before
trusting one, we have humans label a sample, measure the judge’s agreement with
those labels, and iterate on the rubric until agreement is high enough to be
useful. If the judge disagrees with your experts, the rubric is wrong — and until
that is fixed, the score is one model’s opinion of another model’s output.
Gate the deploy
Evaluation that runs manually gets skipped under deadline pressure. The version
that survives contact with a real team runs automatically on every pull request
and blocks the merge when a category score drops beyond threshold.
This is not a novel idea — it is exactly how you already treat unit tests. The
only reason AI changes are commonly exempt is that the tooling arrived later.
Then watch production, because it drifts
An evaluation suite reflects the traffic that existed when it was built. Six months
later, real usage has moved: new question types, changed documents, different user
behaviour.
So live traffic gets sampled and scored continuously, and the drift feeds back into
the suite. The alerting that matters is on score drift and refusal-rate change, not
on exceptions — because the failures that hurt most are the ones that return a
perfectly well-formed wrong answer.