Benchmark the Model Against Your Work, Not the World's

JB avatar
JB
Cover for Benchmark the Model Against Your Work, Not the World's

A reader named Roman left a sharp comment on a post last week. Does your benchmark suite, he asked, catch confidently wrong: the failure mode where the output looks structurally fine but is simply incorrect? It's the hardest thing to catch with automated evals, and it's exactly the thing that quietly reaches production. This is the long answer I promised him, the full process we use to decide what to benchmark, and how to build a suite you'll actually re-run every time a new model ships.

New frontier models now land every few months, each with different pricing and a different personality. "Should we switch?" has stopped being a one-time migration and become a recurring decision. If you're answering it from vibes each time, you're gambling. A benchmark turns the gamble into a measurement, but only if it measures the right things, in the right order.

The whole approach rests on one reframe.

You're not testing the model. You're testing the model inside your system.

A model never runs in the abstract. It runs downstream of your prompts and upstream of your parsers, your validators, and your users. The unit under test is the model × your system, and that interaction is invisible to every public benchmark on earth. Think of it less like an exam and more like an audition for a role you already know how to describe.


STEP 1

Map the five ways a new model can hurt you

Before you write a single check, you need a vocabulary for failure. A model swap can regress along five distinct axes, and each one needs a different kind of test. This list is the backbone of everything that follows.

  1. 01 Contract breakage The output stops parsing: malformed JSON, a missing field, a broken structure your extractors depend on. The loudest failure, and the cheapest to catch.
  2. 02 Instruction drift It ignores your rules: scope limits, word budgets, format constraints, safety guardrails. Usually followed 90% of the time instead of 100%, which is worse than never.
  3. 03 Quality regression It parses fine and follows the rules, but the work is simply worse (vaguer, shallower, weaker where it counts). This is where "confidently wrong" lives.
  4. 04 Calibration drift It over- or under-produces: too many items, too few, verdicts biased consistently in one direction. Invisible in any single run; obvious across many.
  5. 05 Token & cost drift Same task, more tokens, higher bill, slower response. The regression that doesn't change a single output but quietly doubles your unit economics.

These land differently on every business. A summarizer cares about calibration; a code reviewer lives and dies on quality; an extractor is all contract. So the axes aren't a checklist to copy; they're a lens. Walk each surface in your pipeline and ask which axes actually apply. That's your bench catalog.

STEP 2

Ground it in truth before you measure anything

A benchmark is only as good as the ground truth behind it. This is the step teams skip, and it's the step that separates a benchmark from a demo. If you can't say in advance what a correct result looks like, you're not ready to test the model; you're still designing the surface.

Start with a model you already trust to be accurate and use it, plus your own judgment, to build fixtures with known answers:

  • Known-pass and known-fail cases: for any surface whose output is a decision, fixture inputs where you already know the right verdict.
  • Deliberately ambiguous cases: the edges where a good model should hesitate and a reckless one charges ahead.
  • Seeded defects with bait: for a review or QA surface, plant known bugs to find, and mix in clean material as false-positive bait. One fixture then measures both recall and precision.
  • Golden outputs: reference answers that anchor "what good looks like" for anything you'll score on quality.
STEP 3

Ask "can we measure this with code?" every time

This one question governs the cost and trustworthiness of your entire suite. Scoring methods form a ladder, from cheap-and-certain to expensive-and-fuzzy. The rule that keeps a suite honest:

Never judge with a model what you can verify with code.

Every rung you climb adds cost and subtracts certainty. Climb only when the question genuinely requires it.

Deterministiccheap · certain

Parsers, validators, exit codes, pattern matches. Binary, free to re-run, zero interpretation. The bulk of a good suite lives here, because contract and instruction checks map almost entirely onto code.

Statisticalrun it N times

Run the same input repeatedly and measure against a band: counts, variance, how often a verdict flips. This is the only way to catch calibration drift, which hides in any single sample.

LLM-as-judgeuse sparingly

A separate, pinned model scores outputs against a rubric. Powerful for genuine quality, but now your measuring instrument has opinions of its own, so pin it and hold it constant across every run.

