How we turned one of our messiest UI components into a scalable design system foundation

The Problem

Over time, buttons became one of the largest sources of design and tech debt across the product.

Different teams introduced new button styles to solve local problems, resulting in inconsistent hierarchy, unclear semantics, and repeated implementation work.

Internally, this fragmentation was referred to as “Button Hell.”

Before: 30+ button variants across teams

The Result

  • Consolidated dozens of inconsistent button styles into a clear, semantic system

  • Increased design system adoption from <30% to ~90% across new projects

  • Reduced redundant components and rework across design and engineering

  • Established a repeatable model for scaling other high-friction components

After: 3 semantic button roles with shared states

Context

While they seemed small, they sat at the center of user decision-making, business outcomes, and engineering effort. Addressing button inconsistency became a strategic entry point for proving the value of the design system.

ROLE

Product Designer + Director

Led the button component strategy within a broader design system initiative. Owned the audit, system definition, documentation standards, and cross-functional alignment with product and engineering.

SKILLS

Design Systems · Component Architecture · UX Strategy · Accessibility (WCAG) · Design Tokens · Figma · Cross-Functional Collaboration · Design Governance · Systems Thinking

Process

Audit & Define

  • Inventoried all existing button variants across the product

  • Grouped buttons by intent, usage, and hierarchy rather than visual style

  • Identified redundancy, conflicting meanings, and accessibility gaps

This audit made the problem visible and aligned teams around the need for standardization.

Build

  • Defined core button roles: Primary, Secondary, and Text

  • Standardized sizing, spacing, icon usage, and interaction states

  • Supported key states including hover, active, disabled, and loading

  • Rebuilt existing screens using system buttons to stress-test real usage

This shifted buttons from ad-hoc UI elements to reusable system components.

Document

  • Created clear usage rules and constraints for each button type

  • Documented hierarchy guidelines (e.g., one primary action per view)

  • Aligned buttons with design tokens for color, spacing, and typography

  • Embedded accessibility considerations directly into component defaults

Documentation turned the system into a shared contract across design and engineering.

Accessibility

Accessibility was addressed at the component level:

  • Contrast and focus states met accessibility standards

  • Semantic elements and consistent roles improved assistive technology support

  • Solving accessibility once at the system level scaled benefits across all features

Impact

Design & Engineering

  • Design system usage grew from <30% to ~90% across new projects

  • Reduced redundant components and rework

  • Faster, more consistent implementation across teams

Product & Users

  • Multiple independently built features shipped using 100% design system components

  • Improved UI consistency contributed to higher perceived ease of use

  • 34% of NPS promoters cited the interface as “easy to use” and “intuitive”

Reflection

Buttons are where intent turns into action. By systemizing them, we didn’t just clean up UI, we stabilized decision-making, reduced friction across teams, and built trust in the design system itself.

This work became the model for scaling other components across the platform.

Previous
Previous

Scalable system

Next
Next

Operational Control Dashboard