BMAD-METHOD/docs/learn-wds/module-09-design-system/tutorial-09.md

13 KiB

Tutorial 09: Design System

Extract patterns from your pages - turn one-off designs into reusable superpowers


Overview

You've designed several pages. You notice you keep recreating the same buttons, cards, and form fields. There's a better way.

Create a Design System - extract reusable components once, use them everywhere.

Your superpower: Freya helps you identify patterns, document components, and create a library that scales your design decisions across the entire product.

Time: 45-60 minutes
Prerequisites: Module 08 completed (At least 2-3 pages designed)
What you'll create: Component Library & Design Tokens


What You'll Learn

  • What a Design System is (and why it saves you time)
  • How to identify reusable patterns in your designs
  • How Freya extracts components automatically
  • How to document components for consistency

What is a Design System?

Design System = Your design decisions, extracted and reusable.

Instead of:

  • Designing every button from scratch
  • Remembering which blue you used last time
  • Recreating forms on every page

You have:

  • Button component (all states documented)
  • Color tokens (brand blue, semantic colors)
  • Form patterns (ready to reuse)

Think of it as:
Design System = Your design vocabulary, organized and ready to use


What to Expect: The Extraction Process

Here's how a real session with Freya looks:

Freya's Opening

Hi! Ready to create your Design System?

I've analyzed your page specifications. I found some great patterns!

Let me show you what I discovered, and you tell me if I got it right.
We'll name things together and document them properly.

This will be collaborative - you're the design expert, I'm the organizer.

Example Pattern Recognition

Freya Identifies Components:

