Model Migration Planner
Every few months a better/cheaper/faster model ships and every AI feature you run becomes a quiet question mark. Migration is where teams pay for eval debt: if you can't measure the feature, you can't migrate it — you can only gamble on it. This skill turns "the new model is out!" into a decision with evidence.
The prior to state up front: a model upgrade is a full change to your system's core dependency, wearing a minor-version costume. Prompts are tuned to a model's quirks; downstream parsers are tuned to its output shapes; users are tuned to its behavior. "Better on benchmarks" tells you almost nothing about your feature.
Step 0: Should you even migrate?
Three legitimate triggers — name which one this is, because it sets the deadline and the bar:
- Deprecation (forced): the question is only how and by when. Get the sunset date in writing; work back from it.
- Capability/quality pull: the new model might fix a known weakness. The bar: measurable improvement on the cases you currently fail, no regression elsewhere.
- Cost/latency pull: same quality, cheaper or faster. The bar: statistical parity on quality, with the savings quantified against migration cost (engineer-weeks are real money too).
"It's newer" is not a trigger. If there's no deprecation date and no pull, log a decision-log entry saying why not yet and stop here — declining a migration deliberately is a valid output of this skill.
Step 1: Inventory the blast radius
Most teams underestimate what's coupled to the model version. Enumerate:
- Call sites & pinned versions — every place the model id appears (code, config, env). Unpinned "latest" references are a finding in themselves.
- Prompts — system prompts and templates tuned to the old model's behavior (formatting quirks, instruction-following patterns, tone). These are the #1 silent breakage source.
- Output contracts — parsers, JSON schemas, downstream regex, UI assumptions about length/format.
- Guardrails and thresholds — confidence cutoffs, refusal handling, token/cost budgets calibrated to old-model behavior.
- Past decisions — search
~/bettersense-work-reflections/decision-log entries (and any ADRs the user has) mentioning the old model. Decisions made because of old-model behavior ("we chose few-shot because zero-shot was weak") may now be reversible — each is both a risk and an opportunity. This is exactly the payoff decision-log was built for.
Step 2: Eval before belief
- Golden set exists? Run it on the new model, unchanged prompts first. That's the honest baseline of "what migration costs for free."
- No golden set? Stop and say so plainly: the migration is unmeasurable and step one is a minimal eval (hand off to
the-eval-designer — even 30 curated cases beats vibes).
- Compare per-case, not just aggregate: a new model that fixes 10 cases and breaks 8 different ones looks like "+2" in aggregate and feels like a regression to the 8 affected users. Categorize the flips.
- Then, and only then, re-tune prompts for the new model on the failing cases — and re-run the full set after every prompt change (fixing case 12 by breaking case 40 is the classic).
- Re-baseline cost and latency on real traffic shapes: tokenizer changes and different verbosity mean per-request economics move even when the price sheet looks better.
Step 3: Stage the rollout
- Shadow (run both, compare, serve old) → canary (5–10% of traffic, watch quality signals and complaint channels) → ramp — with an explicit gate at each step.
- Rollback criteria written before the canary starts: which metric, what threshold, who flips it back. If rollback isn't cheap (old model already sunset?), say so — that changes how conservative the ramp must be.
- Decide the comms: whether users are told, and what support/CS should watch for. A model migration is a product change;
the-explainer and the-gtm-planner own the messaging when the behavior shift is user-visible.
Step 4: Close the loop
decision-log entry: which model, why, what the eval showed, the rollback trigger, and a revisit date (the next model release, at the latest).
- Fold every case that flipped during migration into the golden set — this migration's surprises are the next migration's regression tests.
- Update the inventory from Step 1 (it's the starter kit for next time; there is always a next time).
Anti-patterns
- Benchmark transference. "It's better on SWE-bench" ≠ better at summarizing your contracts. Only your eval counts.
- Prompt archaeology skipped. Migrating prompts verbatim and calling the diff "model regression" — half of it is usually prompt-model mismatch, which is fixable.
- The big-bang cutover. 100% traffic on day one because "the evals passed." Evals are a sample; canaries exist because samples lie.
- Migration as a side quest. "Just swap the string" assigned to whoever's free. The inventory in Step 1 is the argument for treating it as a real project.
Composition
the-eval-designer — builds the golden set this skill depends on
decision-log — both input (old decisions to revisit) and output (the migration decision)
ai-pm-frameworks — model-selection criteria when the migration is also a provider question
the-vendor-evaluator — when deprecation forces a provider comparison, not just a version bump
the-incident-responder — if a migration ships and quality craters, that's an incident; this skill's rollback criteria are its first input
the-translator — explaining the migration (and its risks) to executives
1---2name: model-migration-planner3description: Model Migration Planner4---56# Model Migration Planner78Every few months a better/cheaper/faster model ships and every AI feature you run becomes a quiet question mark. Migration is where teams pay for eval debt: if you can't measure the feature, you can't migrate it — you can only gamble on it. This skill turns "the new model is out!" into a decision with evidence.910The prior to state up front: **a model upgrade is a full change to your system's core dependency, wearing a minor-version costume.** Prompts are tuned to a model's quirks; downstream parsers are tuned to its output shapes; users are tuned to its behavior. "Better on benchmarks" tells you almost nothing about *your* feature.1112## Step 0: Should you even migrate?1314Three legitimate triggers — name which one this is, because it sets the deadline and the bar:1516- **Deprecation** (forced): the question is only *how and by when*. Get the sunset date in writing; work back from it.17- **Capability/quality pull**: the new model might fix a known weakness. The bar: measurable improvement on the cases you currently fail, no regression elsewhere.18- **Cost/latency pull**: same quality, cheaper or faster. The bar: statistical parity on quality, with the savings quantified against migration cost (engineer-weeks are real money too).1920"It's newer" is not a trigger. If there's no deprecation date and no pull, log a `decision-log` entry saying *why not yet* and stop here — declining a migration deliberately is a valid output of this skill.2122## Step 1: Inventory the blast radius2324Most teams underestimate what's coupled to the model version. Enumerate:2526- **Call sites & pinned versions** — every place the model id appears (code, config, env). Unpinned "latest" references are a finding in themselves.27- **Prompts** — system prompts and templates tuned to the old model's behavior (formatting quirks, instruction-following patterns, tone). These are the #1 silent breakage source.28- **Output contracts** — parsers, JSON schemas, downstream regex, UI assumptions about length/format.29- **Guardrails and thresholds** — confidence cutoffs, refusal handling, token/cost budgets calibrated to old-model behavior.30- **Past decisions** — search `~/bettersense-work-reflections/decision-log` entries (and any ADRs the user has) mentioning the old model. Decisions made *because of* old-model behavior ("we chose few-shot because zero-shot was weak") may now be reversible — each is both a risk and an opportunity. This is exactly the payoff `decision-log` was built for.3132## Step 2: Eval before belief3334- **Golden set exists?** Run it on the new model, unchanged prompts first. That's the honest baseline of "what migration costs for free."35- **No golden set?** Stop and say so plainly: the migration is unmeasurable and step one is a minimal eval (hand off to `the-eval-designer` — even 30 curated cases beats vibes).36- Compare per-case, not just aggregate: a new model that fixes 10 cases and breaks 8 different ones looks like "+2" in aggregate and feels like a regression to the 8 affected users. Categorize the flips.37- **Then, and only then, re-tune prompts** for the new model on the failing cases — and re-run the full set after every prompt change (fixing case 12 by breaking case 40 is the classic).38- Re-baseline **cost and latency** on real traffic shapes: tokenizer changes and different verbosity mean per-request economics move even when the price sheet looks better.3940## Step 3: Stage the rollout4142- **Shadow** (run both, compare, serve old) → **canary** (5–10% of traffic, watch quality signals and complaint channels) → **ramp** — with an explicit gate at each step.43- **Rollback criteria written before the canary starts**: which metric, what threshold, who flips it back. If rollback isn't cheap (old model already sunset?), say so — that changes how conservative the ramp must be.44- Decide the comms: whether users are told, and what support/CS should watch for. A model migration is a product change; `the-explainer` and `the-gtm-planner` own the messaging when the behavior shift is user-visible.4546## Step 4: Close the loop4748- `decision-log` entry: which model, why, what the eval showed, the rollback trigger, and a revisit date (the next model release, at the latest).49- Fold every case that flipped during migration into the golden set — this migration's surprises are the next migration's regression tests.50- Update the inventory from Step 1 (it's the starter kit for next time; there is always a next time).5152## Anti-patterns5354- **Benchmark transference.** "It's better on SWE-bench" ≠ better at summarizing your contracts. Only your eval counts.55- **Prompt archaeology skipped.** Migrating prompts verbatim and calling the diff "model regression" — half of it is usually prompt-model mismatch, which is fixable.56- **The big-bang cutover.** 100% traffic on day one because "the evals passed." Evals are a sample; canaries exist because samples lie.57- **Migration as a side quest.** "Just swap the string" assigned to whoever's free. The inventory in Step 1 is the argument for treating it as a real project.5859## Composition6061- `the-eval-designer` — builds the golden set this skill depends on62- `decision-log` — both input (old decisions to revisit) and output (the migration decision)63- `ai-pm-frameworks` — model-selection criteria when the migration is also a provider question64- `the-vendor-evaluator` — when deprecation forces a provider comparison, not just a version bump65- `the-incident-responder` — if a migration ships and quality craters, that's an incident; this skill's rollback criteria are its first input66- `the-translator` — explaining the migration (and its risks) to executives