Why "just write tests" doesn't work
Traditional unit tests assert exact outputs: assert f(2) == 4. LLMs produce text that's correct in many possible forms โ different phrasing, different structure, different tone โ all acceptable. There's no canonical equality.
You also have failure modes traditional tests don't catch: hallucinations, tone drift, format violations, partial correctness, regression-on-edge-cases. Every behaviour you care about needs its own way of being measured.
LLM evaluation is closer to product analytics than to unit testing. You're sampling behaviour over a population of inputs and watching aggregate quality move. You can't assertEqual your way through it.
