Skip to main content

Back to insights

Product & User Experience7 min read

When Is the Right Time to Build a Design System?

Not every product needs one. Built too early, a design system costs more than the problem it was meant to solve.

Norvane Team

"Let's build a design system" is usually said as though it were a threshold: today there isn't one, tomorrow there will be.

In practice a design system is a scale rather than a threshold. If two people are working on a product, shared decisions already exist — even where nobody has written them down. The question is not whether to have one, but which level of it is worth paying for right now.

Teams that skip that question tend to err in one of two directions: never formalising anything and re-deciding the same details on every screen, or building something far larger than the product needs and then failing to maintain it.

A design system is not one thing

Four quite different levels of maturity get discussed under the same name, and they are not interchangeable.

Shared decisions. Colour, a type scale, spacing rhythm, corner radius — values settled once and reused. Often just a handful of tokens, and worth having for almost any product, even early.

A component library. Buttons, form fields, modals and the like defined in one place. The payoff starts around the third time the same piece would otherwise be rewritten.

Documented patterns. Not how a component looks, but when it is used. "Modal or separate page?" is answered here, and this is the layer most teams are genuinely missing.

A governed system. How change is proposed, who decides, how versioning works. This level assumes more than one product or more than one team.

The first level is right for nearly everyone. The fourth is never needed by most companies.

The cost of building too early

A design system is an abstraction, and every abstraction is an attempt to predict a pattern that has not been observed yet.

A component library built while the product is three screens generalises the needs of those three screens. When the fourth arrives, the component either doesn't fit or acquires eight new parameters so that it can. A button with eight parameters has stopped being a component and become a small language — one that is harder to learn than writing the thing from scratch.

The second cost is speed. Early on, the real risk is not inconsistency but building the wrong product. A setup where every change has to pass through the system makes experimenting more expensive exactly when experimenting matters most.

The third is maintenance. A system is a product too: it has versions, documentation and users. One that nobody owns stops matching reality within a few months — and documentation that is wrong costs more than documentation that never existed.

The cost of leaving it too late

The opposite failure arrives more quietly.

Inconsistency does not appear all at once; it accumulates as a small deviation on each screen. A year later the product contains seven greys, four button heights and two different form behaviours. None of them is wrong on its own. Together they make the product feel unassembled.

The more concrete cost shows up at the moment of change. Updating a brand colour or altering how form fields behave turns into an exercise in search and archaeology. At that point a redesign tends to look larger than it should, because even a small change means opening everything.

The third cost lands on the team. Without written decisions, every new screen starts with a negotiation, and the same discussion recurs every few months.

Signals that you're ready

The following suggest that growing the system has become reasonable.

You are writing the same component for the third time. Twice is not yet a pattern; three times is a fact.

More than one person is working on the interface. Where shared decisions are unwritten, divergence is only a matter of time. On a single-person product the system usually lives in that person's head, and for a while that is genuinely enough.

The product has survived its first redesign. What is permanent and what was temporary is now known by observation rather than prediction, which removes most of the risk of generalising too soon.

The same question keeps being reopened on different screens — "should this be a modal?" — which means what's missing is not a component but pattern documentation.

Where to start

The most common mistake is starting with components. The safer order runs the other way.

Tokens come first: colour, type scale, spacing, radius, elevation. These are independent of what the product actually does, carry no predictive risk, and on their own close most of the inconsistency.

Naming those tokens involves a choice that largely determines how long the system lasts. Naming a colour for what it looks like — blue-500 — is easier on day one, but when the brand colour changes you are left with a token whose name is wrong everywhere it appears. Naming it for its role — action-primary, border-quiet — takes slightly more thought at the start and reduces that change to a single place.

The same applies to spacing and type: naming the steps of a scale survives far better than writing raw pixel values at each use.

Then the three most repeated components — usually a button, a form field, and some kind of card. Three, not all of them.

Pattern documentation is the most skipped and highest-return part. How a component looks can be read from the code; when to use it cannot. Writing that down is a few paragraphs of work and ends most of the recurring arguments.

The system should grow by following the product. As noted in balancing visual design and usability, a good system does not forbid exceptions — it makes them visibly deliberate.

The real test comes after it's built: adoption

A system built at exactly the right moment can still fail. The most common way is that it exists and nobody uses it.

This is usually friction rather than bad faith. If adding a component to the system is harder than writing that component directly into the screen, anyone under delivery pressure will choose the second. A few months later, the system describes only part of what the product actually uses.

The second version is a system that does not meet the need. A designer who cannot find the variant they want makes a new one; if that variant never returns to the system, the system starts falling out of date.

The distinguishing habit here is straightforward: keep the feedback path open instead of forbidding exceptions. If "I couldn't find this in the system, so I did it this way" has somewhere to go, the system stays alive. If it doesn't, documentation slowly turns into fiction.

Drift between the design file and the code

Most systems live in two places at once: the design tool and the codebase. Updated separately, the gap between them widens.

The symptoms are familiar. A spacing value is 8 in the design and 10 in the product. The grey in the file is slightly not the grey in the code. A component has three variants in design and five in the implementation.

Each difference is small and none of them is a defect. Accumulated, though, the design file stops functioning as a reference — and because nobody is sure which version is authoritative, the team starts doubting both.

Tokens generated from a single source remove most of this drift. Setting that up early is a few hours of work; retrofitting it means comparing two systems by hand.

Design system decision

  • Has the same component been written three or more times?
  • Is more than one person working on the interface?
  • Are tokens (colour, type, spacing) defined in a single place?
  • Is the same design argument recurring across different screens?
  • Is it written down when a component should be used, or only how it looks?
  • Is there an owner who will maintain the system?
  • Is it clear how an exception gets recorded when one is needed?
  • Is the level being built proportionate to the product's current size?

In closing

A design system is not a maturity badge. It is a maintenance obligation that pays for itself at the right size and becomes work in its own right when it outgrows the product.

The practical test is simple: if the system shortens the team's day, it is the right size. If the team's day is spent updating the system, the work has stopped being about the product. Asking that question once a quarter catches the moment it outgrows you.

For most products the honest answer is neither yes nor no but "tokens and three components, for now" — a position worth revisiting as the product grows, which is how we treat it in our product design work.