Every model upgrade breaks somebody's prompts, and it's almost never because the new model is worse. It's because the old prompt was quietly relying on a quirk of the previous model's training — a specific phrasing that happened to trigger the right behavior, a delimiter style the model was overfit to, or a workaround for a weakness the new model no longer has. The prompts that survive upgrades are the ones written against the model's actual capabilities, not its accidents.
Write instructions, not incantations
The most brittle pattern in production prompts is the "magic phrase" — a sentence someone found through trial and error that happened to fix a specific failure mode, copy-pasted forward without anyone remembering why it's there. "Take a deep breath and think step by step" was a real, empirically useful prefix on older models. On newer reasoning-tuned models it's often inert or actively confusing, because the model already reasons internally and the instruction reads as noise. Audit prompts for lines that describe how to think rather than what you want — those age the worst.
Structure over persuasion
Prompts that rely on structure (clear sections, explicit input/output boundaries, numbered constraints) degrade more gracefully than prompts that rely on persuasive framing ("you are the world's best analyst, this is extremely important"). Newer models are trained to follow structured instructions well by default, so a well-organized prompt tends to get better on upgrade, while a persuasion-heavy one just looks dated.
## Task
Summarize the ticket below in 2 sentences.
## Constraints
- No speculation about root cause unless stated in the ticket
- Preserve customer-facing terminology exactly
## Input
{ticket_text}
## Output format
Plain text, no markdown.This survives upgrades because it's describing a contract, not performing a persona.
Pin behavior with examples, not adjectives
"Be concise" means something different to every model version. A single well-chosen few-shot example of the exact output length and tone you want is far more durable than an adjective, because it constrains behavior structurally rather than relying on the model's interpretation of a vague word. When you do use few-shot examples, keep them minimal — one or two is usually enough, and large example blocks can anchor the model to surface patterns in the examples that don't generalize to new inputs.
Separate the stable core from the tuned edges
Split every production prompt into two layers conceptually: the stable core (task definition, output contract, hard constraints) and the tuned edges (a handful of few-shot examples or phrasing tweaks that were adjusted empirically for the current model). Version these separately. When a new model ships, the core prompt should need zero changes — only the tuned edges get re-validated against your eval set.
| Layer | Changes on upgrade? | Example |
|---|---|---|
| Core | Rarely | Output schema, task definition, hard constraints |
| Tuned edges | Often | Few-shot examples, emphasis phrasing, workarounds |
Regression-test prompts like code
The single highest-leverage habit is maintaining a small eval set — 30-100 representative inputs with expected properties (not exact strings, but checkable properties like "contains no PII" or "cites a valid ticket ID") — and running it against every candidate model before switching. This turns "the new model broke our prompts" from a production incident into a five-minute diff you catch before deploy. Prompts that pass this bar tend to be exactly the ones written as explicit contracts rather than persuasive essays, which is the real reason the two habits — testing and structured writing — reinforce each other.