TL;DR

Moved a SaaS from à-la-carte feature subscriptions (pay per feature) to plans-only (pay for a tier, get its features).

Did it in four phases so nothing broke mid-flight: seed plans → gate on plans → migrate orgs → delete the old machinery.

Lesson: model migrations are safest as expand → migrate → contract, not a big-bang swap.

The problem