Back

Design systems

Why Modern Design Systems Fail: A Personal Reflection From the Inside

Design systems rarely collapse for technical reasons. They erode through governance, strategy, measurement, parity, and maintenance, the human decisions made under pressure.

Vicente González·Nov 16, 2025·7 min read

I've spent the last several years working on design systems, not as someone who simply organizes a collection of components in Figma or maintains a neat GitHub repository, but as someone who has watched these structures become the backbone of entire products. I've lived through migrations that lasted months, surgical refactors on fragile components, exhaustive technical audits, and endless debates about token names, necessary variants, and legacy decisions no one wanted to touch. And in the middle of all that, I began to understand something that doesn't appear in manuals or official DS guidelines: design systems fail for deeply human reasons, not technical ones.

Technology is rarely the origin of collapse. What wears a system down are the decisions teams make under pressure, the omissions, the interpretations, and the misalignments that accumulate over time. I learned this by observing how people work, how coherence quietly erodes when there is no clear direction, and how even the smallest decisions can produce unexpected ripple effects months later.

This essay comes from that place: from direct observation, from real experience, and from a type of reflection that only emerges after seeing a system rise, fall, and get rebuilt more than once.

The problem is never the button color: it's the lack of governance

One of the most striking realizations I've had is that many people believe a design system fails when a visual detail fails. If a button is slightly misaligned, if a token has the wrong value, or if a variant isn't fully documented, that must be the problem. But the truth is that those things are symptoms, not causes.

The real origin of deterioration almost always lies in the lack of governance. Governance isn't a document; it's a daily practice. It's the mechanism that determines who makes decisions, who maintains coherence, and who has the responsibility to say no when something shouldn't enter the system. Without that mechanism, the system begins to drift.

And it doesn't happen all at once. It happens through small deviations. A team creates a variant outside the established process because they were rushed; someone duplicates a token because they didn't know another one already existed; a developer implements a temporary fix that quietly becomes permanent; a designer interprets a pattern in a slightly different way, and slowly, almost invisibly, the system stops being a single unified whole.

I've seen this again and again: when no one knows clearly who leads, what criteria guide decisions, or which processes must be respected, the design system becomes vulnerable. It becomes exposed to interpretation, to improvisation, to parallel solutions that seem harmless at first but ultimately feed fragmentation.

That's why I eventually understood that governance isn't bureaucracy, it's protection. It protects coherence, it protects scalability, and it protects the system from the everyday pressures where improvising often feels easier than aligning. A design system without governance may look solid for a while, but without that backbone, it eventually disperses.

Governance doesn't prevent teams from making mistakes; it prevents them from drifting apart.

Without strategy, a design system is just a box of loose parts

There's an almost universal phase in the life of a design system where the team enters an extreme state of productivity: components get designed at high speed, variants are published enthusiastically, and the library grows as if it were a living showcase. It's an energizing moment because it gives the sensation of progress. But that sensation can be misleading when there's no strategy behind it. Without a clear vision, a design system becomes a collection of loose parts, pieces that may be beautiful and useful but that don't build a coherent language together.

I often found myself reviewing libraries full of components that had almost no real usage, or that solved such exceptional cases that maintaining them cost more than rebuilding them from scratch when needed. I also saw competing patterns that confused both designers and developers, or variants that existed simply because someone once had a very specific need that never came up again. All that noise didn't just fill the library, it made it heavier, harder to maintain, and, above all, harder to understand.

Over time, I learned that a design system must be built from problems, not from parts. Strategy is what determines what belongs and what doesn't; what deserves to exist within the system and what should be solved at the product level instead.

Today, before accepting any new component, I ask myself: What pattern does this reinforce? What product problem does it solve? What will be the cost of maintaining it? And is there a broader pattern we should be addressing first?

Building without strategy is like building without a skeleton: something takes shape, but it can't support anything for long. Strategy doesn't necessarily accelerate growth, but it ensures that growth makes sense.

Not measuring is the fastest path to irrelevance

I'll never forget the first time an executive asked me, very casually, what the real impact of the design system had been. In that moment, I realized I had a well-built system, but no proof that it was generating actual value. It was an important lesson: a design system cannot stand on beauty, coherence, or perceived efficiency alone. It needs metrics, and not just any metrics, but metrics that speak to the product, the business, and the team.

