Versioning and Deprecation
How the system changes without breaking the products built on it.
Definition
Versioning communicates the nature of a change; deprecation is the process of retiring something with enough notice and support that consumers can migrate. Both are what allow a system to evolve at all.
Craft convention. True because the industry converged on it. Breaking it costs familiarity, not correctness.
On this plate
Reach for this when
- Changing anything consumed by other teams.
- Retiring a component or token.
- Planning a major version.
Common mistakes
- Deprecating before a replacement exists.
- Breaking changes shipped in minor versions.
- No migration tooling.
- Visual changes treated as non-breaking.
What counts as breaking
- Removing or renaming a prop, a token or a component.
- Changing default behaviour, which is breaking even when the API is unchanged.
- Visual changes large enough to alter layout, since consumers build around dimensions.
- Changing keyboard behaviour or accessible names, which breaks tests and user habits.
A deprecation that works
- 1
Announce with a reason
Say what is being retired, why, and what replaces it.
- 2
Ship the replacement first
Never deprecate before the alternative exists and is documented.
- 3
Warn in place
Console warnings in development, and a notice on the documentation page.
- 4
Provide migration tooling
A codemod, or at minimum a precise before-and-after guide.
- 5
Give a real notice period
Long enough for teams to fit it into a planning cycle, and state the removal date.
- 6
Remove
In a major version, not a minor one.
Semantic versioning, applied to a design system
Standard semver says nothing about pixels, so the visual cases are where teams improvise. These are the defaults worth agreeing in advance.
| Change | Release | Also required |
|---|---|---|
| New component or new variant | Minor | Documentation published with the release, not after it. |
| New optional prop, default matching current behaviour | Minor | The default stated explicitly in the notes. |
| Fix with no visual or API change | Patch | Nothing beyond the changelog line. |
| Token value changed | Major if it moves layout or contrast, minor otherwise | Before and after screenshots in the release notes. |
| Prop removed or renamed | Major | A codemod, and a deprecation shipped at least one minor earlier. |
| Default behaviour changed | Major | An opt-out kept for at least one major version. |
| Accessible name or keyboard behaviour changed | Major | A direct notice to teams whose tests assert on it. |
Shipping change without spending trust
Do
- Run the old and the new side by side for at least one minor version.
- Put the removal date in the runtime warning, not only in the changelog.
- Batch breaking changes into a planned major rather than dripping them out.
- Write release notes that answer the consumer's actual question: what do I have to do.
Do not
- Do not deprecate by deleting the documentation page. The component is still in production.
- Do not release a major without a migration guide that works for someone who did not write it.
- Do not fix a defect by changing a default. Fix it behind a flag and switch the default at the next major.
- Do not version tokens and components separately unless you are prepared to publish and maintain the compatibility matrix.
Local chart
SYS·006 · Region VI · Grid D3
This entry and the entries it is stated to connect with. Each line is labelled with what the connection means.
Continue from here
Each link says what the connection is, so you can tell a principle from an alternative from a thing people mix this up with.
Principles behind this
The reasoning this solution is an application of.
- Loss AversionBIAS·002 · Cognitive bias
- Status Quo BiasBIAS·005 · Cognitive bias
Often used with
These usually appear in the same screen or the same decision.
- ChromaticTOOL·041 · Tool
Practical example
A worked decision where this was the deciding factor.
- Migrating Product Teams onto a Design SystemCASE·003 · Case study
Short definition
The one-paragraph version, for when that is all you need.
- DeprecationTERM·089 · Term
- Feature FlagTERM·099 · Term
- Semantic VersioningTERM·090 · Term
- Single Source of TruthTERM·087 · Term
Related concept
Connected closely enough to change how you apply this.
- Component API DesignSYS·002 · Design system
- Design System AdoptionSYS·005 · Design system
- Design System DocumentationSYS·003 · Design system
- Design System GovernanceSYS·004 · Design system