skip to content

Handoff & Implementation Sync

Keeping design-file components and coded components in step: mirrored libraries, annotated handoff, drift detection and guardrails in code. Every system eventually diverges from its implementation.

part ofDesign systems & UX foundationsoverview, primer and where to startread it →
on this pageshow

explore

questions

16

In a design-system handoff, why should the spec name the system components and tokens it uses rather than redline raw measurements and color values?

level: juniorimportance: must knowfreq 55%

answer

  1. a frame is not a rule
  2. literal values drift silently
  3. modes remap names, not numbers
  4. component, variant, token by name
  5. redline only what is off-system

basics

~20 s

A raw redline records what one drawn frame measured, so engineers hardcode it and it drifts when a mode or the system changes. Naming the component, variant and token says what to reuse and keeps every theme and future update working.

solid answer

~40 s

A redline reading `16` and a color code describes one drawing, not intent. The engineer either hardcodes it — so it stays put when a dark or high-contrast mode remaps everything around it, and misses every later system update — or guesses which token was meant, and a near-miss value becomes a new one-off. A system-aware handoff says *secondary button, compact size* and *gap: the medium spacing token*, and links each design component to the coded component that implements it, so the engineer reuses rather than rebuilds. Redlines still earn their place for layout between components and for pieces the system genuinely lacks — but the handoff should mark those as off-system, so the deviation is a visible decision rather than an accident.

go deeper

for a junior

Recall that a redline describes one drawn frame, while a component or token name describes intent that survives themes and system updates. Say you would ask, not round, when a value is off the scale.

for a middle

Explain what breaks with raw values: hardcoding, modes that remap around a literal, near-miss values and rebuilt components. Show how a link from a design component to its coded counterpart turns identification into a lookup.

for a senior

Show judgement about where redlines are still right — layout between components and genuinely new pieces — and insist off-system pieces are flagged and fed back to the system team rather than hidden in one product.

for a principal

Weigh how much handoff rigour to ask of designers against the cost of every engineer re-deriving intent, and how linking design components to code scales that trade across many product teams and platforms.

