Skip to content
Back to Design Hub

Design System Governance & RFC Process

Contribution models, change request workflows, and decision rights for a healthy design system.

Design SystemsIntermediate

Why

Without governance, a design system becomes a free-for-all: every team adds one-off variants, the API surface explodes, and nobody knows who owns what. A lightweight RFC process keeps the system coherent while still accepting contributions.

According to the 2024 Spark Design Systems survey, 78% of organizations with a design system report faster product delivery. JavaScript is used by 62% of developers per the Stack Overflow 2024 survey and component libraries that align with design tokens cut handoff time by 60%.

When

Introduce governance once 3+ teams consume the system. Earlier, the maintainer team can review PRs directly; later, formalize an RFC council with rotating reviewers.

How

1. Define ownership — CODEOWNERS file maps each directory to a maintainer team 2. RFC template — title, motivation, proposal, tradeoffs, rollout, rollback 3. Triage — small changes (typo, bug) skip RFC; medium need 1 reviewer; breaking need 2 + council 4. Decision rights — who can approve tokens vs components vs breaking API 5. Versioning — every merged RFC ships a changeset with semver bump 6. Deprecation path — old API kept for 1 minor release with console.warn + migration guide

Example

// changeset.md — governance via changesets import { Config } from "@changesets/types"; const config: Config = { changelog: ["@changesets/changelog-github", { repo: "org/design-system" }], commit: false, access: "public", baseBranch: "main", updateInternalPackages: true, }; // button.tsx — the proposed change interface ButtonProps { size?: "xs" | "sm" | "md" | "lg"; // adding "xs" per RFC } const sizes = { xs: "h-6 px-2", sm: "h-8 px-3", md: "h-10 px-4", lg: "h-12 px-6" }; # RFC: Add `size="xs"` to Button ## Motivation Marketing landing pages need a denser CTA; current `sm` (32px) is too tall for hero variants. ## Proposal Add `xs` (24px) to Button size union. Reuse existing padding tokens, no new color. ## Tradeoffs + Unblocks 3 landing-page PRs - Adds a 4th size to maintain; consider deprecating `lg` instead ## Rollout - Ship in 2.1.0 behind no flag (additive, non-breaking) - Update Storybook + Figma component in same PR ## Rollback Revert is safe; no consumer depends on `xs` yet. ## Reviewers @design-lead @frontend-lead (breaking? No → 1 reviewer)

Common Problems

  • ⚠RFC process too heavy — every typo requires a 2-week RFC, contributors give up and fork
  • ⚠No CODEOWNERS — PRs sit unreviewed because nobody is assigned, system stagnates
  • ⚠Breaking changes ship without migration guide — consumers upgrade and everything breaks

Best Practices

  • ✓Tier changes by risk — typo/bug skip RFC, additive needs 1 reviewer, breaking needs council + migration guide
  • ✓Automate changesets — CI fails if a PR touches components without an accompanying changeset
  • ✓Publish a public roadmap — consumers see what's coming and can plan migrations

FAQ