Skip to content
BinaryScaler

AI Engineering

Write the eval before you write the prompt

Teams get stuck on LLM features for one structural reason: they cannot tell whether a change made things better. The fix is unglamorous and it is not a better model.

Written by
Sam Okonkwo · Head of AI Practice
Published
18 June 2026
Reading time
8 minutes

There is a specific way LLM projects stall. The demo works. Somebody changes a prompt to fix a reported failure. Something else breaks, quietly, and nobody notices for two weeks. After a few rounds of this, the team stops changing anything — and a feature nobody dares to modify is a feature that is finished, whether or not it is any good.

The missing piece is not a better model, a bigger context window or a fashionable framework. It is the ability to answer one question in under a minute: did that change make the system better or worse?

An eval suite is a test suite that tolerates ambiguity

Conventional tests assert exact equality. Language model outputs vary, so the assertion has to move up a level: not 'the output is this string' but 'the output cites a source that supports the claim', or 'the output refuses when the retrieved context is empty'.

That is harder than a unit test and considerably easier than people assume. Most of the value comes from thirty to fifty carefully chosen examples, not from thousands.

  • Cases that currently work, so you notice when they stop
  • Cases that currently fail, so you can tell when a change fixes them
  • Adversarial cases — prompt injection, out-of-scope questions, empty retrieval
  • Boring cases, which is where most real traffic actually lives

Grade the parts, not just the whole

A wrong answer has at least three possible causes: retrieval returned the wrong context, the model reasoned badly over correct context, or the output format broke downstream parsing. A single end-to-end score cannot distinguish them, so it cannot tell you what to fix.

Score retrieval separately — did the correct document appear in the top k? — and you will usually find retrieval is the problem. That is good news, because retrieval is far cheaper to improve than reasoning.

Put it in CI on day one

An eval suite run manually before releases becomes an eval suite run before some releases, and then before none. In CI, with a threshold that fails the build, it stays honest.

# Fail the build when quality regresses
- name: Run evals
  run: pnpm eval --suite golden --min-score 0.82

The threshold matters less than its existence. Set it just below current performance and raise it as the system improves.

What this buys you

Model portability, mostly. When a new model arrives, you run the suite and get a number within the hour instead of a fortnight of vibes-based comparison. Teams with eval suites upgrade models routinely. Teams without them are still running whatever they launched on, because nobody can prove a change would be safe.

You cannot improve what you cannot measure, and with language models you cannot even tell whether you have broken it.

Sam Okonkwo
  • llm
  • evaluation
  • ai

Author

Sam Okonkwo

Head of AI Practice

Builds evaluation-first LLM systems and spends most of the time saying no to fine-tuning.

Meet the team

Want this applied to your system?

We will take a look at what you are running and tell you which of the above is worth doing first.