Evaluation interview questions
24 questions across 7 sections, in the order you would learn them. Every answer here is one that works — but an answer you have read is not an answer you can give, so use Test yourself and say it out loud first.
Why evals exist
Read the section that teaches thisIf this comes up in an interview
What is an eval?
A fixed set of inputs with a defined way of scoring the output, run on every change, producing a number you can compare between versions. It is the equivalent of a test suite for a system whose output is not deterministic.
Why can you not just use unit tests?
Model output varies between runs and there is usually no single correct string. Exact-match assertions flake and get deleted. Evals score properties and use graded judgement rather than equality.
How would you start evaluating an existing feature with no evals?
Read real traces first and write down how it fails, so the eval measures actual problems. Then take twenty real inputs, including ones that have failed, write down what a good output looks like for each, and score the current system to get a baseline. That number is what every future change is measured against.
Error analysis: read traces before you write evals
Read the section that teaches thisIf this comes up in an interview
You join a team with an LLM feature and no evals. What do you do in the first week?
Get full traces logged if they are not already. Read about a hundred real ones, write a note on the first failure in each, group the notes into failure modes and count them. Fix the obvious bugs directly, then build a small eval per recurring failure mode, code checks where possible and a validated judge where not. Only then start changing prompts.
Then they push further
Why not start with standard metrics like faithfulness and relevance?
Because they are chosen before you know how this system fails. They produce numbers that look meaningful and often do not move when the real problem gets better or worse. Failure modes found in your own traces are specific enough to fix and to test.
How do you know a hundred traces is enough?
You do not pick the number in advance with confidence. You keep reading until new traces stop revealing new failure modes. A hundred is a starting point that usually gets most of the common ones.
What if the product team disagrees with your labels?
Then the disagreement is the finding. It means 'good' was never defined. Get one domain owner to decide, write the decision into the failure mode definitions, and label against those.
What gets marked up. Strong answers start from reading data, not from choosing a tool or a metric, and they mention counting failures to prioritise. Weak answers name an eval framework in the first sentence.
Why note only the first failure in a trace?
Later failures are often consequences of the first. If retrieval fetched the wrong document, the wrong answer that follows is not a separate problem. Counting both inflates the downstream failure and hides where the fix belongs.
Why binary judges rather than a one to five scale?
A binary question about one failure mode can be checked against human labels and has a clear meaning. A five point scale has no agreed meaning between adjacent points, drifts between runs and between graders, and nobody can act on an average of 3.4.
What gets marked up. Marked up if the candidate ties this to validation: you can measure how often a binary judge agrees with your labels on both passes and failures.
Building the dataset
Read the section that teaches thisIf this comes up in an interview
Where do eval cases come from?
Real traffic, not imagination. Common cases in realistic proportions, every production failure you have seen, edge cases, and cases where the right answer is to refuse or return nothing.
Why split an eval set into train and test?
Tuning against every case overfits the prompt to that set, so the score improves while real performance does not. A held-out split you never inspect gives a number that still predicts reality.
How big should an eval set be?
Twenty real cases is enough to start and already catches regressions. A few hundred gives tighter confidence. Beyond that, variety matters far more than volume.
You have a bug that affects about 6% of traffic and a fix for it. How do you show the fix works?
Not with the general eval set. At 6% prevalence, a hundred random cases contain about six that exercise the bug, and a paired test on that few detects a working fix less than a tenth of the time. I would pull twenty to forty cases from the reports of that specific bug and use those to show it is fixed, then use the general set to check nothing else regressed and to say how much it mattered overall. Two sets, two questions.
Then they push further
Does the targeted set not overstate the improvement?
Yes, and deliberately. Every case in it was selected for being broken, so its pass rate cannot be read as a product metric. That is why it is reported separately from the traffic-shaped set rather than merged into it.
How do you sample the general set so rare categories are usable?
Stratify with a floor of twenty or thirty per category, then weight the categories back to the real traffic mix when reporting the headline number. Without the floor the rare categories land with two or three cases and their pass rate can only be 0, 50 or 100 per cent.
What gets marked up. Strong answers separate the question 'did this fix work' from 'how much does this matter', and use a different set for each. Weak answers propose adding a few cases to the existing set and re-running it.
Grading: code first, judges second
Read the section that teaches thisIf this comes up in an interview
How do you evaluate something subjective like summary quality?
Use deterministic checks for everything checkable first. For what remains, break 'quality' into specific failure modes you have seen, such as unsupported claims or missing the main point, and write a pass or fail judge for each. Validate each judge against your own labels and report how well it catches failures alongside the score.
What are the known biases of an LLM judge?
Preference for longer answers, preference for its own writing style, sensitivity to the order of compared options, and general leniency. Each has a mitigation: rule length out in the rubric, use a different judge model, run both orders, and include concrete examples of failures in the rubric.
Your judge scores 4.2 out of 5. How much do you trust that?
Not much, for two reasons. Without a measured comparison against human grading the number is unanchored. And an average on a five point scale does not say what is wrong. I would replace it with pass or fail judges for specific failure modes, validated against my own labels, so the result reads as 'unsupported claims in 12% of summaries' rather than 4.2.
Your judge agrees with your labels 92% of the time. Is it good enough to use?
That number on its own cannot answer it, because it depends entirely on how often failures occur. If 12% of outputs are bad, a judge that simply passes everything already agrees 88% of the time, so 92% is barely above doing nothing. I would report Cohen's kappa, which subtracts the agreement two graders reach by chance, along with the catch rate on real failures and the acceptance rate on real passes. A judge at 92% agreement can sit anywhere from a kappa of 0.2 to 0.8 depending on where the mistakes fall.
Then they push further
What kappa would you want before trusting it?
Above 0.6 to track a number over time, and above 0.8 before using it to gate a release. The bands are convention rather than law, so I would quote the value with an interval rather than a label. And the interval matters: with fifty labels of which six are failures, kappa can range from 0.4 to 1.0, which decides nothing.
So how many labels do you need?
Count failures, not labels. Roughly forty failures in the validation half is where the interval on kappa gets narrow enough to act on. If the system fails rarely, go and find failures deliberately rather than labelling thousands of outputs to collect them by chance.
How would you measure whether the judge is biased by answer length?
A controlled probe. Take outputs you have already judged, append a paragraph that adds no information, and judge them again. The content is identical, so any change in the pass rate is the judge responding to length. A judge that swings thirty points on padding will teach your prompts to be verbose if you hill-climb against it.
What gets marked up. Strong answers immediately ask what the base rate is, and reach for kappa or for separate catch and acceptance rates. Very strong ones bring up the sample size of the failures. Quoting raw agreement as sufficient is the answer this question is designed to catch.
You are comparing two prompt versions with a pairwise judge. What do you do about position bias?
Run every comparison twice with the answers in both orders, and average. The gap between the win rate in one order and the other is the size of the bias, and it is worth reporting as a property of the judge. In a realistic case a fifteen-point pull towards whichever answer is shown first is enough to reverse the verdict on a version that is genuinely better, so judging in one fixed order can send you the wrong way.
Evals in the loop
Read the section that teaches thisIf this comes up in an interview
How do you stop evals becoming expensive to run?
Run a small fast subset on every push and the full set nightly or before release. Cache results for unchanged inputs, and report the cost of the eval run itself so the trade-off stays visible.
What do you report from an eval run besides the pass rate?
Cost and latency, because changes routinely trade quality against them, and a quality-only report hides that. Also which specific cases changed state, since that is what you actually investigate.
How does an eval set stay relevant as a product changes?
Sample from real traffic periodically and add every production failure as a case. Version the set, and re-baseline when it changes so scores stay comparable.
Where do you set the threshold that fails a build?
By measuring, not by taste. Run the suite ten times against an unchanged commit and see how far the score moves on its own; that spread is the floor. Then simulate the gate against no change and against a regression of the size you care about, and pick the threshold where false alarms are rare and real breaks are still caught. On a hundred-and-twenty case set, failing on any drop at all fires on about two runs in five of an unchanged system, which is how teams end up ignoring their own eval.
Then they push further
What if that threshold is too loose to catch the regressions you care about?
Then the set is too small, and no choice of threshold fixes it. At that size you cannot both catch an eight-point regression reliably and avoid failing clean builds. The pull request gate catches the large breaks, and a larger nightly set with a paired comparison catches the rest.
Some cases fail intermittently. What do you do with them?
Find them first: run the suite ten times unchanged and look for cases that gave both verdicts. Then read them, because there are three different causes. An ambiguous grader is the common one and is worth fixing. A case the system genuinely handles half the time is telling the truth and belongs in a reliability report rather than a gate. An inconsistent judge means the rubric needs work. Quarantine keeps them out of the gate while that is decided, but it is a holding pen, not a fix.
What gets marked up. Strong answers measure run-to-run variance before choosing anything and treat the threshold as a trade-off with numbers on both sides. Weak answers give a round number with no reasoning, or propose failing on any regression at all.
Evaluating agents and multi-step systems
Read the section that teaches thisIf this comes up in an interview
How would you evaluate a customer support agent that can issue refunds?
Build tasks in a sandboxed copy of the systems it touches, and grade the end state: the right order changed, nothing else changed, the refund amount is correct. Separately check tool calls in the trace and have a validated judge assess the reply. Run each task several times and report both per run success and the share of tasks that pass every time.
Then they push further
It passes 85% of runs. Is it ready to ship?
Not on that number alone. I would want the all-runs-pass rate, which could be far lower, the failure modes of the 15%, and whether any failure is costly, such as refunding the wrong order. A system that fails harmlessly at 15% may be fine; one that occasionally issues wrong refunds is not.
How do you stop the eval from teaching the agent to game the checks?
Keep a held-out task set nobody tunes against, check side effects as well as the target change so shortcuts are caught, and read a sample of passing traces, not just failing ones.
What gets marked up. Strong answers grade the resulting state rather than the transcript, mention repeated runs, and bring up the cost of each failure type. Weak answers describe only an LLM judge reading the conversation.
Why is final-answer accuracy not enough for an agent?
It does not tell you where failures start, it ignores side effects on other data, and it ignores cost and step count. Two runs can reach the same answer, one cleanly and one after ten wasted tool calls.
What does it mean to find the first failing step, and why bother?
Walk each failed trace and mark the earliest step that went wrong. Tallied across runs, it shows which kind of step fails most, such as filling tool arguments. That points directly at the fix, where 'the agent is unreliable' does not.
Is the difference real? Statistics for evals
Read the section that teaches thisIf this comes up in an interview
Your change moved the eval from 80% to 83% on 60 cases. Do you ship it?
Not on that evidence. The interval on 60 cases is roughly plus or minus ten points, so the difference is well inside noise. I would look at the cases where the versions disagree, check run-to-run variance by rerunning the baseline, and grow the set if the decision matters.
Then they push further
How would you compare the two versions properly?
Run both on the same cases and look only at the ones where they disagree. If B wins most of a reasonable number of disagreements, that is evidence. A paired test such as McNemar's on those counts gives a p-value.
The baseline itself scores 78% then 82% on two identical runs. What now?
Then single runs cannot distinguish changes smaller than about that spread. Average several runs per version, lower sampling randomness where the product allows, and treat anything inside the observed spread as no change.
Leadership wants a number for the launch review. What do you give them?
The pass rate with its interval and sample size, the failure modes that remain with their counts, and the cost of the worst one. A single percentage invites a false sense of precision.
What gets marked up. Strong candidates immediately question sample size and variance, and know to compare on paired cases. Very strong ones mention rerunning the baseline. Weak answers accept a three point gain at face value.
Why is a paired comparison better than comparing two pass rates?
Most cases pass or fail for both versions, and those add noise without information. Looking only at disagreements removes that shared noise, so a real difference shows up with far fewer cases.
These are the questions for one topic. The whole question bank covers every topic on the site.