## What a redline is, and what handoff is A **redline** is an annotation drawn over a finished design that states measurements: widths, heights, padding, gaps, type sizes and color values. Before design systems were common it was the main way a designer handed a screen to engineering — every number the engineer needed was written on the picture. **Handoff** is the whole package that travels from design to implementation: the screens, the measurements, the notes about behaviour and accessibility, and the links from design pieces to the code that implements them. A redline answers *how big, how far, what color*. It does not answer *why this value* or *what it should be after the next system release*. ## Why raw values fail inside a design system In a design system most values already have names. A spacing value is a **spacing token**, a color plays a **semantic role** such as surface or subtle text, and a button is a **coded component** with variants and sizes. When a handoff redlines the resolved numbers instead, several things go wrong: - **Hardcoding.** The engineer types the literal. It looks right today and silently stops following the system when the token behind it changes. - **Modes break.** A literal color is correct in exactly one theme. In dark mode, a high-contrast mode or a second brand, the literal stays fixed while everything around it remaps. - **Near-miss values multiply.** A redline reading 15 where the spacing scale has 16 forces a guess. Either answer can be wrong: a new one-off value in code, or a quietly changed design. - **Components get rebuilt.** A redlined button with a height, a corner radius and a fill invites someone to rebuild a button that already exists — losing its states, its focus treatment and its accessibility behaviour. - **Review has nothing to check.** *Matches the redline* is a pixel comparison; *uses the secondary button* is a contract a reviewer can verify. ## What a system-aware handoff says instead | Raw redline | System reference | |---|---| | 36 tall, 12 side padding, 4 corner radius, fill color code | Button, secondary variant, medium size | | Gap of 16 between filter bar and table | The system's medium spacing token, by name | | Text 14, semi-bold, mid-gray | Text style for strong labels; color role for subtle text | | Small green dot beside the word Running | Status indicator component, state: running | The engineer's question changes from *what number?* to *which existing piece?* That question can have the same answer on the web and on native mobile: both platforms can consume the same component and token names, even though each renders them in its own units. ## Linking design components to coded ones Many teams go one step further than naming. The design library's component carries a **link to the coded component** it represents — its name in code, where its documentation lives, and how the variant choices made in the design map to the coded properties. When a designer places that component on a screen, the handoff inherits the link, so the engineer sees *the coded data table, dense rows, sortable name column* rather than a picture of a table. - It turns an identification problem into a lookup. - It exposes gaps: a piece with no link is either genuinely new or a lookalike somebody drew by hand, and both deserve a conversation before code is written. - It keeps the handoff honest across platforms, because each platform's coded component can hang off the same design component. Keeping the two libraries' names and properties in step is its own discipline; the handoff's job is to use the link, not to maintain it. ## Where redlines still earn their place Raw measurements are not banned; they are for what the system does not already name. - **Layout between components** — how a panel's regions stack and what fills the remaining space. Even here, a gap is usually a spacing token. - **Genuinely new pieces** the system has not built yet. Redline them, and mark them **off-system** so the gap is visible and can be proposed back to the system team rather than hidden in one product. - **Illustration and one-off artwork**, where no token applies. ## A worked example: a cloud console's instance list A designer hands off the instance list screen of a cloud provider's admin console: 1. **Filter bar:** the system search field and the system select for the region, each named with its variant. 2. **Table:** the coded data table component, dense density, sortable name column; the status column uses the status indicator component. 3. **Spacing:** the gap between filter bar and table is the medium spacing token. 4. **Quota summary strip:** new to the system — redlined, marked off-system, with a note to propose it as a contribution. The engineer reuses three components and two tokens, builds one new piece knowingly, and nothing on the screen depends on a number that will be wrong after the next theme or system release.

  • If the design editor's inspect view already shows exact values, why does the handoff need token and component names at all?
    Inspect shows the resolved value of what was drawn. If the designer used a token or a linked component, a good inspect view can surface its name; if they typed a raw value or detached the component, it can only show the number. Names carry the role a value plays, which is what survives a theme switch or a system update — the number alone does not.
  • What should an engineer do when a redlined value matches no token in the system's scale?
    Ask rather than round silently. It is either a design slip — the designer meant the nearest token — or a genuine need the scale lacks. The first is fixed in the design; the second becomes a request to the system team or a clearly marked local value with a recorded reason. Guessing either way hides a decision from the people who own the scale.

saying these in an interview costs you the question

  • Redlining every measurement is the most precise and therefore safest handoff.
  • If the build matches the mockup pixel for pixel, it is correctly implemented.
  • Token names are engineering's concern; designers only need to hand over values.
  • An off-scale value should be silently rounded to the nearest token.
  • A lookalike component can be rebuilt locally from its redlined measurements.
open as a page

In a design handoff for a cloud admin console's resource table, which behaviours must be annotated because a static mockup cannot show them?

level: middleimportance: must knowfreq 50%

basics

~20 s

Annotate what one frame hides: loading, empty, error and permission states; content extremes and truncation; how the layout resizes; data rules such as default sort; and what changes after an action. Left out, each becomes the engineer's guess.

open as a page

In a design system, how should design-file variables relate to the coded design tokens, and what goes wrong when they are maintained separately?

level: middleimportance: must knowfreq 40%

basics

~20 s

Design-file variables should mirror the coded tokens: same names, same tiers and aliases, same modes, ideally generated from one source. Maintained by hand on both sides, values and names drift, so designs show colours or spacing the product never renders.

open as a page

In a design system's design library, what are overridden and detached component instances, and why do they cause drift between design and code?

level: juniorimportance: should knowfreq 42%

basics

~20 s

An overridden instance keeps its link to the library component but changes some properties locally; a detached one cuts the link and becomes loose shapes. Style overrides and detachments stop following library updates and depict components that code does not have.

open as a page

In a design system, why do teams lint against raw color and spacing values in product code, and what should the rule suggest instead?

level: juniorimportance: should knowfreq 40%

basics

~20 s

