Design System Problems

Strangler Pattern Design Systems

January 15, 2026 • 5 min read

Strangler Pattern Design Systems

The strangler pattern, borrowed from software architecture, applies to design system adoption by gradually replacing legacy UI implementations with design system components. Like strangler fig trees that gradually envelop their hosts, design system components progressively replace legacy code until the original implementation is eliminated.

What Is the Strangler Pattern

The strangler pattern introduces new implementations alongside existing ones, then incrementally routes usage to the new implementation until the old can be removed. For design systems, this means design system components coexist with legacy components, gradually taking over until legacy components have no remaining usage.

This approach avoids big-bang migrations that risk major disruption. By maintaining both implementations simultaneously, teams can proceed at sustainable pace while keeping applications functional. The pattern provides natural rollback capability if new implementations cause problems.

How to Apply the Strangler Pattern

Creating facade components provides unified interfaces that can route to either implementation. A facade button component might initially render the legacy button, then be updated to render the design system button. Consumers use the facade throughout, isolated from the underlying implementation switch.

Incremental routing switches usage from legacy to design system implementations gradually. This might happen component by component, page by page, or feature by feature. Each switch can be tested and verified before proceeding to the next.

Feature flags enable controlled rollout and quick rollback. Flags can route some users or some contexts to design system components while others remain on legacy. This enables gradual confidence building and immediate reversal if issues arise.

Monitoring validates that new implementations perform correctly. Tracking errors, performance metrics, and user behavior around transitioned components ensures problems are detected quickly. Comparison between legacy and design system implementations reveals unexpected differences.

Cleanup removes legacy code once migration completes. This step often gets deferred but is important for reducing maintenance burden and confusion. Planning for cleanup from the start ensures it happens.

Key Considerations

Common Questions

How does the strangler pattern differ from simple gradual migration?

The strangler pattern specifically emphasizes facade abstraction that hides implementation details from consumers. Simple gradual migration might convert individual usages directly without abstraction. The strangler pattern’s facades enable switching implementations centrally rather than updating each usage site, which can be faster for widely-used components but adds abstraction overhead.

When is the strangler pattern appropriate?

The strangler pattern fits situations where components are widely used (making site-by-site conversion expensive), where risk must be carefully managed (enabling gradual rollout and quick rollback), or where the team wants implementation flexibility during transition. For components with limited usage or lower risk tolerance, simpler direct replacement may be more appropriate.

Summary

The strangler pattern applies to design system adoption by creating facade components that can route to either legacy or design system implementations. Gradual migration through incremental routing, feature flags, and monitoring enables safe transition. Cleanup after migration completion removes unnecessary abstraction and legacy code.

Buoy scans your codebase for design system inconsistencies before they ship

Detect Design Drift Free
← Back to Adoption Friction