You can't improve what you can't measure
Don't build the feature first — build the way to know if it's any good first
Improving an LLM with no measurement is steering by feel
| Without eval | Eval first | |
|---|---|---|
| Judging a change | "Feels better" | A score tells improvement vs. regression |
| Iteration speed | A human eyeballs it every time | An automated regression gate, instantly |
| Deploy safety | Discovered as an incident in prod | Regressions blocked before deploy |
Cheap to expensive — each tier filters, and you use less of the higher ones
Accuracy, regex matching, code execution, retrieval metrics (recall/precision) — anything scored instantly by machine. Near-zero cost, so run it on every change in CI. The workhorse of your first regression gate. Limit: only works on tasks with a "fixed answer."
A model scores things that don't reduce to one answer — summary quality, tone, helpfulness, groundedness — against a rubric. Strong models reach 80–90% agreement with humans (depends on task and setup). It fills the gap automated metrics can't, but it's biased — see the LLM-as-Judge section.
Judgment from experts and real users. It's the most expensive and slowest, so spend it sparingly — building the gold set, calibrating the judge (checking it agrees with humans), quarterly quality reviews. To trust tiers 1 and 2, you ultimately anchor here.
Use it knowing it tends to overstate its own accuracy
| Bias | Symptom | Mitigation |
|---|---|---|
| Position bias | When comparing two answers, the verdict shifts with front/back placement (reported around 10–15%) | Score twice with order swapped and average · allow ties |
| Verbosity bias | Scores long, wordy answers higher | Control for length or require conciseness in the rubric |
| Self-preference | Prefers answers written by same-family models | Separate judge from generator · cross-validate |
| Overconfidence | High-confidence scores even on wrong answers | Measure judge accuracy against a human gold set first |
① A clear rubric — not "good/bad" but concrete scoring criteria. ② CoT + rationale — make it write the reasoning, not just the score, for more consistency. ③ Pairwise comparison over absolute scoring is generally more stable. ④ Validate the judge itself against a gold set — know numerically "how well the judge agrees with humans" before you start. Without that, there's no basis to trust its scores.
You don't have to build it all — pick by role
| Tool | Strength | Mainly used for |
|---|---|---|
| DeepEval | pytest-style LLM unit tests | Eval as code in a CI regression gate |
| Ragas | RAG-specific metrics (faithfulness, context recall, etc.) | Retrieval and groundedness evaluation |
| Langfuse | Observability (traces) + evaluation | Evaluating on top of production logs |
| Phoenix (Arize) | Hallucination and drift tracking | Production monitoring and root-cause analysis |
| Braintrust | Eval + experiment logging/comparison | A/B comparing prompts and models |
* The tooling landscape moves fast (June 2026 snapshot). Choosing by role (testing, RAG, observability, experiments) outlasts any tool name.
Ways to reach a wrong conclusion even while evaluating
Develop for weeks with no measurement, then have no basis to judge whether it improved — so you decide by feel.
Taking the LLM-judge's score as truth. You've never measured how well the judge agrees with humans.
Pairwise results flip just by swapping order, yet you score in one direction only.
Assuming a high public-benchmark score means it'll be good on your domain too.
The initial gold set drifts away from real traffic distribution and never gets updated (data drift).