.comThis is falkster.com, the notebook. Falkster.AI is the company.Go to falkster.ai

The Eval Rubric Template

Pull 30 real outputs from the feature or a prototype of it. Grade each on gut feel alone. No criteria yet. Being inconsistent is allowed, the inconsistency is the data.

eval-rubric-template.md4 KB727 words

The template


The Eval Rubric Template

A rubric is not something you write, it is something you extract. This template walks the extraction: grade thirty real outputs on gut feel, pull the dimensions out of your own notes, keep only the ones that cost you something when they fail, and score them binary. Copy the three blocks below into a sheet and work top to bottom. The first pass takes an afternoon.


Block 1: The grading sheet (fill this first, before you have any rubric)

Pull 30 real outputs from the feature or a prototype of it. Grade each on gut feel alone. No criteria yet. Being inconsistent is allowed, the inconsistency is the data.

#Output (or link)Gut call (good / mixed / bad)Why, in one sentence
1
2
...
30

Two things to watch for as you go, because they are the whole point:

  • Words that repeat in your "why" column (for example "invented a number", "buried the answer", "hedged"). Those are your candidate dimensions.
  • Cases where you graded two similar outputs differently. Those disagreements with yourself are exactly where the rubric has to get precise.

Block 2: Extract the dimensions (do this after all 30 are graded)

For each repeated phrase in your notes, write one candidate dimension, then apply the downside test. A dimension stays only if failing it maps to a real cost.

Candidate dimensionWhat failing it costs (harm / trust / rework / $)Keep?
e.g. Fabricates a metricUser acts on a false number, trust goneKEEP
e.g. Buries the answerExtra read time, mild annoyancemaybe
e.g. Tone feels offCan't name a costCUT

Rule: if you cannot name the cost in the middle column, cut the dimension. Aim for three or four dimensions that each hurt, not eight that measure vibes. If you want a prompt to help, paste your 30 graded rows into a model with:

"Here are 30 outputs I graded by gut feel with a one-line reason each. Cluster my reasons into 3 to 5 named failure dimensions. For each, quote the rows that show it, and name the real-world cost of failing it. Flag any dimension where the cost is vague so I can cut it."


Block 3: The rubric (binary, one row per surviving dimension)

Score pass/fail per dimension per case. No 1-5 scale. If you need a number, use the pass rate across cases as the score.

DimensionPass meansFail meansCost when it failsCritical?
No fabricationEvery number/claim traces to the inputAny invented figureUser acts on false dataYES: 100% every case
Answers the questionThe ask is addressed in the first lineAnswer buried or absentRework, re-promptpass rate >= 90%
Commits when it shouldStates a call on high-signal inputHedges to avoid being wrongUseless outputpass rate >= 90%
Fits the schemaValidates against the brief schemaAny schema breakBreaks downstream stepYES: 100% every case
  • Critical dimensions (safety, fabrication, legal, schema) are pass/fail on every single case. No aggregation, no averaging one miss away.
  • Non-critical dimensions use an aggregate pass-rate threshold you can defend.
  • Tie-breaks: the first time two graders disagree on a binary, write the deciding rule into the "Pass means" cell. That argument is the rubric getting sharp.

Keeping it alive

Put this rubric in the repo next to the eval. Review it on every trigger:

  • a model update (failure modes shift under you),
  • a prompt change,
  • a new class of bad output from production (usually adds a dimension).

When the rubric is stable, encode it as runnable rows using the five-row eval template (Behavior, Input, Expected, Scorer, Threshold) so it runs in CI on every diff.

Companion to the post "How I Build Eval Rubrics" on falkster.com.

More from the toolkit


All templates →