Raw values bypass tokens, so themes, modes and system updates skip them. A lint rule catches them as code is written and suggests the token for that role — not auto-applied, since one value can serve several roles.

open as a page

In a design system, why should the design-file component library use the same component names, variants and properties as the coded library?

level: juniorimportance: should knowfreq 38%

basics

~20 s

Matching names, variants and properties give designers and engineers one vocabulary: a design choice maps directly to a code option, handoff needs no translation, documentation describes both at once, and a mismatch becomes visible instead of hiding.

open as a page

In a design system, how do design files and shipped code drift apart over time, and why does nobody notice until they are compared?

level: middleimportance: should knowfreq 35%

basics

~20 s

Each side changes alone: designers override, detach or stay on an old library version; engineers hotfix, hardcode or fork components; fixes land on one side only. Each side stays internally consistent, so drift appears only when someone compares them.

open as a page

In a design system, where should a guardrail stop and an escape hatch begin, and what makes an escape hatch safe rather than a loophole?

level: middleimportance: should knowfreq 35%

basics

~10 s

Block only what is never legitimate; elsewhere offer an escape hatch, or people route around the rule unseen. A safe hatch is explicit, local and reasoned, visible to the system team, and revisited.

open as a page

In a design handoff, which accessibility annotations should a designer add, and why can't engineers infer them from the visuals?

level: middleimportance: should knowfreq 45%

basics

~20 s

Annotate focus order where layout is ambiguous, heading levels, labelled landmark regions, accessible names for icon-only and repeated controls, and where focus goes after actions. Layout, type size and icon shape do not encode that intent.

open as a page

When a design system component's design-file properties cannot match its coded props one to one, how should the two be mapped?

level: middleimportance: should knowfreq 30%

basics

~20 s

Match every shared decision: name, variants, sizes, booleans and content slots. Keep design-only properties, like preview toggles, and code-only ones, like event handlers, on one side, show runtime states as design variants, and document the mapping.

open as a page

How would you run a parity audit comparing a warehouse scanner app's shipped screens with its design files and its design system library?

level: seniorimportance: should knowfreq 30%

basics

~20 s

Scope the flows that matter most, capture shipped screens on real devices with real data and states, compare each with its design and the library, classify every difference, then fix, document or feed it back — and repeat on a cadence.

open as a page

In a parity audit, a warehouse scanner app's shipped quantity stepper differs from its design file; how do you decide which side is right and where the fix lands?

level: seniorimportance: should knowfreq 25%

basics

~20 s

Neither side is automatically right. Check the library, the history and the reason: fix a code bug in code, update a stale design, turn a genuine library gap into a system change, and document a justified platform deviation.

open as a page

How would you roll out a new design-system lint rule, such as banning a deprecated component, across forty product repositories without breaking everyone's builds?

level: seniorimportance: should knowfreq 32%

basics

~10 s

Ship the rule as a warning and measure; then block only new violations against a per-repository baseline; then burn the baseline down and block everything by a date tied to the component's removal.

open as a page

An e-signature product has accumulated 300 suppressions of the design system's raw-color lint rule; how would you review them and stop the count from growing?

level: seniorimportance: should knowfreq 28%

basics

~20 s

Group suppressions by reason, not file: system gaps, an over-broad rule, data-driven values, debt. Fix gaps and the rule first, burn down the debt, then require reasons, route new suppressions for review and fail CI if the count rises.

open as a page

A team built a cloud console's instance detail panel from a design editor's inspect mode and shipped fixed widths and raw colors; what went wrong, and how would you fix the handoff?

level: seniorimportance: should knowfreq 35%

basics

~20 s

Inspect mode reports one drawn frame's geometry and resolved values, not intent: whether a width fills, which token a color plays, which component a layer is. Build designs from linked library pieces, annotate resize rules, and review handoff together.

open as a page

In a design system for an insurance claims portal, how do you make a new status-tag variant land in the design library and the coded library together?

level: seniorimportance: should knowfreq 28%

basics

~20 s

Treat the variant as one change with one definition of done: agree name, values and tokens in the spec, build design and code variants in parallel, review them against each other, and publish both before announcing it.

open as a page