Evaluation is not testing — and it is not benchmarking
People talk past each other when they say "evals." Three overlapping but distinct activities live under that word, and conflating them produces the wrong tool every time.
- Testing answers does my code do what I told it? Inputs and outputs are deterministic. assert add(2, 3) == 5 either passes or it does not.
- Benchmarking answers how does this model rank against others on a public dataset? Useful for model selection, irrelevant for product quality.
- Evaluation answers does my system produce outputs that are good for my users on inputs that look like my users' inputs? Outputs are non-deterministic, "good" is contextual, and users keep moving the goalposts.
What an LLM eval actually measures
An eval combines four ingredients into a measurement:
- A test dataset — inputs that resemble the real workload, plus optional reference answers.
- A system under test — a prompt, a model, a retrieval pipeline, a tool loop, a multi-agent system, or any composition.
- A grader — the function that decides whether an output is acceptable. Can be exact-match, regex, embedding similarity, an LLM judge, a Python validator, or a human rater.
- A reporting layer — the dashboard, CI gate, or notebook that turns numbers into decisions.
Principle: An eval is only as honest as its weakest ingredient. A pristine grader on a junk dataset measures nothing. A perfect dataset with a sloppy grader measures the sloppy grader.
Online vs offline evals
Offline evals run on a fixed dataset before deployment. Think CI/CD. They protect you from the obvious regressions. Online evals run on live traffic after deployment — sampled production logs, A/B comparisons, user feedback, telemetry. They catch what your offline dataset does not represent. You need both. Teams that only do offline are blind to drift; teams that only do online are blind to regressions until users complain.