Your team is starting a design system for a public library catalog's web and mobile apps; why build it inside one pilot product first rather than for every product at once?
answer
- real requirements beat imagined ones
- short feedback loop
- a working showcase persuades
- overfitting to one product
- second consumer before promoting
basics
~20 sA pilot product supplies real requirements, fast feedback and a working reference before others depend on the system. Its main risk is overfitting, so keep system code separate from the pilot and validate with a second consumer before promoting it.
solid answer
~50 sBuilding for every product at once turns each component into a negotiation among teams with different needs, and produces speculative APIs with no feedback loop. A pilot product — say the catalog's web search experience — gives the system real screens, real edge cases and a partner team that says within days when an abstraction is wrong, while it is still cheap to change. It also yields a working showcase that argues for adoption better than a roadmap. The main risk is **overfitting**: names, options and layouts that only suit the pilot, or a system others see as that team's library. I contain it by keeping system code in its own package from day one, naming by purpose rather than by pilot screens, bringing the mobile team into design reviews early, and treating pieces as candidates until a second product has used them.
go deeper
Recall that a pilot product is where the system is first built and used for real, so components are tested on actual screens before other teams rely on them.
Explain the mechanism: real requirements and a short feedback loop replace speculative APIs, while a second consumer checks that pilot-grown pieces are general.
Show how you contain overfitting and entanglement: a separate package from day one, purpose-based names, early reviews with another team, and candidate status until a second product uses a piece.
Treat the pilot as a credibility investment: a visible early win can fund the system, but a pilot that captures ownership can cost the trust of every other team.
## The pilot-product approach A **design system** — the shared foundations, components and guidance that many product teams consume — can be built in the abstract for every product at once, or inside one **pilot product** that uses each piece as it is created. The pilot approach builds the system alongside real feature work in one product, then widens to others once the pieces are proven. This question is about *why* that shape works and how it fails. Choosing which team to pilot with, and what the first release contains, are separate decisions. ## Why not build for everyone at once - **Design by committee** — every component becomes a negotiation among teams with different needs, and compromises pile up as extra options. - **Speculative APIs** — without a consumer, variants and options are guesses that tend to be too many or the wrong ones. - **No feedback loop** — problems surface only after several teams have built on the pieces, when changing them is expensive. - **Slow visible value** — nothing reaches users for a long time, which weakens support for the effort. ## What a pilot product gives the system - **Real requirements** — actual screens, data, content lengths and platform constraints instead of imagined ones. - **Fast feedback** — a partner team reports within days that an abstraction is awkward, while it is still cheap to change. - **A reference implementation** — shipped screens that show other teams what using the system looks like. - **Credibility** — a working example argues for adoption better than a plan does. ## The risks, and how to contain them | Risk | Symptom | Containment | |---|---|---| | Overfitting | Names, options or layouts only make sense on pilot screens | Name by purpose; review designs with a second product before release | | Entanglement | System code reaches into the pilot's data, navigation or state | Keep system code in its own package with its own tests from day one | | Ownership capture | Other teams see it as the pilot team's library | The system team owns the shared model; pilot-specific requests stay in the product | | Premature promotion | Others adopt pieces only one product has exercised | Treat pieces as candidates until a second consumer has used them | A common heuristic is to generalise a pattern only once it appears in two or three places. It is a habit, not a law — foundations such as color and type are shared from the start — but it guards against abstracting from a single example. ## Running it on a library catalog 1. Build inside the catalog's web search experience: result rows, availability labels, filters and the place-hold action are created as system pieces while the feature ships. 2. Keep every piece in the shared package rather than in the web app, with its own documentation and tests. 3. Invite the mobile team into design reviews early, so each component's model makes sense on both platforms before it is called stable. 4. Let the mobile app become the second consumer; whatever breaks there is overfitting to fix now, not later. 5. Widen to other products once pieces have survived both consumers. ## When the pilot shape needs adjusting A pilot teaches less if the chosen product is atypical — a one-off internal tool reveals little about a customer-facing app — or if its deadline is so tight that the team cannot afford to give feedback. The usual remedy is not to abandon the approach but to pair the pilot with an early second consumer, or to pilot a narrower slice such as the foundations alone. The underlying principle stays the same: let real use shape each abstraction before many teams depend on it.
- How do you stop a pilot product's priorities from dominating the design system?Agree up front that the system team owns the shared model and the pilot team owns its product. Keep a visible list of requests, tag what is pilot-specific, and solve those in the product rather than the system. Bring a second product into design reviews early, so general needs are argued by someone other than the pilot.
- Should the pilot product's component code simply become the design system's code?Not directly. Treat pilot components as candidates: move them into a separate package with their own tests and documentation, strip product data fetching and page-specific layout, and rename them by purpose. Otherwise the system quietly depends on the pilot's internals, and every pilot refactor becomes a breaking change for other consumers.
saying these in an interview costs you the question
- A successful pilot proves the system is general enough for every product.
- The pilot team's components can be published to other teams unchanged.
- Designing for all products at once guarantees the most general components.
- In a pilot, the pilot team takes over maintaining the shared system.
- Once the pilot product ships, the design system is finished.