Capítulo 14 de 17

Chapter 14: Versioning & Governance

Core Idea

A design system that other teams depend on needs the same release discipline as any published package — semantic versioning, a changelog, and a clear, lightweight process for proposing and reviewing changes — or consumers either freeze on an old version out of fear, or break unexpectedly on upgrade.

Key Concepts

  • Semantic versioning (semver) applied to components: patch (bug fix, no API change), minor (new prop/component, backward compatible), major (breaking prop rename/removal, visual redesign that breaks assumptions) — lets consumers judge upgrade risk from the version number alone.
  • Changelog discipline: every release documents what changed, why, and (for breaking changes) how to migrate — generated from commit conventions (e.g. Conventional Commits) where possible, so it can't be forgotten under deadline pressure.
  • Deprecation before removal: mark a prop/component deprecated (with a codemod or migration note) for at least one minor version before removing it in a major — gives consumers a warning window instead of a surprise break.
  • Contribution/governance process: a documented, lightweight path for someone outside the core design-system team to propose a new pattern or change an existing one (RFC-style proposal → design review → implementation review → release) — without this, teams route around the system with one-off components instead of through it.
  • Ownership model: most systems land on one of three models — a dedicated core team owning everything, a federated model where feature teams contribute under core-team review, or a hybrid (core team owns primitives, feature teams own product-specific patterns).

Mental Models

Version the API contract, not the visual design. A component can get a new visual treatment in a minor release if the props/behavior didn't change; reserve major bumps for actual breaking changes to what consumers can rely on.

Governance should feel like a fast lane, not a tollbooth. If proposing a change to the system is slower or more painful than just building a one-off component outside it, teams will bypass the system — the process needs to be lightweight enough that using it is the path of least resistance.

Anti-patterns

  • Silent breaking changes: renaming a prop or changing default behavior in a minor/patch release breaks consumer trust in the versioning scheme itself.
  • No deprecation window: removing something in the very next release after marking it deprecated gives consumers no realistic time to migrate.

Key Takeaways

  1. Apply real semver discipline to the component library — consumers should be able to judge upgrade risk from the version number alone.
  2. Always deprecate before removing, with a documented migration path (ideally an automated codemod).
  3. Make the contribution process lightweight enough that it's genuinely faster than building around the system — that's what keeps a system from fragmenting.
  4. Pick an explicit ownership model (centralized, federated, or hybrid) — an implicit, undefined one is where governance breaks down first.

Connects To

  • Ch 10 (Maintaining Design Systems): "make it official" and "make it adaptable" are the governance principles this chapter operationalizes.
  • Ch 16 (Adoption & Migration): what a major-version breaking change actually looks like from the consumer side.