← All writing
Evaluation · 5 min read · 16 Aug 2026

Evaluation Harnesses for Prompts: Treat Them Like Models

A change in wording is still a change in behaviour. If you would not ship a new model without evaluation, you should not ship a new prompt without it either.

Cover image for the article: Evaluation Harnesses for Prompts: Treat Them Like Models

Why this matters

Somewhere along the way, prompts came to be treated as second-class artefacts. Teams that would never dream of swapping a model checkpoint without running a full evaluation suite will happily rewrite a system prompt, tweak a few instructions, or add a new example, and ship it the same afternoon based on a handful of manual checks. This asymmetry does not make sense, because a prompt is part of the system that produces the output. Change the prompt and you have changed the function being computed, in the same way that changing weights does.

The reason this gets overlooked is psychological rather than technical. A new model feels like a new object, something with a version number and a training run behind it, so it earns scrutiny. A prompt edit feels like editing a sentence, something closer to copywriting than engineering. But from the point of view of the system's behaviour, there is no meaningful difference. Both are interventions that change inputs to a fixed inference process and both can move accuracy, safety, latency, and cost in ways that are not obvious from reading the diff.

Once you accept that framing, the natural next step is to ask what discipline we already apply to model changes and whether it transfers. It mostly does, with a few prompt-specific wrinkles worth calling out.

What a harness actually needs

A proper evaluation harness for model changes usually has three ingredients: a held-out test set that the change has never seen, a fixed set of metrics that reflect what actually matters for the task, and a comparison protocol that reports not just the new score but the delta against a documented baseline. Prompts need exactly the same three things, and skipping any one of them is where teams get burned.

Take a customer support classifier built on an instruction-following model, where the prompt describes categories and gives a few worked examples. Suppose someone rewrites the instructions to be clearer, reordering the category list and tightening the wording. On a manual spot check of ten tickets, the new prompt looks better: the outputs read more naturally and two previously mislabelled tickets are now correct. It gets merged. Two weeks later, aggregate accuracy on the full weekly batch has dropped from around ninety two per cent to eighty six per cent, because the reordering pushed a rare but high-volume category further down the list, and the model started defaulting to the first plausible category more often under time pressure in longer tickets. Ten examples were never going to reveal that; a held-out set of a few hundred tickets, stratified by category frequency, would have caught it before deployment.

This is the same lesson leakage-aware evaluation teaches for models: small, convenient samples systematically flatter changes that happen to fit them, and the gap between a spot check and a proper test set widens exactly when it matters most, at the tail of the distribution rather than the head. A prompt evaluation set should be built once, frozen, and reused across every candidate prompt, with enough examples per category or scenario that a regression cannot hide in the noise.

The comparison protocol matters just as much as the data. Reporting a single accuracy number for a new prompt tells you almost nothing; reporting it alongside the baseline prompt's score on the identical set, computed in the identical run, tells you whether the change actually helped. Because generation is stochastic, that also means running each prompt multiple times per example, or fixing the sampling temperature to zero where the task allows it, so that a single lucky draw is not mistaken for a genuine improvement.

whiteboard with equations

Treating prompts as versioned artefacts

If a prompt is a component with measurable behaviour, it deserves the same version control that code and model weights get. That means storing prompts as files rather than embedding them inline in application code where they are easy to edit casually and hard to diff. It means giving each prompt a version identifier and recording, alongside it, the evaluation scores it achieved, the date it was tested, and which model it was tested against, because a prompt tuned for one model can behave quite differently on another.

That last point deserves emphasis. A prompt is not a universal artefact; it is tuned, whether deliberately or by accident, to the quirks of a specific model. Swap the underlying model and the same wording can produce a noticeably different accuracy profile, because instruction-following style, context window handling, and even sensitivity to formatting differ across models. This means a prompt evaluation harness cannot be a one-off exercise done at launch. It needs to run again whenever the underlying model is updated, exactly as you would re-run a downstream evaluation after a dependency upgrade, because a silent provider-side model update can shift your metrics without you having changed a single character of your own prompt.

It is also worth separating two kinds of prompt evaluation that get conflated in practice. One is offline evaluation against a fixed labelled set, which tells you whether a candidate prompt is likely to be an improvement before it reaches anyone. The other is online monitoring after deployment, which catches drift in the input distribution that the offline set never anticipated, such as a new category of customer query appearing after a product launch. Both are necessary and neither substitutes for the other; a prompt that scores well offline can still degrade quietly online if the world it operates in has shifted since the test set was built.

Practical takeaway

The concrete habit worth adopting is small: before merging any prompt change, run it against the same frozen evaluation set used for the current production prompt, report the delta rather than the absolute number, and require that delta to be positive, or at least not negative on any subgroup that matters, before it ships. Store the prompt as a versioned file with its evaluation history attached, and re-run that evaluation whenever the underlying model changes, not just when the prompt text does.

None of this requires exotic tooling. A spreadsheet of examples with expected outputs and a script that runs both prompts and diffs the scores is enough to start. What matters is the discipline, not the sophistication: prompts change behaviour the same way model swaps do, so they earn the same scepticism, the same held-out data, and the same insistence on evidence before anything reaches production.

laptop showing spreadsheet data
← All writing See the project case studies →