Evals are the new load tests

Performance work taught engineering leaders a durable lesson: the average can look fine while a small group of users has a terrible time. Teams learned to examine the tail, run load tests before release, and treat performance as a release concern.

Agentic systems have the same shape of problem, but the fragile part is judgment. The demo and the happy path can both work while a strange ticket, a messy prompt, or a missing tool result pushes the agent into the part of the distribution nobody tested.

Agent quality needs the same discipline. Evals are release evidence for behavior.

This article defines evals, maps them to familiar load-testing ideas, and shows where they belong in a release process. The goal is a conversation managers and engineers can use without turning quality into theater.

What an eval is

An eval is a repeatable test of an AI system against examples you care about: a user request, a support ticket, a code review task, or a multi-step workflow. A scorer, a human rubric, a deterministic check, or some combination of the three judges the output.

The important word is repeatable. A one-off manual check can help during exploration, but it does not protect a team over time. A useful eval suite is versioned, cheap enough to run often, and tied to behavior the business actually depends on.

For a manager, an eval answers: "Are we still comfortable shipping this?"

For an engineer, it answers: "Did this change break behavior we already agreed matters?"

Why load tests are the right analogy

Load tests became useful when teams stopped treating performance as a heroic debugging exercise and started treating it as release infrastructure. They built a harness, fed it representative traffic, measured the tail, and blocked a release when the numbers moved too far.

Agent quality needs the same discipline.

A release gate for agent behavior
  1. Representative cases

    Collect prompts, tasks, and workflows that reflect real use, not only demo paths.

  2. Repeatable runs

    Execute the same suite against each meaningful model, prompt, tool, or policy change.

  3. Tail analysis

    Look at the worst cases and failure clusters, not only the average score.

  4. Release decision

    Ship, investigate, or block based on a threshold the team agreed to before the run.

The analogy has limits. Load tests usually measure numbers the machine can compute by itself. Evals often measure behavior that needs interpretation: Did the agent follow policy? Did it ask a clarifying question? Did it use the right tool? Did it avoid making up a fact?

Fuzzy behavior needs an explicit rubric. Otherwise the team ends up debating taste after every failure.

The mapping

Load testing Agent evals
Traffic profile Prompt and task suite
Latency distribution Quality score distribution
p95 or p99 latency Worst-case behavior and tail failures
SLO threshold Release threshold
Regression under load Regression on edge cases
Flame graph or trace Transcript, tool calls, and scorer rationale

The important move is the same in both worlds: stop arguing from anecdotes and start arguing from a repeatable run.

The average will fool you

Consider an agent that summarizes incidents for a support leader. Most summaries are fine, and the average score says the system is healthy, but the tail contains exactly the cases that matter: partial outages, missing timestamps, confused ownership, or a remediation step copied from the wrong service.

Eval quality distribution before release (illustrative)
MetricValue (%)
Excellent58
Acceptable28
Needs review9
Blocker5

An average pass rate can hide the exact 5% that will damage trust in production. The tail is where the release risk becomes visible.

What belongs in the first suite

Start with the behaviors that would make a leader pause a release if they regressed. A giant eval program can come later, after the team knows which failures matter.

  • Golden paths: the boring cases the agent must never forget how to handle.
  • Known incidents: examples from real production or support history.
  • Policy boundaries: requests where the agent must refuse, escalate, or ask for more information.
  • Tool failures: missing data, slow tools, partial responses, and inconsistent state.
  • Ambiguous requests: prompts where the correct behavior is to clarify, not guess.

This is where management and engineering should meet. Managers bring the risk appetite and business consequences. Engineers turn those concerns into runnable cases, scorers, thresholds, and failure reports.

Where the gate should live

The gate should be close enough to development that people see its signal before a release, but not so strict that every experiment becomes expensive. For most teams, that means:

  1. Run a small smoke suite on every meaningful prompt, tool, retrieval, or model change.
  2. Run the broader suite before release.
  3. Store transcripts and scorer output so failures are debuggable.
  4. Treat threshold changes as product decisions, not silent engineering tweaks.

The code can be simple. The discipline matters more than the framework.

const score = await runEvals(suite);

if (score.tailPassRate < releaseThreshold) {
  fail('tail regression in eval suite');
}

The leadership lesson

Evals make judgment easier to apply consistently without pretending to replace it.

A senior engineer still needs to decide whether the approach is coherent. A manager still needs to decide how much risk is acceptable. What the eval suite does is remove the worst version of the conversation, the one where everyone debates whether a failure was "just one weird example."

You cannot improve a p99 you never measured, and you cannot trust an agent you never evaluated at the tail.

← Back to writing