Most design systems were built for designers and developers. A third user just arrived, and it reads very differently.
March 31, 2026 — Comments are off for this post.
Most design systems were built for designers and developers. A third user just arrived, and it reads very differently.
February 17, 2026 — Comments are off for this post.
I’ve learned that the difference between a system that thrives and one that quietly fails often comes down to judgment over novelty.

Recently, I read an excellent article about building scalable design systems. Many of the tips were valuable, but some relied on features that aren’t fully stable yet. Here’s what I’ve learned about when to adopt new approaches and when to stick with what works.
Figma announced Slots in 2025 as a way to improve component flexibility. Everyone was so excited about it, and the concept is promising, and I’ve been using slot-based patterns for years. On paper, they sounded great. But in practice, this feature isn’t fully stable yet:
In the meantime, the “classic” approach, slots components, or Instance Swap patterns, remains reliable and well-documented and widely adopted by designers.
Lesson: Stick with a workflow that works today, not one that promises a better future but isn’t battle-tested. Stability beats novelty when you’re building systems meant to scale.
Variables are often presented as the ultimate solution for design tokens and cross-file consistency. In reality, they introduce challenges:
In my experience, Token Studio is a more stable long-term solution, at least for now. This approach may feel “less modern,” but it supports predictable collaboration and scale without breaking libraries.
Lesson: Tools are only as useful as their reliability. Prioritize predictability over hype when building infrastructure that teams depend on daily. Variables aren’t inherently bad. They’re powerful when implemented carefully, but the migration effort is often undersold.
Some “best practice” guides recommend showing and hiding layers to manage complexity. For small files, this works. For large-scale systems, it introduces problems:
In my work, I balance component flexibility with performance. Rather than creating components with dozens of hidden layers, I keep components focused and create separate variants only when they serve distinct use cases. Hidden layers should serve a real purpose, not clutter the system.
Lesson: Performance is part of system design. Invisible complexity can erode adoption faster than visible mistakes.
Detachment rates are the best signal we have of adoption. They reveal:
Tracking these metrics isn’t just “nice to have”, it’s essential to understanding system health. Adoption is more than a checklist; it’s an ongoing dialogue with your team. When a component’s detachment rate spikes, I investigate why the system failed designers. Often, the component is solving the wrong problem or missing a critical use case.
Lesson: Observe real use, not just intentions. Metrics like detachment rate tell the story that usage patterns reveal, not assumptions.
Best practices are starting points, not guarantees. The systems that survive are built by designers who:
The hype cycle will always push new features and updated best practices. But your job isn’t to adopt everything, it’s to build systems that actually work for your teams.
What “best practices” have you had to adapt or rethink for your context?