EN
Field notes
All field notes

Keeping a design system alive: ownership, debt and small regular fixes

Most design systems don’t die in a crisis. They erode, quietly and gradually: a local override here, a detached component there, a colour typed in by hand because the token felt too far away. By the time anyone notices, the remedy looks like a rewrite. I would much rather look after a system with small, regular care than try to rescue it once a year.

Why systems fade

A design system is easy to admire at launch. Everything is new, documented and coherent, and every team is glad to adopt it. Then the real work begins. A deadline looms, a component is almost right, and copying it seems quicker than requesting a change. Nobody does anything wrong, and yet the system drifts a little further from the products it was meant to serve.

The shortcut itself is not the problem; shortcuts are, if anything, evidence that people are shipping. The problem is that nobody sees them accumulate, and nobody is accountable for reconciling them.

Someone has to own it

A system needs a single, clearly identified owner, rather than a committee or, worse, “everyone”. The owner decides what enters the library, what changes and what stays out, and has the standing to say no. That does not mean doing all the work alone. It means that every question has an address and every decision carries a name.

When ownership is shared by everyone, in practice it belongs to no one, and the library gradually becomes a repository of good intentions.

Field noteA design system without an owner is a shared folder with good intentions.

Debt is normal, silence is not

Every living system accrues debt: overrides, detached instances, hard-coded values, components designed for last year’s problem. I do not regard that as failure. I regard it as information, a record of where the system no longer fits the work. What matters is that the debt is visible, recorded in one place everyone can consult, rather than living in somebody’s memory.

Small fixes, every sprint

The habits that keep a system alive are unglamorous, and that’s deliberate. A modest share of every sprint belongs to the system rather than to new features, and it remains there even when the deadline grows insistent. Every change is entered in a changelog with a sentence explaining why, so that the products can follow it with confidence rather than fear.

The library also has a place of its own to learn from, with examples and rules, so that someone new doesn’t have to wait for a meeting to begin. And before anything new is admitted, I look for something old that can be retired. A leaner system is simply easier to keep alive.

What changes

Teams stop working around the system, because requesting a change becomes quicker than copying a component. Updates cease to be daunting, because each one is small and explained. And the system retains its value long after launch, which is, after all, the only reason to build one.

On my most recent large project, the library ran as a separate learning space alongside the products, and every change was entered in the changelog with a brief rationale. Newcomers could find answers on their own, and the products could follow the library without a disruptive migration.

When a rewrite is the right call

Occasionally, small fixes are not enough. When the foundation itself is flawed, for instance tokens that conflate meaning with value, or components built for a product that no longer exists, patching only spreads the problem further. In that case I rewrite once, carefully, and establish the habits that make a second rewrite unnecessary.

A design system is never finished. That may sound exhausting, but it is in fact rather good news: it means people are still using it.

Jelena Racković

Jelena Racković

Chief of Product Development in the IT industry and founder of absolute relative. Designing brands, products and design systems since 2008, from a blank page to a shipped product.

Read next

Mindset

Theory of nothing: an empty set is still a set

3 min read