Skip to content
AI Product Engineer Wiki

    ↑ ↓ to move between results, Enter to open, Esc to close

    Menu

    Rubrics and human grading

    Write rubrics that make AI output gradeable, run human grading sessions, and measure agreement between graders before trusting the scores.

    Level: Advanced 7 min read Updated
    On this page

    Why this matters

    Many of the qualities users care most about can’t be checked with code: is the answer correct, is it complete enough to act on, is the tone right, does it stay faithful to the sources? Someone has to judge them. Human grading is how you do that, and it’s also the reference standard every automated grader is measured against.

    But human judgment is only useful when it’s consistent. If two graders look at the same output and one says “pass” while the other says “fail”, the score measures the graders, not the feature. A good rubric fixes that, and a simple agreement check tells you whether it worked. This article covers both.

    What makes a rubric gradeable

    A rubric is a list of criteria, each with a clear definition of what passes. Good criteria share four properties:

    • Specific: “states the refund window from the policy” rather than “is accurate”.
    • Observable: a grader can point to the part of the output that passes or fails it.
    • Independent: each criterion measures one thing. “Correct and concise” is two criteria.
    • Anchored with examples: a passing example, a failing example, and guidance for borderline cases.
    Anatomy of a gradeable criterion. The examples and the borderline rule are what make graders agree.
    Show text descriptionHide text description

    4 parts, in order:

    1. Criterion: One specific, observable quality Example: Grounded: every factual claim is supported by the provided articles.
    2. Pass: What a passing output looks like Example: All claims appear in the articles, possibly reworded.
    3. Fail: What a failing output looks like Example: States a refund timeline the articles do not mention.
    4. Borderline: How to decide the cases in between Example: General courtesy ("we're sorry") is not a factual claim: ignore it.

    Start with three to six criteria per feature. More than that and graders get slow and inconsistent; fewer and you may miss what matters. Mark any criterion that must never fail, like “doesn’t promise anything outside the policy”, so it’s graded and reported separately.

    Pass/fail or scales?

    Two common scoring formats:

    Format Example Strengths Weaknesses
    Pass/fail per criterion Grounded: pass Fast, consistent, easy to aggregate Loses nuance between “fine” and “excellent”
    Scale (1 to 5) Helpfulness: 4 Captures degrees of quality Graders disagree more, especially in the middle

    Prefer pass/fail per criterion for most product evals. It’s faster to grade, graders agree more often, and the result, “92% of outputs are grounded”, is easy to act on. If you need nuance, split a criterion in two rather than adding a scale: “answers the question” and “answers it completely” instead of “helpfulness 1 to 5”.

    Running a grading session

    A grading session can be an hour with two people and a spreadsheet:

    1. Choose graders who know the domain. Support leads for support replies, clinicians for medical summaries. Engineers can grade format; they shouldn’t be the only judges of correctness in a specialist domain.
    2. Calibrate first. Grade five outputs together, discuss every disagreement, and refine the rubric’s examples and borderline rules.
    3. Grade independently. Each grader scores the same set without seeing the other’s scores.
    4. Grade blind. Hide which prompt version or model produced each output, and shuffle the order, so graders can’t favor the version they expect to win.
    5. Measure agreement on the overlap (next section).
    6. Resolve disagreements by discussion, and update the rubric so the same disagreement doesn’t recur.

    Keep the graded outputs. They become the reference labels for calibrating an LLM judge, and the baseline for later comparisons.

    Measuring agreement

    Before trusting human grades, check that two graders would score the same output the same way. Two numbers are useful:

    • Percent agreement: how often both graders gave the same verdict. Simple, but inflated when most outputs pass, because graders agree by chance.
    • Cohen’s kappa: agreement corrected for chance. 1 means perfect agreement, 0 means no better than chance. A widely used rule of thumb (Landis and Koch, 1977) treats values above about 0.6 as substantial agreement and above 0.8 as almost perfect, though what’s acceptable depends on the stakes.

    This function computes both for pass/fail grades on the same outputs:

    evals/agreement.ts
    type Verdict = 'pass' | 'fail';
    
    /** Percent agreement and Cohen's kappa for two graders' verdicts on the same outputs, in the same order. */
    export function agreement(a: Verdict[], b: Verdict[]) {
      if (a.length !== b.length || a.length === 0) throw new Error('Both graders must grade the same, non-empty set.');
      const n = a.length;
      const observed = a.filter((v, i) => v === b[i]).length / n;
    
      // Agreement expected by chance, from each grader's own pass rate.
      const passA = a.filter((v) => v === 'pass').length / n;
      const passB = b.filter((v) => v === 'pass').length / n;
      const expected = passA * passB + (1 - passA) * (1 - passB);
    
      const kappa = expected === 1 ? 1 : (observed - expected) / (1 - expected);
      return { percentAgreement: observed, kappa };
    }
    
    // Two graders, ten outputs, one criterion ("grounded").
    const graderA: Verdict[] = ['pass', 'pass', 'fail', 'pass', 'pass', 'fail', 'pass', 'pass', 'pass', 'fail'];
    const graderB: Verdict[] = ['pass', 'pass', 'fail', 'pass', 'fail', 'fail', 'pass', 'pass', 'pass', 'pass'];
    const { percentAgreement, kappa } = agreement(graderA, graderB);
    console.log(`Agreement ${(percentAgreement * 100).toFixed(0)}%, kappa ${kappa.toFixed(2)}`);
    // Agreement 80%, kappa 0.52: the graders agree often, but less than it seems once chance is removed.

    The example shows why kappa matters. 80% agreement sounds good, but because both graders pass most outputs, much of that agreement would happen by chance. A kappa of 0.52 says the criterion needs clearer examples or a better borderline rule before its grades can be trusted.

    Compute agreement per criterion, not overall: one vague criterion can hide behind several clear ones.

    Common mistakes

    • Vague criteria. “High quality” or “helpful” produce inconsistent grades. Make each criterion specific and observable, with examples.
    • Combining qualities in one criterion. “Correct and concise” hides which one failed. One quality per criterion.
    • Grading with the version visible. Graders favor the version they expect to win. Hide the source and shuffle the order.
    • Trusting percent agreement alone. When most outputs pass, chance inflates agreement. Check kappa.
    • Engineers grading specialist correctness. Domain experts should judge domain correctness.

    Try it

    Exercise

    About 90 min

    Write a rubric and grade ten outputs with a colleague

    1. Write three to five pass/fail criteria for your feature, each with a pass example, a fail example and a borderline rule.
    2. Grade five outputs together to calibrate, and refine the rubric.
    3. Grade ten more outputs independently and blind.
    4. Compute agreement and kappa per criterion with the function above, and rewrite any criterion with kappa below about 0.6.
    Show a hint

    If one criterion has low agreement, look at the specific outputs you disagreed on. The disagreement almost always points to a missing borderline rule.

    Show a worked solution

    Example results for a support-reply rubric (illustrative):

    • Grounded: 90% agreement, kappa 0.74. Good.
    • Answers the question: 90%, kappa 0.78. Good.
    • Tone matches guide: 70%, kappa 0.35. Too vague. Disagreements were about exclamation marks and apologies. Fix: add the rule “at most one exclamation mark; apologize once if the customer reports a problem, never otherwise”, plus two examples.
    • After revising, a second round on ten new outputs gives tone a kappa of 0.69.

    Check your understanding

    Question 1 of 4: Which criterion is most gradeable?

    Show answer

    C. "Every factual claim is supported by the provided articles"

    It is specific, observable and measures one thing, so graders can point to where it passes or fails.

    Question 2 of 4: Why grade blind, with the prompt version hidden?

    Show answer

    B. So graders cannot favor the version they expect to be better

    Knowing which version produced an output biases judgment, even unintentionally.

    Question 3 of 4: Two graders agree 85% of the time, but kappa is 0.3. What does this mean?

    Show answer

    B. Much of the agreement is due to chance, often because most outputs pass; the criterion needs clarifying

    High raw agreement with low kappa means graders rarely agree on the outputs that matter, beyond what chance would produce.

    Question 4 of 4: Why prefer pass/fail per criterion over a 1 to 5 scale for most product evals?

    Show answer

    B. Pass/fail is faster, more consistent between graders, and easier to act on

    Graders disagree more on scales, especially in the middle. Split criteria to add nuance instead.

    Key takeaways

    • Good criteria are specific, observable, independent and anchored with examples and a borderline rule.
    • Prefer pass/fail per criterion; split criteria rather than adding scales.
    • Grade with domain experts, independently, blind and in shuffled order.
    • Measure percent agreement and Cohen’s kappa per criterion, and fix criteria graders don’t agree on.

    Progress is saved in this browser and lights up the roadmap.