Why Most LLM Evaluations Fail Before Production
How to build test sets, use synthetic data wisely, and trust LLM-as-a-judge without fooling yourself
Every week, enterprise teams build impressive AI prototypes. The demos are polished. The leadership reviews go well. And then the system hits production, and the problems start. Customer-facing outputs hallucinate. Edge cases that never appeared in testing show up constantly in the real world. Confidence scores look great on paper but mean nothing when the stakes are high.
The culprit is rarely the model itself. It is the evaluation.
This pattern plays out at organizations of every size and in every industry. A financial services team builds an AI assistant that answers customer questions about account features. In testing, it performs beautifully on the curated Q&A pairs the team assembled. In production, a customer asks about a discontinued product feature, and the system confidently fabricates a non-existent policy. A healthcare technology company deploys an AI-powered clinical documentation tool. It passes internal review with flying colors. Within weeks, clinicians report that the system struggles with the shorthand and fragmented notes that characterize real clinical workflows, producing summaries that omit critical details.
In each case, the model was capable. The evaluation was not.
The teams that ship reliable AI systems are not the ones with the fanciest models. They are the ones with the best evaluation discipline. They treat evaluation not as a gate to pass through once but as an operating capability that compounds over time. And they build that capability deliberately, starting with how they construct test sets, extending through how they use synthetic data and automated judges, and culminating in a repeatable system that catches regressions before customers do.
This post lays out how to build that capability. If you are deploying LLMs in production today, or plan to in the next twelve months, the quality of your evaluation pipeline will determine whether your AI program earns trust or erodes it.
The Problem with “Good Enough” Evals
Most teams begin evaluating too late, with datasets that are too small, too clean, or too disconnected from the conditions their system will actually face. This is not a failure of intent. It is a failure of sequencing. Evaluation is treated as a pre-launch checkpoint rather than a foundational engineering practice.
The pattern is familiar. A product team identifies a compelling use case. Engineers select a model and build a prototype. The prototype works well on a handful of curated examples. Stakeholders see the demo and approve the project for production. Somewhere in the final weeks before launch, someone assembles a test set from whatever data is convenient, runs a quick evaluation, and declares the system ready.
The problem is that this approach optimizes for false confidence. A test set of 50 or 100 clean, well-structured examples will almost certainly make any competent LLM look good. Real production traffic is messy. Users phrase things in ways no product manager anticipated. Inputs contain typos, ambiguity, contradictions, and context that the model was never designed to handle. The gap between demo performance and production performance is not a rounding error. It is often the difference between a system that works and one that fails in ways that damage customer trust.
Research consistently confirms this gap. Generic benchmarks, while useful for broad model comparisons, struggle to predict how a model will behave on your specific task, with your specific data, in your specific domain. OpenAI cofounder Andrej Karpathy captured this well when he noted that the evaluation landscape is in crisis, with previously reliable benchmarks like MMLU having outlived their usefulness and no single replacement adequate for the diversity of real production workloads. The implication for enterprise teams is stark. If you are relying on vendor-reported benchmarks or a small internal test set to make deployment decisions, you are flying blind.
The antidote is to treat evaluation as a first-class engineering discipline, one that starts before you write your first prompt and continues long after the system reaches production. That begins with how you build your test sets.
Build Test Sets from Failure, Not Theory
The best evaluation datasets do not come from brainstorming sessions or theoretical coverage matrices. They come from real prompts, real workflows, and real mistakes. The distinction matters because the inputs that cause problems in production are rarely the ones that engineers imagine during development.
Start with a golden set
Every evaluation pipeline needs a small, high-quality foundation of test cases reviewed and labeled by people who understand both the task and the downstream risk. This golden set does not need to be large. Thirty to fifty examples are a viable starting point for many use cases. What it needs to be is representative, carefully labeled, and grounded in real usage patterns rather than hypothetical ones.
A golden set should include examples that cover the primary use case your system is designed to handle, as well as boundary cases that test the limits of acceptable performance. It should include examples where the correct answer is ambiguous, because those are the cases where production systems stumble most visibly. And it should include examples that reflect the actual distribution of inputs your system will see, not a cleaned-up version of that distribution.
Expand from real failures
Once your system is handling real traffic, even in a limited pilot, you will begin accumulating the most valuable evaluation data you can get: the cases where things went wrong. Every hallucination, every off-topic response, every instance where a user had to rephrase their question or escalate to a human represents a failure mode that belongs in your test set.
This approach inverts the traditional logic of evaluation. Instead of starting with what your system should handle and testing whether it does, you start with what your system actually struggles with and test whether you have fixed it. This failure-first methodology produces test sets that are inherently aligned with production risk because they are drawn directly from production experience.
Categorize by risk, not just topic
Not all test cases carry equal weight. A customer service bot that occasionally recommends the wrong FAQ article is a nuisance. The same bot producing inaccurate information about billing, refund policies, or contractual terms is a liability. Your test set should reflect this distinction. Organize cases by the severity of downstream impact, and weight your evaluation metrics accordingly.
For teams operating in regulated industries, this risk-based categorization is not optional. The EU AI Act’s tiered approach to AI regulation maps directly to evaluation rigor. High-risk applications require more extensive testing, more granular metrics, and more thorough documentation. But even outside regulated contexts, understanding which failures matter most allows you to allocate evaluation resources where they will have the greatest impact on trust and business outcomes.
Maintain living test sets
A test set that was comprehensive six months ago may be dangerously incomplete today. User behavior evolves. Product requirements change. New features introduce new failure modes. The best evaluation programs treat their test sets as living artifacts, with defined processes for reviewing and expanding coverage on a regular cadence.
Practically, this means establishing a feedback loop between production monitoring and test set curation. When your monitoring detects a new class of errors or a shift in input distribution, those findings should be incorporated into your evaluation dataset within days, not months. The teams that execute this well typically assign explicit ownership of test set maintenance to a specific role or team, rather than leaving it as a shared responsibility that nobody prioritizes.
The 5 D’s of evaluation dataset design
Recent research on practical LLM evaluation frameworks has converged on a useful set of principles for building robust test sets. Your dataset needs a defined scope that aligns with the specific tasks the model performs. It should be demonstrative of production usage, mimicking the inputs and scenarios your system will actually encounter. It should include sufficient diversity to cover the range of user populations, input styles, and edge cases relevant to your domain. It needs to be properly documented, with clear metadata about labeling criteria, annotator qualifications, and known limitations. And it needs to be durable, designed for maintenance and evolution rather than one-time use. These principles apply whether you are building a test set for a customer service chatbot, a document analysis pipeline, or a clinical decision support tool.
Use Synthetic Data to Widen Coverage
Once you have a solid foundation of real-world test cases, synthetic data becomes a powerful tool for expanding coverage. The keyword is “expanding.” Synthetic data is most valuable when it fills gaps that would be difficult, expensive, or time-consuming to fill with real examples. It should complement your golden set, not replace it.
Where synthetic data excels
There are several scenarios where synthetically generated test cases add significant value. The first is volume. If you need hundreds or thousands of test cases to achieve statistical confidence in your evaluation metrics, generating synthetic variations of real examples is far more efficient than waiting for organic production data to accumulate.
The second is coverage of rare but important scenarios. Every production system encounters edge cases that appear infrequently but carry outsized risk when they do. A medical information system may rarely encounter questions about drug interactions for patients on five or more medications, but when it does, the quality of the response is critical. Synthetic data allows you to systematically generate these long-tail scenarios rather than hoping they appear in your production logs.
The third is adversarial testing. Synthetic data is particularly useful for generating inputs that users would rarely produce organically, but that reveal important vulnerabilities. Prompt injection attempts, deliberately ambiguous queries, inputs with misleading context, and requests that test the boundaries of your system’s safety guardrails are all more efficiently created through generation than collection.
Where synthetic data falls short
The limitations of synthetic data are real and important to understand. The most significant is that LLM-generated test cases tend to reflect the distribution and style of the generating model, not the distribution and style of your actual users. Research on synthetic test collections has demonstrated that synthetic queries exhibit measurably different patterns from real user queries, with implications for the extent to which evaluation results transfer to production conditions. If your entire test set is synthetic, you risk optimizing for a version of reality that does not match the one your system actually operates in.
Synthetic data also struggles with subtle, domain-specific nuances that matter most in high-stakes applications. A synthetically generated medical question may be well-formed and topically relevant, but miss the way actual patients describe symptoms, omit relevant context, or fail to capture the emotional undertone that affects how a response should be framed. For these reasons, expert-labeled examples remain essential for the portions of your evaluation that directly inform deployment decisions.
A practical framework for combining real and synthetic data
The most effective approach for enterprise teams is a layered one. Your golden set of human-labeled examples forms the foundation. These are the cases against which you validate your automated evaluation methods and calibrate your confidence. Synthetic data forms the next layer, providing breadth and volume across scenarios not covered by your golden set. The outermost layer is production data, continuously feeding back into both your golden set and your synthetic generation strategy.
The ratio between these layers depends on your maturity and risk profile. Early-stage evaluation programs might operate with 50 golden examples, 500 synthetic variations, and a nascent production feedback loop. Mature programs at scale might maintain 500 golden examples, thousands of synthetic cases across multiple dimensions, and a fully automated pipeline that incorporates production findings daily.
The critical discipline is to never evaluate high-stakes decisions solely against synthetic data. When the outcome of a model response could affect a customer’s finances, health, employment, or legal standing, the evaluation that gates deployment must include real examples reviewed by qualified humans. Synthetic data can help you map the risk landscape, but human judgment must anchor the decisions that matter most.
Treat LLM-as-a-Judge as a Tool, Not the Truth
As LLM evaluation scales, human review of every output becomes impractical. This is the operational reality driving the rapid adoption of LLM-as-a-judge. In this methodology, one language model evaluates the outputs of another according to predefined criteria. The approach offers dramatic efficiency gains. At scale, automated judges can evaluate thousands of outputs in the time it would take a human reviewer to evaluate dozens, at a fraction of the cost.
But efficiency without accuracy is worse than useless. It is actively dangerous because it creates the illusion of quality assurance without the substance. Understanding when and how to trust LLM judges is one of the most consequential evaluation decisions enterprise teams face today.
What the research tells us
The evidence on LLM-as-a-judge is nuanced. Strong models used as judges can achieve roughly 80% agreement with human evaluators on general instruction-following tasks, which is broadly comparable to the level of agreement between human evaluators themselves. This is a meaningful finding. It means that for many routine evaluation tasks, automated judges are not just cheaper substitutes for human review. They are statistically comparable alternatives.
However, this aggregate finding masks important variation. In specialized domains such as medicine, law, finance, and technical subject matter, agreement between LLM judges and subject matter experts declines considerably, with some studies reporting rates as low as 60-70%. This degradation is not random. It is systematic, occurring precisely in the domains where evaluation accuracy matters most.
Known biases to guard against
LLM judges exhibit several well-documented biases that practitioners must account for. Position bias causes judges to favor responses based on their order of presentation rather than their quality. Simply swapping the order of two candidate responses in a pairwise comparison can shift accuracy by more than 10%. Verbosity bias leads judges to prefer longer, more formally structured responses even when shorter responses are more accurate or more appropriate. Self-preference bias causes models to assign higher scores to outputs that resemble their own generation patterns. And superficiality bias causes judges to overweight surface fluency at the expense of factual accuracy or adherence to instructions.
These biases are not theoretical curiosities. They are operational risks that can systematically distort your evaluation results. If your LLM judge prefers verbose responses, and you use that judge to compare model versions, you may inadvertently select the model that produces longer but less accurate outputs. If your judge exhibits position bias, you may draw incorrect conclusions from pairwise comparisons that would reverse with a different presentation order.
How to use LLM judges responsibly
The prescription is not to abandon LLM judges but to use them with appropriate discipline. Several practices separate responsible use from reckless reliance.
First, validate your judge against human labels before trusting it at scale. Build a validation set of 100 to 200 examples with human-generated quality scores, and measure agreement between your LLM judge and those human scores. If agreement is below 75% on the dimensions you care about, your judge is not ready for unsupervised use. Refine the rubric, adjust the prompt, or consider a different judge model before proceeding.
Second, match the judge to the task. LLM judges work best on structured, well-defined evaluation dimensions such as relevance, groundedness, tone adherence, and format compliance. They work poorly on ambiguous, subjective, or high-stakes judgments where reasonable evaluators would disagree. A practical heuristic is to ask whether you could train a competent human evaluator to apply your rubric consistently in under ten minutes. If the answer is yes, an LLM judge will likely perform well. If the answer is no, you need human evaluation for that dimension.
Third, design tight rubrics. Vague evaluation criteria produce unreliable results from both human and automated judges, but LLMs are particularly sensitive to rubric ambiguity. Instead of asking a judge to assess whether a response is “good,” specify the observable characteristics that constitute quality for your use case. Define what a score of 1, 3, and 5 looks like with concrete examples. The tighter the rubric, the more reliable the judge.
Fourth, implement mitigation strategies for known biases. Randomize response order in pairwise comparisons. Consider running evaluations twice with swapped positions and flagging cases where the judge’s preference reverses. Use ensemble approaches in which multiple judge instances evaluate the same output, and their scores are aggregated. These techniques add computational cost but substantially improve reliability. Research on ensemble-based “jury” models has shown that averaging scores across multiple judge instances can significantly reduce the impact of individual model biases. However, practitioners must weigh this benefit against the additional inference costs.
Fifth, maintain human oversight for high-stakes decisions. Even the best-configured LLM judge should not be the sole arbiter for deployment decisions, model selection for safety-critical applications, or evaluation of outputs that could cause material harm. Use automated judges to triage and prioritize, then route the most consequential decisions to qualified human reviewers. One data scientist described a practical implementation of this principle. His team automatically reruns evaluations that produce low scores, then routes confirmed failures to human review. This two-stage approach catches the cases where the judge itself hallucinated a low score, while still surfacing genuine quality issues for expert assessment.
The cost calculus
At scale, the economics of LLM-as-a-judge are compelling. Organizations running 10,000 or more monthly evaluations can realize substantial cost savings compared to fully human review while maintaining agreement rates that are statistically comparable to human-to-human consistency. But the savings only materialize if the judge is properly calibrated. An uncalibrated judge that produces plausible-looking but inaccurate scores does not save money. It creates technical debt in the form of false confidence that will eventually come due, typically at the worst possible moment.
The Real Goal: A Repeatable Evaluation Loop
Everything described above culminates in a single objective. Evaluation should not be a one-time checkpoint. It should be a repeatable, automated system that runs continuously as prompts change, models update, and product requirements evolve.
Why repeatability matters
LLM-powered systems are not static. Prompts get refined. Models are updated or swapped entirely. Retrieval pipelines are restructured. Context windows are adjusted. Each of these changes has the potential to introduce regressions that are invisible without systematic evaluation. A system that passed all tests last month may fail silently this month because a prompt change improved performance on the primary use case while degrading performance on an edge case that your users encounter daily.
This is fundamentally different from traditional software testing. When you update a conventional application, the change in behavior is deterministic. You can trace the code path and predict the impact. With LLMs, a seemingly minor prompt modification can produce cascading changes across the entire output distribution. Adding a single sentence to a system prompt might improve accuracy on one category of questions while introducing hallucinations in another. Swapping from one model version to another might improve reasoning quality while changing the tone in ways that conflict with your brand guidelines. Without a comprehensive evaluation across all the dimensions you care about, these tradeoffs remain invisible until users discover them.
The companies that execute this well have built evaluation into their development workflow, just as software teams build automated testing into their CI/CD pipelines. Every change to a prompt, a retrieval strategy, or a model version triggers a suite of evaluations that compare the new configuration against the previous one across all relevant dimensions. Regressions are flagged before they reach production, not after.
Components of a mature evaluation loop
A production-grade evaluation system includes several integrated components.
A versioned test set that is maintained alongside your application code, with clear processes for adding new cases, retiring outdated ones, and tracking coverage over time. Version control for your test set is just as important as version control for your code, because you need to understand not just how your system performs today, but how that performance has changed relative to previous evaluation runs.
An automated evaluation pipeline that can run on demand or on a schedule, producing standardized metrics that are comparable across runs. This pipeline should support multiple evaluation methods, including deterministic checks for format and structure, LLM-based judges for quality dimensions, and integration points for human review when automated methods are insufficient.
A dashboard or reporting mechanism that surfaces evaluation results to the people who need to act on them. Engineering teams need granular, dimension-level scores. Product managers need trend lines and regression alerts. Executives need summary metrics that convey overall system health. The same evaluation data should serve all three audiences at appropriate levels of abstraction.
A feedback loop that connects production monitoring to test set maintenance. When production observability surfaces new failure modes, input distribution drift, or degradation in user satisfaction metrics, those signals should flow into the evaluation pipeline. This closes the loop between what your system is doing in the real world and what you are testing for in your evaluation environment.
The organizational dimension
Technology alone does not create evaluation discipline. Someone needs to own the evaluation pipeline with the same seriousness as they do the production infrastructure. In many organizations, this responsibility falls between teams. Data scientists build the initial test set and move on. Engineers maintain the pipeline but do not curate the data. Product managers track user satisfaction but do not connect it back to evaluation metrics.
The organizations getting this right assign clear accountability for evaluation quality, invest in tooling that reduces friction, and treat evaluation coverage as a metric that is tracked and reported alongside system performance. They recognize that evaluation is not a tax on development speed. It is the mechanism that enables confident, rapid iteration. Teams that can evaluate quickly can ship quickly, because they have the evidence to know that their changes are improvements rather than regressions.
From Evaluation to Evidence
LLM evaluation is not an isolated technical practice. It is a critical component of the broader governance and observability infrastructure that enables safe, responsible AI at scale.
The governance frameworks establish what AI systems should do. They define acceptable use, risk thresholds, and accountability structures. But governance policies alone cannot tell you whether your system is meeting those standards in practice. That requires continuous, rigorous, production-aware evaluation.
Think about how this relates to the core principles of Trusted AI. Transparency requires that you can explain how your system behaves and what quality it delivers. A repeatable evaluation loop provides the evidence for that explanation. Accountability requires that someone is responsible for system outcomes. Clear evaluation metrics make accountability measurable rather than aspirational. Fairness requires that your system not produce biased or discriminatory outputs. Evaluation test sets designed to detect disparate outcomes make fairness auditable rather than assumed.
The EU AI Act’s requirements for high-risk AI systems include provisions for testing, validation, and ongoing monitoring that map directly to the evaluation practices described here. Organizations that build mature evaluation capabilities now will be positioned to demonstrate compliance as requirements take effect. Those who wait will find themselves retrofitting evaluation into systems that were designed without it, which is significantly more difficult and more expensive.
Beyond regulatory compliance, evaluation discipline connects directly to the business case for Trusted AI that we have explored throughout this publication. Organizations with mature AI governance report significant improvements in both regulatory compliance and stakeholder trust. Evaluation is the mechanism through which governance commitments become verifiable claims. When a board member asks whether your AI systems are performing as intended, when a regulator asks for evidence of ongoing monitoring, or when a customer asks how you ensure quality, the answer is your evaluation pipeline. Either you have one that produces credible evidence, or you have assertions that you cannot substantiate.
Start Now, Start Small, Stay Disciplined
If your organization does not yet have a structured LLM evaluation practice, here is where to begin.
Identify your highest-risk LLM deployment and build a golden set of 30 to 50 real-world test cases for it, including examples of known failures and edge cases. Label those cases with qualified reviewers who understand the domain and the downstream consequences of errors. Set up an automated evaluation pipeline, even a simple one, that can run those cases against your current system and produce a baseline score. Then commit to running that evaluation every time you make a change.
From that foundation, you can add synthetic data for coverage, LLM judges for scale, and production feedback loops for continuous improvement. But the foundation matters most. A small, high-quality, well-maintained test set that runs on every change will do more for your system’s reliability than a thousand synthetic examples that sit in a folder and are never revisited.
The teams that earn trust with AI in production are the ones that can show their work. Evaluation is how you show your work. Build that capability now, and you will be positioned not just to deploy AI, but to deploy AI that your customers, your regulators, and your own leadership can trust.
It’s not a question of whether your AI systems need rigorous evaluation. It’s whether you will build that discipline before or after your first production failure.


