In brief
A design system connects shared design decisions to reusable interface parts and guidance. It helps teams create consistent, accessible experiences while making product changes easier to understand and maintain.

Common tools
- Figma
- Browser tools
Skills in play
- Systems thinking
- Accessibility
- Technical accuracy
What it is
A design system is the shared language of a digital product. It includes foundations such as colour, typography, spacing, and motion; reusable components such as buttons and forms; patterns for larger tasks; and guidance about when to use each part. A component library alone is not the whole system. The documentation and maintenance process turn a set of files into a reliable way of working.
Its purpose is not to remove design judgment. It frees teams from repeatedly solving the same small problems so they can concentrate on user needs and product decisions. A system should make the common path clear while leaving room for a considered exception.
Start with the product, not a component inventory
Audit real screens, flows, and code. Group repeated elements and note where apparently similar elements behave differently. A button may have several colours because of historic inconsistencyβor because it represents genuinely different actions. Research the difference before merging them.
Prioritise parts that recur often and carry meaningful risk: type, colour, controls, navigation, forms, feedback, and responsive layout. Agree who owns decisions across design, engineering, content, and accessibility. Without shared ownership, the design file and live product quickly drift apart.
Define foundations and tokens
Name decisions by purpose
Foundations establish scales and constraints. Tokens give recurring decisions names so they can be used consistently across files and code. A semantic name such as text-primary or surface-success expresses purpose more clearly than a name tied only to a colour value. That makes future theme changes safer.
Keep the token structure understandable. A hierarchy with too many aliases can be as hard to use as raw values. Document the intended use, contrast relationships, and any exceptions. Check light and dark contexts, text scaling, and interaction states rather than treating the default state as the whole component.
Design components as behaviour
For each component, specify anatomy, variants, states, content rules, keyboard behaviour, and responsive changes. A form field is not complete when it has a border and placeholder; it also needs a label, help text, error state, focus state, and a way to recover. Accessible interface design belongs in the component definition, not in an optional appendix.
Avoid adding a variant for every one-off request. If a new need is genuinely recurring, explain the use case and add a supported pattern. If it is exceptional, describe the exception without turning it into a permanent default.
Document patterns and decisions
Patterns show how parts work together in a task: filtering a list, choosing a plan, recovering from an error, or completing a checkout. Explain the goal, the content hierarchy, and the trade-offs, not merely a screenshot. Include examples of appropriate and inappropriate use.
Write documentation near the work. Short, searchable guidance and live examples are usually more useful than a long static manual. Link design examples to implemented components where possible, and state which source is authoritative when they disagree.
Validate in a real flow
Test a representative journey with the system: perhaps account creation or a multi-step form. Check the interface at narrow and wide widths, with zoom, keyboard navigation, long translated strings, loading states, and errors. If teams repeatedly detach components or add local overrides, investigate the system rather than blaming the teams.
Measure the quality of outcomes, not just adoption counts. Faster assembly is valuable only if users can still understand and complete the task. Review accessibility issues, usability findings, and maintenance effort alongside consistency.
Maintain a living system
Set a contribution route for proposed changes, with a small review group and visible decision record. Version changes that could break screens, announce migrations, and deprecate old patterns with a clear replacement. Provide a way to report gaps from production work. A system becomes trustworthy when it responds to evidence and teams know what changed.
Common mistake
Building a polished catalogue before testing it on a real product. Begin with shared problems, prove the parts in use, and grow the system from demonstrated needs. Uniform screens are not the goal; coherent, usable experiences are.
People and practice