Freya: "I scanned your 3 pages and found these button patterns:

         Pattern 1 (used 12 times):
         - Blue background (#1e3a5f)
         - White text, 18px, semibold
         - Rounded corners (8px)
         - Used for: Submit, Save, Confirm actions

         Pattern 2 (used 8 times):
         - Transparent background
         - Blue border (#1e3a5f)
         - Blue text
         - Used for: Cancel, Back, Secondary actions

         Pattern 3 (used 24 times):
         - No background, no border
         - Blue text with underline on hover
         - Used for: Navigation links, "Learn more"

         Should we call these:
         - Button Primary
         - Button Secondary
         - Text Link
         
         Sound good?"

You: "Yes! But let's call Pattern 3 'Link Button' instead."

Freya: "Perfect. Updated! 🎯"

Freya Finds Inconsistencies:

Freya: "Heads up! I found a slight inconsistency:

         On Page 1, your primary button uses #1e3a5f (deep blue)
         On Page 3, it uses #1e4a7f (slightly different blue)

         Which one should be the standard?"

You: "Oh! Page 1 is correct - #1e3a5f."

Freya: "Got it. I'll document #1e3a5f as the brand primary color.
         Should I flag Page 3 for update in the spec?"

You: "Yes please!"

Freya: "Done. Added to quality check list. ✅"

Example Questions Freya Asks

About Naming:

Freya: "I found 3 different card layouts. Help me name them:

         Card Type A: Image on top, title, description, CTA button
         Card Type B: Small image left, title and text right
         Card Type C: Icon in circle, title, 3-line description

         What should we call these?"

You: "Type A is a 'Feature Card'
      Type B is a 'Task Card'
      Type C is a 'Capability Card'"

Freya: "Love it. Those names make sense! Documented. 📝"

About Design Tokens:

Freya: "I extracted these colors from your pages:

         Blues: #1e3a5f, #2c4f7c, #3d6399
         Are these:
         - Different brand colors? OR
         - The same color in different states (default, hover, active)?

You: "#1e3a5f is the main brand blue
      #2c4f7c is hover state
      #3d6399 is... hmm, I'm not sure where that came from"

Freya: "Found it - Page 2, Benefits section background.
         Should that be a separate color called 'Background Blue'?
         Or should it use the main brand blue?"

You: "Ah! It should be a lighter tint for backgrounds. Let's call it
      'Brand Blue Light' and make it consistent."

Freya: "Perfect! I'll document:
         - Brand Blue (#1e3a5f) - primary
         - Brand Blue Hover (#2c4f7c) - interaction
         - Brand Blue Light (#3d6399) - backgrounds
         
         Should I update Page 2 spec?"

You: "Yes!"

Built-in Guidance from Freya

When you're building your first Design System:

Freya: "This is your first Design System, right?

         Pro tip: Don't try to document everything perfectly.
         Start with the basics:
         ✅ Buttons (you use them everywhere)
         ✅ Colors (brand consistency matters)
         ✅ Typography (H1, H2, body text)
         ✅ Spacing (consistent gaps)

         We can add more as you design more pages.
         Sound good?"

You: "Yes! That feels manageable."

Freya: "Great! Let's start there. We'll keep it simple and practical."

When components are almost the same:

Freya: "I found two button patterns that are 95% identical:

         Both have:
         - Blue background
         - White text
         - 8px border radius
         
         Only difference:
         - One is 44px tall (regular)
         - One is 56px tall (large)

         Should we make these:
         - Two separate components? OR
         - One component with size variants?"

You: "One component with variants - 'Button Primary (Regular)' 
      and 'Button Primary (Large)'"

Freya: "Smart! That keeps your system clean. One component,
         two sizes. Documented! 🎯"

About Usage Guidelines:

Freya: "For Button Primary, I'm adding usage guidelines:

         ✅ Use for primary actions (submit, save, next)
         ✅ Only one per page section
         ❌ Don't use for destructive actions (delete, remove)

         Does that match your intent?"

You: "Yes! And add: Button text should be action verbs."

Freya: "Added! These guidelines will help keep your design consistent."

What Freya Creates While You Talk

As you review patterns, Freya is:

  • 📋 Cataloging components (buttons, forms, cards)
  • 🎨 Extracting design tokens (colors, spacing, typography)
  • 📏 Documenting variants (sizes, states, types)
  • ✍️ Writing usage guidelines (when to use, when not to)
  • 🔗 Linking to page specs (where each component is used)

You'll see progress updates:

Freya: "✅ 5 button components documented
         ✅ 8 color tokens extracted
         ✅ 3 card patterns identified
         🔄 Working on form components..."

The Collaborative Flow

It's a conversation, not a form:

You: "Actually, I think the 'Task Card' should have a checkbox option."

Freya: "Great catch! Should the checkbox be:
         - Always visible? OR
         - Only on hover? OR
         - A separate variant?"

You: "Separate variant - 'Task Card (Selectable)'"

Freya: "Perfect. I'll document both variants:
         - Task Card (Standard)
         - Task Card (Selectable)
         
         Updated the component library! ✅"

Step 1: Understand the Power (5 min)

Without Design System:

Page 1: Create "Submit" button
Page 2: Create "Submit" button (slightly different)
Page 3: Create "Submit" button (now it's inconsistent)
Update brand color → Update 47 buttons manually 😱

With Design System:

Design System: Define Button Primary
Page 1: Use Button Primary
Page 2: Use Button Primary
Page 3: Use Button Primary
Update brand color → Update 1 component, changes everywhere 🎉

You save time. Users get consistency.


Step 2: Activate Freya for Extraction (2 min)

@freya

I'm ready to create a Design System from my page specifications.

I have these pages designed:
- [Page 1 name]
- [Page 2 name]
- [Page 3 name]

Please help me extract reusable components.

Freya will analyze your pages and identify patterns.


Step 3: Review What Freya Found (15 min)

Freya scans your pages and identifies:

Components She'll Extract

  • Buttons: Primary, Secondary, Text links
  • Forms: Input fields, Dropdowns, Checkboxes
  • Cards: Content cards, Profile cards
  • Navigation: Headers, Footers, Menus
  • Feedback: Success messages, Error states, Loading indicators

She'll say something like:

I found these patterns:

Buttons (3 variants):
- Primary Button (used 12 times across 3 pages)
- Secondary Button (used 8 times)
- Text Link (used 24 times)

Cards (2 types):
- Task Card (used 15 times)
- Profile Card (used 3 times)

Do these look right? Any I missed?

Your job:

  • Confirm patterns she found
  • Point out any she missed
  • Name variants clearly ("Primary Button" not "Blue Button")

Step 4: Define Design Tokens (10 min)

Design Tokens = The atomic values your components use.

Freya will extract:

Colors

Brand Colors:
- Primary: #1e3a5f (deep blue)
- Accent: #ff6b35 (coral)

Semantic Colors:
- Success: #22c55e
- Error: #ef4444
- Warning: #f59e0b

Typography

Heading 1: 48px, Bold, 1.2 line height
Heading 2: 32px, Semibold, 1.3 line height
Body: 16px, Regular, 1.6 line height

Spacing

xs: 4px
sm: 8px
md: 16px
lg: 24px
xl: 32px

Your job:

  • Confirm these match your intent
  • Name them meaningfully ("Primary" not "Blue")
  • Add any she missed

Step 5: Document Components (15 min)

For each component, Freya creates documentation:

Example: Primary Button

Component Name: Button Primary
Object ID Pattern: {page}-{section}-{element}

States:

  • Default: Blue background, white text
  • Hover: Darker blue, scale 1.05
  • Active: Even darker, scale 0.98
  • Disabled: Gray background, gray text
  • Loading: Blue background, spinner icon

Content Structure:

- Label (EN): [Button text]
- Icon (optional): [Icon name]

Usage Guidelines:

  • Use for primary actions (submit, save, confirm)
  • Only ONE primary button per page/section
  • Button text = action verb ("Save", "Submit", "Confirm")

Accessibility:

  • Min touch target: 44x44px
  • Keyboard accessible (Enter/Space)
  • Focus indicator visible

Freya documents all this. You just review and confirm.


Step 6: Create the Component Library (5 min)

Freya saves your Design System:

/docs/5-design-system/
├── 00-design-tokens.md
├── components/
│   ├── buttons.md
│   ├── forms.md
│   ├── cards.md
│   └── navigation.md
├── patterns/
│   ├── form-patterns.md
│   └── layout-patterns.md
└── guidelines/
    ├── accessibility.md
    └── usage-rules.md

Now you can:

  • Reference components in new page specs
  • Ensure consistency across your product
  • Update once, apply everywhere

Step 7: Use Your Design System (Ongoing)

When designing new pages:

Instead of:

#### Submit Button
- Style: Blue button, 18px, semibold...

You write:

#### Submit Button
**Component:** Button Primary
**Content:** "Save Changes"

Freya knows what "Button Primary" means. Developers know too. Consistency guaranteed.


Common Questions

Q: When should I create a Design System?
A: After 2-3 pages are designed. Patterns become clear.

Q: Can I update components later?
A: Yes! Update the Design System doc, then update specs that use it.

Q: What if a page needs a unique button?
A: Document why it's unique. If you use it again, add it to the system.

Q: Do I need Figma components?
A: Not required. WDS Design System is specification-focused. You can sync to Figma later if you want.


What You've Accomplished

🎉 You just created a Design System!

You didn't need to:

  • Manually catalog every component
  • Create a Figma component library first
  • Understand design tokens theory
  • Build a Storybook

You just:

  • Designed a few pages naturally
  • Let Freya identify patterns
  • Reviewed and confirmed
  • Named things clearly

That's the WDS superpower: Design naturally. Extract patterns automatically. Scale effortlessly.


Next Steps

Ready to hand off to developers?
Module 10: Design Delivery

Want to design more pages first?
Go back to Module 08: Initialize Scenario and your Design System will grow with you.


Pro Tip: Your Design System doesn't need to be "complete" before you hand off. Start small (buttons, forms, colors). Add more as you design more pages. It's a living system that grows with your product.