UIGuides

How to Create a Design System: A Practical Guide

3 min read

Step-by-step guide to building a design system from scratch — what to include, what to skip, and which tools to use.

A design system isn't a Figma library. That's part of it, but a real design system is the shared language between design and engineering — components, tokens, principles, and documentation that keep everyone building the same product.

Here's how to build one that your team will actually use.

Start with an audit, not a component

The biggest mistake teams make is starting by building components. Don't.

Spend one week auditing your existing product first. Screenshot every button variant you can find. Every card layout. Every spacing value. You'll find 12 button styles when you thought you had 3. That audit is the foundation of your system — it shows you what exists and where the real inconsistencies are.

Define your tokens first

Tokens are the atomic decisions that everything else inherits from. Start with:

  • Color tokens: Not blue-500, but color-primary, color-primary-hover, color-surface, color-text-primary. The semantic names matter more than the values.
  • Spacing tokens: A consistent scale (4px, 8px, 16px, 24px, 32px, 48px, 64px works for most products)
  • Typography tokens: Font size scale, line heights, font weights

Figma's variables system handles tokens well now. If you're using Tailwind on the engineering side, map your tokens to Tailwind's config.

Try Figma for Design Systems

Build components in order of complexity

Start with atoms (buttons, inputs, badges), then molecules (form fields with labels, search bars), then organisms (navigation, cards, modals). This isn't just aesthetic — each layer depends on the previous.

For each component, document:

  • When to use it (and when not to)
  • Variants and their names
  • States (default, hover, focus, disabled, error)
  • Spacing rules

Document as you build

Your design system is only as good as its documentation. Two tools dominate here:

Storybook for component-level documentation in code. Engineers love it. Designers tolerate it.

Zeroheight for designer-friendly documentation with Figma embeds. Designers love it. Engineers tolerate it.

Most mature teams use both — Zeroheight as the "public face" with principles and usage guidelines, Storybook as the living technical reference.

The part everyone skips: governance

How does a new component get added? Who approves changes? What happens when a product team needs something the system doesn't have yet?

Without answers to these questions, your design system becomes a fork point. Every team starts making local copies "just for now" and you're back to the same chaos you started with.

Write down a simple process. It doesn't need to be bureaucratic — even "open a GitHub issue, tag the design system team, wait for review" is enough to prevent chaos.