api-change-management · git:20260728.fac4544 · 2026-07-28 · sha256 9f7c4685aae1031e
api-change-management git:20260728.fac4544A
Immutable. This exact content is served forever at /api/v1/blob/9f7c4685aae1031e.
--- name: api-change-management description: Classify API changes as breaking or compatible, evolve additively, and gate breaking changes with compatibility tests. Use when changing an API and needing to know whether it breaks consumers. --- # API change management Every API change is either safe (compatible: consumers keep working) or breaking (consumers break), and the single most valuable skill is telling them apart reliably. Get the taxonomy right, default to additive evolution, and enforce the classification with tests so a breaking change cannot ship by accident. ## Method 1. **Know the breaking-change taxonomy cold.** Breaking: removing or renaming a field/endpoint/parameter, changing a type, making an optional parameter required, tightening validation, changing a default, changing error codes or response structure, and (the sneakiest) changing semantics without changing the shape (a field that now means something different). Compatible: adding optional fields, adding endpoints, adding enum values (if consumers treat enums as open), relaxing validation (see schema-evolution: the same taxonomy across data and APIs). When unsure, treat it as breaking. 2. **Default to additive evolution.** Add new fields, endpoints, and optional parameters rather than changing existing ones; this covers the large majority of API growth without breaking anyone and without needing a new version (see api-versioning: additive is how you avoid versioning most of the time). The discipline is finding the additive way to make a change. 3. **Beware the semantic breaking change.** The dangerous one passes every structural compatibility check: the field is the same type and name, but now includes refunds in the total, or returns local time instead of UTC. No automated check catches this; it requires human awareness and, when unavoidable, a new field or a version, never a silent redefinition (see schema-evolution's identical warning). This one causes the most surprising outages. 4. **Enforce the classification with compatibility tests.** Contract tests (see contract-testing, pact-verification) and schema-diff checks in CI that flag breaking changes before merge (a removed field in the OpenAPI spec fails the build: see openapi-contracts): so a breaking change is a deliberate, reviewed decision, not an accident someone discovers in production. The tooling makes the taxonomy enforceable. 5. **When you must break, version and migrate.** A genuine breaking change goes through versioning (see api-versioning) and deprecation (see api-deprecation): new version alongside old, migration path, usage tracking, timeline. Never break in place on a stable API; the compatibility promise is what lets consumers depend on you. 6. **Communicate every change at the right volume.** Compatible changes: changelog (see changelog-writing). Breaking changes: prominent notice, migration guide, direct contact for major consumers (see api-deprecation, roadmap-communication). The change's blast radius determines the communication effort; a quiet breaking change is an ambush. ## Boundaries - The compatible/breaking line depends partly on how consumers are built: strict consumers break on additions they did not expect (a reason to publish consumer guidance: "ignore unknown fields", "treat enums as open"). Tolerant readers (see the robustness principle) make more changes safe. - Internal APIs with coordinated deploys can make breaking changes by updating all consumers together (see api-versioning's internal-vs-external); the taxonomy still tells you *that* it is breaking, which is what you need to know to coordinate. - This governs the API contract; the implementation behind it can change freely as long as the contract holds (that is the point of the contract: see openapi-contracts). Confusing internal refactors with API changes causes needless caution or needless breakage.