1. Specify, don't incant
Why: Instructional specificity transfers across model generations; persuasion hacks are artifacts of a particular checkpoint and silently stop working on the next one.
Prompts written as incantations break every time a model updates. Prompts written as specifications — with structure, examples, and evals — carry across model versions and vendors with minimal rework.
Why: Instructional specificity transfers across model generations; persuasion hacks are artifacts of a particular checkpoint and silently stop working on the next one.
Why: Schema-enforced output eliminates an entire failure class (truncated JSON, chatty preambles), and validation failures become retryable events instead of downstream corruption.
Why: Without evals, every model upgrade is a leap of faith and every prompt tweak can silently break a case you fixed last month. With them, upgrades become routine engineering.
Why: Vendors improve models in ways that shift tone, formatting, and refusal behavior. Pinning turns surprise regressions into planned migrations.
Why: This is both a correctness and a security practice — it reduces prompt-injection surface and stops user phrasing from hijacking output format.
Why: When output quality shifts, the first question is 'what changed?'. If prompts live outside version control, that question has no answer.
Every model generation invalidates a slice of the prompt-hack folklore: phrases that mattered on one checkpoint do nothing on the next, formatting quirks change, and refusal boundaries move. Teams that encoded behavior in incantations rewrite prompts under pressure after each upgrade; teams that encoded behavior in specifications plus evals mostly just re-run the suite and ship.
The discipline is boring on purpose: specification, examples, structured output, version pinning, golden-set evals, git. It is the same playbook software engineering already uses for every other dependency — the only new part is writing graders for outputs that are text instead of numbers.