Skip to content
Return to Log
2026-06-02Design IntelligenceEssay
Read on Substack

The Anti-Fragile Design System

The rebrand shipped on Monday. By Tuesday morning an engineer was opening a pull request for a button. The hex they needed was not in tokens. The new palette had introduced a value the system did not yet know about, and the deadline did not care. They wrote the color inline, marked the override with a TODO, and pushed.

Three months later, that hex appeared in forty-seven places.

The system survived the rebrand. It also got measurably worse from it. Every team that has been through this knows the feeling. Few have a name for it.

Most design systems live somewhere between robust and fragile. A robust system survives disorder without changing. It absorbs the rebrand, the platform migration, the new product surface, and emerges the same shape it was before. A fragile one breaks in non-obvious places. A single platform migration reveals how much was held together by shared assumption rather than architecture.

Both are reactive. Both treat production stress as something to weather. The version of your product that exists today is the version your design system was not designed for. The system either holds the line or fails along an axis nobody mapped.

Nassim Taleb named a third state. Antifragile: not just surviving disorder, but improving from it. Bones thicken under the load that could have broken them. An immune system gets stronger from the exposure that could have made it sick. The stress is not survived. It is metabolized. A design system can do the same thing, on one structural condition: it needs a feedback channel. A way to take production stress and turn it into the system's next version.

Most design system maintenance operates in one direction. Drift is identified, then corrected. Components are built, documentation eventually catches up. This keeps the system alive but does not improve it.

A second direction is missing. Every override an engineer writes inline, every component extended with a one-off variant, every place a designer reaches for a value the tokens do not yet name. These are information the system has not yet absorbed.

The architectural move is to build a channel that catches the information and classifies it. Four categories, no more. A token evolution candidate (the vocabulary has a real gap and the signal will repeat). A component extension candidate (the existing component has an unexpressed state or variant the work is asking for). A documentation update (the value is correct; the docs do not reflect it). A local decision (a one-off the system should not try to absorb).

Consider the inline hex from Tuesday morning. In a system without a feedback channel, that override is friction. A thing to notice, a thing to flag, a thing that joins the queue of items waiting for a cleanup sprint. In a system with one, it becomes a question: is this color about to repeat? If three product surfaces are introducing similar warm tones in the same week, the answer is probably yes, and the signal is a token evolution candidate. The vocabulary has a real gap. The system gets a new token, the inline overrides migrate, and the next time a designer reaches for that warm tone they find it.

Or: a designer extends a button component with a third loading state for a long-running export. They reach for the existing component first, find it does not have what they need, build the variant in their feature work. In a fragile system, that variant lives in feature code forever. In an antifragile one, the override is a component extension candidate. The button gets a new state, the extension folds back, and the team's vocabulary is now slightly more accurate to the product it has to describe.

The fourth category is the disciplined one. Not every override should become a token. Not every variant should fold back. Some are local: a one-off label on a legacy chart, a context-specific spacing value used in a single onboarding flow, a button that exists in a settings page nobody plans to touch. A system that absorbs every signal becomes noise. The filter is the architecture. Without it, the channel collects every workaround and the design system becomes a museum of one-time decisions. With it, the system grows only where the work has actually asked it to.

Capturing the signal is the easy half. The classification is the work. Without it, the channel is just a longer backlog. With it, the channel becomes a routing layer, and the system's vocabulary starts updating from the inside, in response to what the work is actually asking for. The cadence is part of the architecture: each change lands on a schedule, visible to everyone using the system, rather than arriving as a surprise nobody can trace. A rebrand, a migration, a new surface: the fragile system takes each as a wound, the robust system weathers it, and the antifragile system reads it as information about the product it now has to describe.

In practice this is a monthly rhythm. Production edge cases collected through whatever capture form fits the team's workflow. A scheduled session to classify them. A versioned record of which evolutions were applied, which were rejected, why. Quarterly review of which stressors strengthened the system in the prior period and which are still waiting for a response.

The work is unglamorous. The discipline is what makes the engagement worth what it costs. The team gets a design system actively learning from the production it lives inside. The engineering team gets a place to put workarounds other than "tech debt to clean up later." The leadership gets a record of the system's evolution that is legible, structural, and connected to specific production reality.

This is what gets bought when design system maintenance converts from upkeep into a recurring practice. A system that gets better at the rate the world gets harder.

The architectural commitment is the part most studios cannot ship. The classification schema is a one-page document. The triage rhythm is a recurring meeting. The versioning is a changelog with an opinion. None of this is hard.

What is hard is keeping it operational on a cadence the team can rely on, for long enough that the system actually changes shape. Most design system engagements deliver and disappear. The feedback channel only works if someone is operating it on a schedule. If the relationship ends at handoff, the channel goes silent within a month. The information starts piling up again, unclassified, in pull requests and Slack messages and the tail ends of design reviews. The system goes back to being maintained reactively, and one more inline value quietly spreads to forty-seven places before anyone thinks to look.

The button still ships on Tuesday with the inline hex. The question an antifragile design system asks is what happens to that hex by Friday. Whether it goes onto a tech debt list to wait for a cleanup sprint that never arrives, or whether it gets routed. Token candidate. Component extension. Documentation update. Or a local decision the system does not need to absorb. That choice, made every Friday, is the whole difference: a system that merely survives the rebrand, or one that is a little more accurate to the product than it was a week ago.

More essays, twice a month.

Subscribe on Substack to get each piece when it comes out.