Real adoption across the product, consistency between design and code, component performance in production, the speed at which teams can deliver, everything must be measured. Without measurement, the system lives in the realm of perception. And perceptions are unstable: they shift under sprint pressure, release deadlines, and changing team priorities. A design system without metrics inevitably becomes an aesthetic expense. But with metrics, it becomes a strategic tool, one that accelerates decision-making, reduces technical debt, and simplifies the work of every team involved.

When I began measuring, I discovered surprising things. I found components we believed were essential but that almost no one was using. I found inconsistent patterns across platforms that were generating silent bugs. I found clusters of technical debt in areas we never thought to review. Measurement allowed us to see the system as it truly was, not as we assumed it was. And that changed the way we worked entirely.

Measuring isn't just a way to justify the system outwardly; it's a way to understand it inwardly.

The gap between design and development is the most dangerous abyss

Of all the cracks that can appear in a design system, none is as dangerous as the distance between design and development. That gap doesn't come from open conflict or from a lack of interest. It comes from different interpretations, different timelines, different priorities, and from the widely held illusion that both worlds are naturally aligned by default. The truth is that alignment doesn't happen on its own. It has to be built.

I remember seeing flawless components in Figma that, once implemented, looked like an alternate version of the original design. And I also saw cases where developers built robust, thoughtful solutions that designers had never fully documented. There was no ill intention on either side; it was simply a lack of synchronization. That lack of parity creates inconsistencies that reach users and generates internal friction that slowly wears the team down. When design and development stop seeing themselves as two parts of the same process, the design system begins to fracture.

Absolute parity was the only real solution I found. It's a disciplined commitment: whatever exists in design must exist in code, and vice versa. Tokens must have the same name. Variants must correspond exactly. States must match across platforms. And while maintaining that level of discipline requires continuous effort, the result is a system that flows, reduces errors, and strengthens mutual understanding between teams.

A design system is neither design nor code. It's the bridge between them. And that bridge needs reinforcement at all times.

Technical debt: the silent enemy that always comes back

Technical debt is a curious phenomenon because you don't feel it at first. It makes no noise. It doesn't interrupt. It doesn't pressure anyone. In fact, it can go unnoticed for a long time. But when it finally surfaces, it does so violently, breaking components, slowing down the system, creating inconsistencies, and making evolution difficult. I've seen it many times. Small undocumented fixes, variants no one dares to remove for fear of breaking something, duplicated tokens created to solve urgent issues, all of it quietly accumulates in the background.

Keeping a design system healthy requires a discipline that is often unpopular: auditing, cleaning, refactoring, removing. It requires confronting inherited decisions that feel uncomfortable, questioning patterns that once worked but no longer do, and making tough calls like retiring components that were once celebrated. It also requires tools and processes that reveal what's truly being used and what's not, because it's impossible to maintain a system that is blind to its own reality.

Over time, I began to see this work as a form of gardening. A system isn't built once, it is tended to every day. And that constant attention is what preserves coherence, stability, and the ability to evolve.

Technical debt will always appear, but the difference between a strong system and a fragile one is how it's managed.

What I ultimately learned

After so many projects, teams, and systems, I understood that the success of a design system doesn't depend on having a massive library or visually stunning components. It depends on five pillars that must work together every single day: clear governance, a strategy aligned with the product, real metrics, design-to-code parity, and continuous maintenance. If one fails, the system becomes shaky; if several fail, the system collapses.

But when all five are strong, something powerful happens: the design system stops being just a collection of UI parts and becomes a product accelerator, a shared language across teams, and a standard that simplifies decisions and strengthens experiences. And interestingly, when a design system is truly successful, the user never notices it. But the team does. And the business does too.

That, to me, is the clearest sign of a well-built system: its impact is invisible to the user but transformative for those who build the product.

Let's get started!

Let's work together and create something great. Something that people love to use

Make an appointment

Download CV

Choose the language you want to download the latest version of my resumé

CV (EN) - Vicente Gonzalez

Last update 21.10.2026

CV (ES) - Vicente Gonzalez

Last update 21.10.2026

Certifications

Explore the official certifications I’ve earned throughout my career as a Product Designer