End-to-endthe real thing

Run the whole task: does it build, do the tests pass, was the job actually done. The ultimate signal and the most expensive, reserved for finalists, never for first-round screening.

STEP 4

Build in tiers, and put the cheap tier first

Don't build the whole catalog at once, and don't run it in a random order. Sequence it by signal-per-dollar, cheapest first, because the ordering isn't just about build effort; it's a live cost control at run time.

Make your deterministic checks Tier 1. When a candidate model fails a cheap contract check, you stop right there, before spending real money pushing it through inference-heavy quality and end-to-end tiers. The cheapest benchmark run is the one you didn't have to finish.

Why order matters

Testing a model that can't produce parseable output at full end-to-end cost is burning money to confirm a "no" you could have gotten for free. Tier 1 is your circuit breaker: fail fast, fail cheap, and only the survivors reach the expensive tiers.

STEP 5

Catch "confidently wrong" with a baseline and an adversary

Back to Roman's question. Deterministic checks won't catch a confidently wrong answer; by definition the output looks fine, so it parses, and it obeys the rules. Two things catch it, and you need both.

A trusted baseline

Keep scorecards for the models you already run. Then every new result is a comparison, not an absolute. "It feels smart" is not a finding. "Recall dropped from 4-of-4 to 0-of-4 on the exact same fixtures" is a finding you can act on. A regression only exists relative to something.

An adversarial judge

When you do reach for an LLM judge, don't ask it to grade; ask it to refute. Prompt it to find the reason the answer is wrong, to default to skepticism, to assume the output is hiding a flaw. A judge told to look for problems finds the plausible-but-wrong result that a judge told to "score this" waves through. That adversarial posture is what surfaces confident errors before your users do.

STEP 6

Report a verdict, not a dashboard

A wall of metrics doesn't make a decision; a person does, and that person reads the first line. So make the first line the decision. Roll the raw scores up into a plain verdict: eligible, eligible with caveats, not eligible, or inconclusive. Then classify each failure as either a blocker (it breaks the system) or a degradation (it still works, just worse). Those two classes lead to completely different conversations.

A composite from a real evaluation. Look at the shape: the best quality scores we'd ever recorded and a disqualifying contract failure, in the same run. A single averaged score would have blended that into a meaningless shrug. The profile is the point; capability is never one number.

Two more habits that keep verdicts honest. Print your caveats with the same weight as your scores: low repetition counts, estimated token usage, untuned thresholds belong on the front page, not in a footnote. And trust a repeated zero over a noisy average: at low sample sizes, a check that fails every time on fixtures your incumbent passes is a real signal, while a quality score that wobbled a fraction of a point is probably just weather.


The byproduct nobody expects

Here's what surprised us most. Building the suite taught us as much about our own systems as about any model. Every fixture forced us to write down what "correct" actually meant. Every surface we couldn't cheaply measure turned out to be a surface we didn't fully understand. The benchmark's real output isn't a leaderboard; it's a map of where your own pipeline is vague, and a list of places to make it sharper.

Before you start

Pick a slow week or a weekend. You're going to burn tokens, because evaluation is inherently repetitive, and that's the cost of a number you can trust. Ours took about a week to build, but we have an unusually large 14-stage surface; yours is likely far smaller. Start with the single surface that would hurt most if it silently regressed, and grow from there.

The playbook, in six moves

  1. Map the five failure axes onto each surface in your pipeline.
  2. Ground it in truth: fixtures with known answers, built from a model you trust.
  3. Ask "can we measure this with code?" before reaching for inference.
  4. Build in tiers, deterministic first, so early failures stop the expensive runs.
  5. Baseline + adversarial judge to catch the confidently-wrong outputs.
  6. Report a verdict, not a dashboard: blocker vs. degradation, caveats up front.

Thanks for the nudge, Roman. It's a better post for the question. If you build a suite from this, the payoff shows up the second time you run it: the next model that ships stops being a leap of faith and becomes a row in a table, sitting right next to the one you trust today.