EduFlow

Section 5 · Adoption at Scale

Contribution and Governance

18 min3 min readPut in order

Lesson at a glance

Run a contribution model with clear tiers for fixes, enhancements and new components, triage requests with a decision flow, and set up lightweight governance that decides quickly and in the open.

  1. 1Three tiers of contribution
  2. 2Triage: where does a request belong?
  3. 3Governance without a bureaucracy

No video here — just the real thing: a written lesson, runnable examples, a quiz and practice.

In Northwind’s first year of opening contributions, we received 112 pull requests and merged 41. Most of the rest died waiting: for an API review that had no schedule, for a designer who was on another project, for a decision nobody felt allowed to make. Teams learned the lesson fast. By month nine, contributions had almost stopped, and three teams had started their own component folders again. A contribution model isn’t a document; it’s a promise about how quickly and fairly the core team will respond.

Three tiers of contribution

The fix was to stop treating every contribution the same. Northwind now has three tiers, each with its own path:

Tier Examples Path First response
Fix Bug, docs error, missing story Pull request, one core reviewer 2 business days
Enhancement New variant, new prop, new token Short proposal issue, then pull request 1 week
New component Date picker, data table RFC, API review, then build with a core pair 2 weeks for a decision

A fix needs no permission. An enhancement needs a short written case: what problem, which teams, and the proposed API snippet, because props are public API forever. A new component needs a request for comments (RFC), a document that lays out the problem, evidence from at least two teams, the API sketch, the state matrix and the accessibility plan. The RFC gets discussed at the weekly API review, and someone leaves with a decision.

CODEOWNERS makes the routing automatic: the core team owns the token files and the public API exports, so any change to them requests a core review, while docs pages can be approved by any experienced contributor.

Triage: where does a request belong?

Decision flow. Can an existing component do it, maybe with better docs? If yes, point to it. If no, do two or more teams need it? If no, build it locally from system parts. If yes, contribute it to the system with a core pair. Request Existing component covers it? Point to it, fix docs Two or more teams need it? Build locally RFC and contribute yes no no yes
How Northwind triages a new component request

Most requests end at the first question. About half of Northwind’s “new component” requests turn out to be an existing component that the docs didn’t make findable, which becomes a docs fix.

The second question is where teams get nervous, because “build it locally” sounds like rejection. It isn’t. A one-team component built from system tokens and components looks native and costs the system nothing to maintain. Northwind keeps a list of these local components, with owners, and checks it every quarter. When a second team needs something on the list, the original becomes the starting point for an RFC. Three of our current components, including the date picker, started this way.

Governance without a bureaucracy

Governance is how decisions get made when people disagree. Northwind’s version fits on one page:

  • The core team decides on anything that becomes public API, after hearing from the teams affected.
  • Decisions happen in the open, at the weekly API review that anyone can attend, or asynchronously in the RFC.
  • Arguments cite the principles and evidence, such as usage numbers or research findings, not job titles.
  • Every decision is written down in a decision log with its reasons, so it can be revisited when the evidence changes rather than re-argued from memory.

Speed matters as much as fairness. A clear “no” in two weeks is better for a product team than a “maybe” for two months, because they can plan around a no.

In the exercise, you put a new component’s path into the system in order. Next, you scale the theming architecture to a second brand.

Key takeaways

  • Match the process to the size of the contribution; a typo fix and a new component should not go through the same gate.
  • A new component enters the system when several teams need it, not when one team built it first.
  • Building something locally is a legitimate outcome of triage, and the system should make that easy rather than shameful.
  • Governance works when decisions are fast, written down and argued from the principles, not from seniority.

Further reading

Check your understanding

3 questions

Question 1 of 3

A team fixes a typo in the Tabs documentation and opens a pull request. The contribution guide requires an RFC and an API review for every change. What’s the likely outcome over time?

Question 2 of 3

The billing team asks the system to add an InvoiceTimeline component. No other team has a similar need. What does Northwind’s triage recommend?

Question 3 of 3

Two senior designers disagree about whether Select should allow free-text entry. Which governance approach resolves it best?

Practice

Put in order

Bring a date picker into the system

The dispatch team built a good date range picker locally. Now the billing and reporting teams want one too. Put the steps that take it into Northwind UI in order, following the contribution model from the lesson.

Use the arrow buttons to reorder.

  1. 1Discuss it at the weekly API review and record the decision and its reasons
  2. 2Confirm that no existing component, or better docs for one, already covers range selection
  3. 3Rebuild the picker in the system repository with a core designer and engineer pairing
  4. 4Collect the use cases from the dispatch, billing and reporting teams
  5. 5Ship it with stories, docs and a changeset, crediting the dispatch team in the release notes
  6. 6Write an RFC with the API sketch, state matrix and accessibility plan