The most expensive bug in an AI feature is the one you ship because the three examples you tried by hand happened to work. Evaluation is how you stop grading your own homework.

This is a working note rather than a definitive guide — the patterns here come from systems I’ve actually shipped and the trade-offs I kept running into along the way.

Build the harness before you need it

I start every LLM feature with a tiny golden set — a dozen real inputs with the behavior I expect — and grow it every time something breaks in the wild. The harness runs on every change, so a clever prompt tweak can never silently regress an older case.

If you cannot measure it, you are not engineering it — you are hoping.

What you measure matters as much as that you measure. I weight the cases that map to real user pain, track them over time, and treat a drop as a release blocker, not a footnote.

None of this is glamorous, but it’s the part that decides whether a design holds up once real traffic and real deadlines arrive.