# Design System Operating Plan ## B2B SaaS Web Application — Comprehensive Design System Initiative --- ## 1. Executive Summary This plan establishes a design system to resolve inconsistent UI, eliminate one-off CSS, introduce shared design tokens, and accelerate design-to-dev handoff. The system will be built incrementally by a small team (2 designers, 6 engineers) with first measurable impact targeted within 6 weeks. Accessibility (WCAG 2.1 AA minimum) is a non-negotiable requirement throughout. --- ## 2. Current State Assessment ### Problems Identified - **Inconsistent UI**: Screens use different spacing, typography, colors, and component patterns for the same interactions. - **One-off CSS**: Duplicated and conflicting styles scattered across the codebase, increasing maintenance burden and regression risk. - **No shared tokens**: Color values, font sizes, spacing units, and breakpoints are hardcoded in individual files rather than centralized. - **Slow design-to-dev handoff**: Designers specify intent in Figma; engineers re-interpret from scratch each time, leading to drift and rework. ### Impact of Current State - Higher bug rate on visual/layout issues - Longer cycle time for new features (each screen is designed/built from zero) - Accessibility gaps: no systematic color contrast enforcement, inconsistent focus states, missing ARIA patterns - Onboarding friction for new team members --- ## 3. Design System Vision and Principles ### Vision A single source of truth — shared tokens, documented components, and usage guidelines — that lets any designer or engineer ship consistent, accessible UI without re-inventing patterns. ### Guiding Principles 1. **Adopt, don't invent**: Start from what already exists in the product. Extract and standardize the best current patterns before creating anything new. 2. **Tokens first**: Every visual decision (color, spacing, typography, elevation, motion) flows from a token. No magic numbers. 3. **Accessible by default**: Components ship with correct contrast ratios, focus management, keyboard navigation, and ARIA attributes baked in. Accessibility is not a post-hoc audit. 4. **Small surface, high coverage**: Prioritize the 15-20 components that cover 80%+ of screens. Resist scope creep. 5. **Living system**: The design system is a product, not a project. It ships continuously alongside the application. 6. **Documentation is the UI**: If it's not documented, it doesn't exist in the system. --- ## 4. Team Structure and Roles ### Dedicated Roles (Part-Time Allocation) | Role | Person(s) | Allocation | Responsibilities | |------|-----------|------------|-----------------| | Design System Lead | 1 senior engineer | ~50% | Architecture, token structure, component API design, code review | | Design Lead | 1 designer | ~40% | Token definitions in Figma, component specs, documentation | | Component Contributors | 3-4 engineers (rotating) | ~20% each | Build and test individual components | | Design Contributor | 1 designer | ~20% | Audit existing screens, create migration specs | | QA/Accessibility Champion | 1 engineer | ~15% | Automated a11y testing, manual screen reader testing | ### Governance - **Weekly sync** (30 min): Review progress, unblock issues, triage requests. - **Bi-weekly design review** (45 min): Walk through new components, get feedback from full team. - **RFC process for new components**: Any team member can propose; requires sign-off from Design Lead + System Lead before work begins. --- ## 5. Technical Architecture ### 5.1 Design Tokens **Format**: Define tokens in a platform-agnostic format (JSON or YAML) and transform to CSS custom properties, SCSS variables, and JavaScript constants via a build step (e.g., Style Dictionary or a lightweight custom script). **Token Tiers**: ``` Global Tokens (primitive) ├── color.blue.500: #2563EB ├── color.neutral.100: #F5F5F5 ├── spacing.4: 16px ├── font.size.md: 16px └── ... Semantic Tokens (alias) ├── color.text.primary → color.neutral.900 ├── color.text.secondary → color.neutral.600 ├── color.action.primary → color.blue.600 ├── color.action.primary.hover → color.blue.700 ├── color.border.default → color.neutral.200 ├── spacing.component.padding → spacing.4 └── ... Component Tokens (scoped) ├── button.color.background → color.action.primary ├── button.color.text → color.neutral.white ├── input.border.color → color.border.default ├── input.border.color.focus → color.action.primary └── ... ``` **Accessibility Enforcement at Token Level**: - All foreground/background token pairings must meet WCAG AA contrast (4.5:1 for normal text, 3:1 for large text). - Focus indicator tokens must produce visible outlines meeting 3:1 contrast against adjacent colors. - Automated contrast checks run in the token build pipeline. ### 5.2 Component Library **Technology**: Build as a shared package within the existing monorepo (or as an internal npm package if using a multi-repo setup). Use the same framework as the application (React assumed here; adjust if Vue/Angular/Svelte). **Component API Conventions**: - Props use semantic names, not visual ones (`variant="primary"` not `color="blue"`) - All interactive components accept standard HTML attributes via spread/rest props - Every component forwards refs - Every component supports a `className` escape hatch for edge cases (but discouraged in docs) - TypeScript interfaces for all props **Accessibility Requirements per Component**: - Correct semantic HTML element (button is `