Design systems for AI-assisted development.

A practical refactor of the design-to-development workflow.

A design system can look complete in Figma and still be difficult to build from. Components have similar names but different behavior. Variables describe a palette without explaining use. The screen looks right, while decisions about validation, accessibility and responsive behavior live in someone’s head.

AI-assisted development brings those gaps into the work faster. It can generate an implementation from incomplete context, but the team still has to resolve what it guessed. Making the system easier to read means fewer decisions have to be reconstructed on every task. The useful work is a refactor of the library, its code and the workflow between them.

Start with a product task.

Choose a flow the team needs to deliver: editing an account, reviewing a quote or completing checkout. Use its production implementation, Figma designs and current requirements. This gives the audit a boundary and makes the findings useful to delivery.

Trace the flow from design through build. Which components are canonical? Where do values come from? What changes when content is long, a request fails or a person uses a keyboard? Record where the designer or developer has to supply an explanation. Those moments reveal missing context.

The first pass should produce a short repair list connected to that task. A full-library cleanup can take months. Fixing the components and rules a real flow depends on gives the team something it can test and reuse.

Give values a job.

Semantic tokens describe the purpose of a design value. A primitive such as gray/900 identifies a palette value. color/text/primary identifies its role. That distinction lets a theme or mode change the value while preserving its intended use.

Component names and layer names do different work. QuoteSummary describes a reusable object; QuoteTotal describes part of its structure. Naming those objects is useful, but it does not create a token model. Nor does adding a description to every layer make a system ready for AI-assisted development.

Primitive:  color/gray/900 = #222222
Semantic:   color/text/primary → color/gray/900
Component:  quote-summary/total-color → color/text/primary
Code:       --color-text-primary

This is an illustrative naming scheme. Agree a vocabulary that suits your product, map Figma aliases to code and document when each role applies. Check light and dark modes, interaction states and contrast in their actual combinations. Add component-specific tokens where a component needs its own rule; avoid creating a separate token for every incidental value.

Make the component contract explicit.

A component contract connects the design object to the implementation people should use. It explains purpose, supported properties, behavior and limits. Start by comparing the Figma component with the real code API. A shared name is insufficient if their variants or states mean different things.

QuoteSummary → import { QuoteSummary } from '@/ui/quotes'
Props: quote, status, onEdit
Status: draft | ready | submitting | failed
Rules:
• Editing is available in draft and ready states.
• Submitting prevents duplicate actions.
• Failure preserves the quote and explains how to retry.
• The total uses the approved currency formatter.

Include a usage example, content constraints and accessibility expectations. Explain which behavior belongs inside the component and which the consuming flow owns. An error message may be a component responsibility; deciding whether a quote is ready to submit may belong to product logic.

Keep the contract beside the code or link to it from the design library. A developer should be able to find the import and supported props without translating a Figma property into a guessed implementation.

Check what the tool can read.

AI development tools receive different context depending on how the team uses them. A screenshot exposes appearance. Structured design access may expose layers, variables and component properties. Repository access can expose existing components, their APIs, tests and documentation. Check what your chosen workflow actually supplies.

For the pilot task, provide the relevant design, component mappings, token definitions and repository guidance. Point to a working example of the pattern and explain any behavior the design cannot show. Ask the tool to use existing components before introducing new ones, then inspect whether it did.

Tokens alone cannot explain a submission flow, permission rule or data dependency. A well-structured library helps when it is available to the tool and connected to implementation. Test that connection rather than assuming the information travels automatically.

Audit the gaps that cause rework.

Review the design and code together. Record a concrete example for each gap, its effect on the pilot task and who will resolve it. This keeps the audit tied to decisions the team needs to make.

CheckLook for
TokensUnclear roles, hard-coded values, broken aliases and inconsistent modes.
ComponentsDuplicate patterns, detached instances and variants with no code equivalent.
PropertiesDifferent names, types or defaults between Figma and production APIs.
BehaviorMissing loading, empty, failure, validation and permission states.
LayoutUnspecified resizing, overflow, content limits and narrow-screen behavior.
ImplementationMissing imports, outdated examples and guidance that contradicts the repository.
OwnershipNo clear maintainer or route for updating shared rules.

Prioritize gaps that recur across the product or block the current build. Some need a library change. Others need a code change, clearer requirements or a conversation. The audit should identify that difference.

Build, then review the decisions.

Run a representative build task using the repaired system. Include realistic data and a difficult state, such as a failed submission or a long translated label. Keep the initial context and the corrections so the team can see why the implementation needed intervention.

Review more than visual similarity. Did it reuse the correct component and token? Does the interaction match the contract? Can someone complete the task by keyboard? Does the narrow layout work? Are loading and failure states handled without losing the user’s work? Does the result fit the repository’s conventions and pass the relevant tests?

Classify corrections by cause: missing design intent, unavailable context, a conflicting component API or an implementation mistake. Then repair the source of the correction and try a related task. A repeated error is useful evidence; a polished screenshot is only one part of the result.

Change the handoff and keep it current.

The new workflow needs a shared review point. Before building, the designer and developer confirm the components, states and behavior the task depends on. During review, they compare the working implementation with those decisions. The AI tool can assist with production work; the team owns the judgment about what reaches users.

Give token definitions, component contracts and design-to-code mappings a maintainer. When an API changes, update its Figma equivalent and examples in the same piece of work. When a build exposes a missing rule, decide whether it belongs in the shared system or only in that feature.

Over time, this reduces the cost of explaining the same intent repeatedly. It also makes the system more useful to new colleagues and other delivery tools. That is where the business value comes from: less avoidable correction, clearer decisions and more time spent on the product itself.

The token names and component contract here are illustrative. For the Less approach to this work, explore design systems for AI-assisted development.

Need a system your team can build from?

Talk to Less