Design-to-Dev Handoff Checklist - Everything Developers Need From Designers
A pre-handoff checklist for states, breakpoints, spacing, animations, color tokens, typography, exports, and accessibility annotations.
Built for practical use
Design system checks
A pre-handoff checklist for states, breakpoints, spacing, animations, color tokens, typography, exports, and accessibility annotations.
State coverage
A pre-handoff checklist for states, breakpoints, spacing, animations, color tokens, typography, exports, and accessibility annotations.
Responsive specs
A pre-handoff checklist for states, breakpoints, spacing, animations, color tokens, typography, exports, and accessibility annotations.
Accessibility annotations
A pre-handoff checklist for states, breakpoints, spacing, animations, color tokens, typography, exports, and accessibility annotations.
Run The Handoff Review
Review pre-handoff foundations, screen-level details, and component completeness before engineering picks up the work.
Design System
Design tokens defined
— colors, typography, spacing, borders, shadows reference tokens (not raw hex codes)
Component library organized
— all reusable components are in the design system, not one-off
Component variants documented
— primary, secondary, tertiary, destructive for buttons; all sizes for inputs, etc.
States defined for all components
— default, hover, focus, active, disabled, loading, error, success
Typography scale is consistent
— no random font sizes
Spacing scale is consistent
— uses 4pt or 8pt grid system
Icon library is unified
— single icon style and source
Figma File Structure
Pages are organized logically
— e.g., "01 — Cover," "02 — Design System," "03 — Core Flows," etc.
Frames are named descriptively
— "Dashboard — Desktop — Default" (not "Frame 47")
Layers are named
— groups have meaningful names, auto-generated "Frame 34" is cleaned up
Components use Figma Components
(not copies) — so updates propagate
Variants properly configured
— single component with variants, not separate components per state
Auto Layout used
where appropriate for responsive behavior
Hidden work is hidden or deleted
— no "V1 Archived" frames cluttering the file
Dev Mode enabled
— developer access is granted
Visual Completeness
All responsive breakpoints designed
— desktop (1440px), laptop (1024px), tablet (768px), mobile (375px)
Both light and dark mode designed
(if supporting both)
Zoom state designed
(if text is expected to scale to 200%+)
States
Default state
— the "happy path"
Empty state
— when no data exists (e.g., new user, no items in list)
Loading state
— skeleton screens, spinners, or progress indicators
Error state
— API failure, network error, invalid data
Success state
— completion confirmation, success messages
Filtered/no-results state
— when filters produce zero matches
Permission-denied state
— user lacks access (if applicable)
Session-expired state
— timed-out session handling
Data Variations
Short content
— minimum expected length (single character, 1 item)
Long content
— maximum or overflow (100-char names, 1000+ items, many paragraphs)
Empty values
— null/undefined handled gracefully
Edge-case values
— 0, negative numbers, very large numbers, dates in different formats
Accessibility
Color contrast passes WCAG AA
(4.5:1 normal text, 3:1 large text/UI)
Focus indicators designed
— visible keyboard focus styles
Interactive areas are at least 44×44px on mobile
Alt text specified for images
ARIA labels specified for icon-only buttons
Screen reader behavior noted
for complex interactions
Interaction Specs
Animations defined
— duration, easing curve, what triggers
Transitions specified
— enter/exit animations, state changes
Micro-interactions documented
— hover delays, click ripples, etc.
Scroll behavior specified
— fixed/sticky elements, scroll snapping, infinite scroll
Anatomy
Anatomy documented
— labeled parts of the component
Padding/spacing internal
— all internal spacing documented
Maximum widths / heights
— if applicable
Corner radius
— specified via token
Border
— thickness, color, style
Variants
All visual variants
— primary, secondary, tertiary, destructive, ghost
All size variants
— small, medium, large (with exact dimensions)
With/without icon variants
— leading, trailing, icon-only
States (each variant × each state)
Default
Hover
— background color change, elevation change, cursor change
Focus
— focus ring specification
Active / Pressed
— color/scale shift
Disabled
— reduced opacity or different color, cursor: not-allowed
Loading
— spinner or skeleton
Error
(form inputs, specifically)
Success
(form inputs, specifically)
Behavior
Click/tap behavior
— what happens
Keyboard behavior
— Enter, Space, Escape, Tab, Arrow keys as applicable
Focus behavior
— where focus moves
Accessibility
— role, aria-labels, keyboard shortcuts
Icons
All icons exported as SVG
(preferred) or optimized PNG
Icon sizes standardized
— 16px, 20px, 24px (use one system)
Single icon set
— not mixed between Heroicons, Phosphor, Lucide, etc.
Stroke weight consistent
across icons
Icons optimized
— SVGO or similar to remove unused metadata
Images
Images exported at multiple resolutions
— 1x, 2x, 3x for retina
Modern formats provided
— WebP preferred, with JPG/PNG fallback
Dimensions specified
— width and height for every image (prevents layout shift)
Alt text defined
for every image
Illustrations
SVG format preferred
for decorative illustrations
PNG for complex raster illustrations
Color tokens used
— illustrations reference design tokens, not hardcoded colors
Typography
Web fonts specified
— font files, weights, styles
Font fallback stack defined
— e.g., `"Inter", -apple-system, BlinkMacSystemFont, sans-serif`
font-display property specified
— typically `swap`
Color Tokens
Primitive colors defined
— full color palette (10 shades each for primary, gray, etc.)
Semantic colors defined
— color-text-primary, color-bg-default, color-border-focus, etc.
Component-level tokens
— button-primary-bg, card-surface, etc.
Dark mode tokens defined
(if supporting dark mode)
Typography Tokens
Font family tokens
— font-sans, font-mono
Font size tokens
— font-size-xs, font-size-sm, ... font-size-5xl
Font weight tokens
— font-weight-regular, font-weight-medium, etc.
Line height tokens
— line-height-tight, line-height-normal, etc.
Semantic typography combinations
— text-heading-1, text-body, text-caption
Spacing Tokens
Spacing scale defined
— space-1 (4px), space-2 (8px), ... space-24 (96px)
Component-specific spacing
— card-padding, input-padding, etc.
Other Tokens
Border radius tokens
— radius-sm, radius-md, radius-lg, radius-full
Shadow tokens
— shadow-sm, shadow-md, shadow-lg
Z-index tokens
— z-modal, z-popover, z-tooltip (for layering)
Animation tokens
— duration-fast, duration-slow, easing-in-out
Token Export
Tokens exportable to code
— via Tokens Studio, Style Dictionary, or similar
Format matches dev team preference
— CSS variables, Tailwind config, SCSS, JS objects
Breakpoints
Breakpoints defined explicitly
— e.g., mobile (<768px), tablet (768-1023px), desktop (1024-1439px), wide (1440px+)
Fluid vs. fixed layouts documented
— when does layout stretch vs. center?
Maximum content widths specified
— e.g., text max-width: 720px
Layout Behavior
Column count per breakpoint
— e.g., 4 columns desktop → 2 columns tablet → 1 column mobile
Image behavior
— cover, contain, fit, crop directions
Sidebar behavior
— desktop: persistent; tablet: toggleable; mobile: drawer
Navigation transformation
— desktop: top horizontal; mobile: hamburger → drawer
Table behavior
— desktop: full table; mobile: horizontal scroll or card layout
Touch-Specific
Touch target minimums
— 44×44px on mobile
Hover states suppressed on touch
— no :hover on touch devices
Swipe gestures defined
(if used)
Pull-to-refresh behavior
(if used)
Documentation
Animation duration
— in milliseconds (e.g., 200ms)
Easing function
— ease-in-out, ease, cubic-bezier values
Trigger
— what causes the animation (click, hover, page load)
Reduced motion alternatives
— respects `prefers-reduced-motion` OS setting
Common animations documented
Modal open/close
— duration, fade + scale, backdrop fade
Page transitions
— if any
Form validation
— shake on error, checkmark on success
Loading states
— skeleton shimmer duration, spinner speed
Micro-interactions
— button press, checkbox animation, toggle
Content
Actual copy provided
(not lorem ipsum)
Error messages specified
— exact text for each error state
Empty state copy
— headlines, descriptions, CTA text
Success messages specified
— confirmation copy
Tooltips and help text documented
Form validation messages
— for each field, each error condition
Data Formats
Number formatting
— decimal places, thousands separators, currency symbols
Date/time formatting
— locale-specific formats (US: MM/DD/YYYY; most of world: DD/MM/YYYY)
Truncation behavior
— character limits, ellipsis behavior
Placeholder text
— used appropriately (not as a replacement for labels)
Figma Documentation
Cover page exists
— project overview, last updated date, designer names
Component documentation
— anatomy, usage, dos and don'ts
Prototype links
— interactive prototypes for complex flows
Annotation frames
— call-outs for important behaviors
Redlines
— spacing measurements visible in Dev Mode
External Documentation (if needed)
Flow diagrams
— for complex multi-step processes
User story mapping
— which screens serve which user needs
Technical constraints noted
— any tech stack or library requirements
Third-party integrations
— if the design requires specific APIs or services
Post-Meeting Deliverables
Meeting notes
shared
Follow-up items assigned
with owners
Design iteration needs flagged
Designer Availability
Designer is available
for questions during implementation
Response time expectations set
(e.g., "I'll respond to questions within 4 hours")
Design reviews scheduled
at milestones (not just at end)
Change Management
Process for design changes
during build defined
Version control
— Figma branching or version history used
Communication norms
— where to raise issues (Figma comments, Slack, Linear tickets)
Design QA
Design QA before launch
— designer reviews built version
Pixel-level comparison
between Figma and implementation
Interaction behavior verified
matches design intent
Cross-browser testing
with designer involvement
Part 12: Post-Launch
Build documented back to design system
— update design system with any new components created during build
Retrospective conducted
— what worked, what didn't
Handoff process improvements captured
— for next project
Why Handoff Matters
Handoff is where design quality lives or dies. A beautiful Figma file means nothing if developers can't build it faithfully.
The most common sources of implementation drift:
- Missing states (hover, focus, disabled, error, empty, loading)
- Undefined breakpoints
- Inconsistent spacing values
- Missing interaction specs
- Accessibility gaps not documented
- Edge cases not addressed
This checklist catches these issues before handoff, not during it. Use it before any major design-to-dev transition.
Who this is for: Designers preparing work for developer handoff, design leads reviewing their team's work, developers requesting better handoff documentation, and product managers coordinating design-dev workflows.
Part 1: Pre-Handoff Foundation
Before getting into screen-specific details, ensure the design system foundation is solid.
Design System
- Design tokens defined — colors, typography, spacing, borders, shadows reference tokens (not raw hex codes)
- Component library organized — all reusable components are in the design system, not one-off
- Component variants documented — primary, secondary, tertiary, destructive for buttons; all sizes for inputs, etc.
- States defined for all components — default, hover, focus, active, disabled, loading, error, success
- Typography scale is consistent — no random font sizes
- Spacing scale is consistent — uses 4pt or 8pt grid system
- Icon library is unified — single icon style and source
Figma File Structure
- Pages are organized logically — e.g., "01 — Cover," "02 — Design System," "03 — Core Flows," etc.
- Frames are named descriptively — "Dashboard — Desktop — Default" (not "Frame 47")
- Layers are named — groups have meaningful names, auto-generated "Frame 34" is cleaned up
- Components use Figma Components (not copies) — so updates propagate
- Variants properly configured — single component with variants, not separate components per state
- Auto Layout used where appropriate for responsive behavior
- Hidden work is hidden or deleted — no "V1 Archived" frames cluttering the file
- Dev Mode enabled — developer access is granted
Part 2: Screen-Level Checklist
For each screen in the design, confirm:
Visual Completeness
- All responsive breakpoints designed — desktop (1440px), laptop (1024px), tablet (768px), mobile (375px)
- Both light and dark mode designed (if supporting both)
- Zoom state designed (if text is expected to scale to 200%+)
States
- Default state — the "happy path"
- Empty state — when no data exists (e.g., new user, no items in list)
- Loading state — skeleton screens, spinners, or progress indicators
- Error state — API failure, network error, invalid data
- Success state — completion confirmation, success messages
- Filtered/no-results state — when filters produce zero matches
- Permission-denied state — user lacks access (if applicable)
- Session-expired state — timed-out session handling
Data Variations
- Short content — minimum expected length (single character, 1 item)
- Long content — maximum or overflow (100-char names, 1000+ items, many paragraphs)
- Empty values — null/undefined handled gracefully
- Edge-case values — 0, negative numbers, very large numbers, dates in different formats
Accessibility
- Color contrast passes WCAG AA (4.5:1 normal text, 3:1 large text/UI)
- Focus indicators designed — visible keyboard focus styles
- Interactive areas are at least 44×44px on mobile
- Alt text specified for images
- ARIA labels specified for icon-only buttons
- Screen reader behavior noted for complex interactions
Interaction Specs
- Animations defined — duration, easing curve, what triggers
- Transitions specified — enter/exit animations, state changes
- Micro-interactions documented — hover delays, click ripples, etc.
- Scroll behavior specified — fixed/sticky elements, scroll snapping, infinite scroll
Part 3: Component-Level Details
For each reusable component:
Anatomy
- Anatomy documented — labeled parts of the component
- Padding/spacing internal — all internal spacing documented
- Maximum widths / heights — if applicable
- Corner radius — specified via token
- Border — thickness, color, style
Variants
- All visual variants — primary, secondary, tertiary, destructive, ghost
- All size variants — small, medium, large (with exact dimensions)
- With/without icon variants — leading, trailing, icon-only
States (each variant × each state)
- Default
- Hover — background color change, elevation change, cursor change
- Focus — focus ring specification
- Active / Pressed — color/scale shift
- Disabled — reduced opacity or different color, cursor: not-allowed
- Loading — spinner or skeleton
- Error (form inputs, specifically)
- Success (form inputs, specifically)
Behavior
- Click/tap behavior — what happens
- Keyboard behavior — Enter, Space, Escape, Tab, Arrow keys as applicable
- Focus behavior — where focus moves
- Accessibility — role, aria-labels, keyboard shortcuts
Part 4: Assets
Icons
- All icons exported as SVG (preferred) or optimized PNG
- Icon sizes standardized — 16px, 20px, 24px (use one system)
- Single icon set — not mixed between Heroicons, Phosphor, Lucide, etc.
- Stroke weight consistent across icons
- Icons optimized — SVGO or similar to remove unused metadata
Images
- Images exported at multiple resolutions — 1x, 2x, 3x for retina
- Modern formats provided — WebP preferred, with JPG/PNG fallback
- Dimensions specified — width and height for every image (prevents layout shift)
- Alt text defined for every image
Illustrations
- SVG format preferred for decorative illustrations
- PNG for complex raster illustrations
- Color tokens used — illustrations reference design tokens, not hardcoded colors
Typography
- Web fonts specified — font files, weights, styles
- Font fallback stack defined — e.g.,
"Inter", -apple-system, BlinkMacSystemFont, sans-serif - font-display property specified — typically
swap
Part 5: Design Tokens
Before handoff, ensure tokens are properly set up:
Color Tokens
- Primitive colors defined — full color palette (10 shades each for primary, gray, etc.)
- Semantic colors defined — color-text-primary, color-bg-default, color-border-focus, etc.
- Component-level tokens — button-primary-bg, card-surface, etc.
- Dark mode tokens defined (if supporting dark mode)
Typography Tokens
- Font family tokens — font-sans, font-mono
- Font size tokens — font-size-xs, font-size-sm, ... font-size-5xl
- Font weight tokens — font-weight-regular, font-weight-medium, etc.
- Line height tokens — line-height-tight, line-height-normal, etc.
- Semantic typography combinations — text-heading-1, text-body, text-caption
Spacing Tokens
- Spacing scale defined — space-1 (4px), space-2 (8px), ... space-24 (96px)
- Component-specific spacing — card-padding, input-padding, etc.
Other Tokens
- Border radius tokens — radius-sm, radius-md, radius-lg, radius-full
- Shadow tokens — shadow-sm, shadow-md, shadow-lg
- Z-index tokens — z-modal, z-popover, z-tooltip (for layering)
- Animation tokens — duration-fast, duration-slow, easing-in-out
Token Export
- Tokens exportable to code — via Tokens Studio, Style Dictionary, or similar
- Format matches dev team preference — CSS variables, Tailwind config, SCSS, JS objects
Part 6: Responsive Design
Breakpoints
- Breakpoints defined explicitly — e.g., mobile (<768px), tablet (768-1023px), desktop (1024-1439px), wide (1440px+)
- Fluid vs. fixed layouts documented — when does layout stretch vs. center?
- Maximum content widths specified — e.g., text max-width: 720px
Layout Behavior
- Column count per breakpoint — e.g., 4 columns desktop → 2 columns tablet → 1 column mobile
- Image behavior — cover, contain, fit, crop directions
- Sidebar behavior — desktop: persistent; tablet: toggleable; mobile: drawer
- Navigation transformation — desktop: top horizontal; mobile: hamburger → drawer
- Table behavior — desktop: full table; mobile: horizontal scroll or card layout
Touch-Specific
- Touch target minimums — 44×44px on mobile
- Hover states suppressed on touch — no :hover on touch devices
- Swipe gestures defined (if used)
- Pull-to-refresh behavior (if used)
Part 7: Animation & Motion
Documentation
- Animation duration — in milliseconds (e.g., 200ms)
- Easing function — ease-in-out, ease, cubic-bezier values
- Trigger — what causes the animation (click, hover, page load)
- Reduced motion alternatives — respects
prefers-reduced-motionOS setting
Common animations documented
- Modal open/close — duration, fade + scale, backdrop fade
- Page transitions — if any
- Form validation — shake on error, checkmark on success
- Loading states — skeleton shimmer duration, spinner speed
- Micro-interactions — button press, checkbox animation, toggle
Part 8: Data & Copy
Content
- Actual copy provided (not lorem ipsum)
- Error messages specified — exact text for each error state
- Empty state copy — headlines, descriptions, CTA text
- Success messages specified — confirmation copy
- Tooltips and help text documented
- Form validation messages — for each field, each error condition
Data Formats
- Number formatting — decimal places, thousands separators, currency symbols
- Date/time formatting — locale-specific formats (US: MM/DD/YYYY; most of world: DD/MM/YYYY)
- Truncation behavior — character limits, ellipsis behavior
- Placeholder text — used appropriately (not as a replacement for labels)
Part 9: Documentation
Figma Documentation
- Cover page exists — project overview, last updated date, designer names
- Component documentation — anatomy, usage, dos and don'ts
- Prototype links — interactive prototypes for complex flows
- Annotation frames — call-outs for important behaviors
- Redlines — spacing measurements visible in Dev Mode
External Documentation (if needed)
- Flow diagrams — for complex multi-step processes
- User story mapping — which screens serve which user needs
- Technical constraints noted — any tech stack or library requirements
- Third-party integrations — if the design requires specific APIs or services
Part 10: Handoff Meeting
Before handoff, schedule a meeting with:
- Designer(s)
- Engineer(s)
- Product manager (optional but helpful)
- QA (optional)
Meeting Agenda
1. Design Walkthrough (30-45 min)
- Walk through each major flow
- Explain rationale for design decisions
- Show all states and variations
2. Q&A and Gotchas (15-20 min)
- Address engineer questions
- Flag edge cases
- Discuss implementation complexity
3. Estimate and Scope (15 min)
- Rough engineering estimate per flow
- Identify things that can be simplified
- Flag features needing additional design iteration
4. Cadence Setup (5 min)
- Decide on review cadence (daily standup? weekly review?)
- Set up communication channels (Slack channel, Figma comments)
- Agree on how design changes during build will be handled
Post-Meeting Deliverables
- Meeting notes shared
- Follow-up items assigned with owners
- Design iteration needs flagged
Part 11: During Development
Designer Availability
- Designer is available for questions during implementation
- Response time expectations set (e.g., "I'll respond to questions within 4 hours")
- Design reviews scheduled at milestones (not just at end)
Change Management
- Process for design changes during build defined
- Version control — Figma branching or version history used
- Communication norms — where to raise issues (Figma comments, Slack, Linear tickets)
Design QA
- Design QA before launch — designer reviews built version
- Pixel-level comparison between Figma and implementation
- Interaction behavior verified matches design intent
- Cross-browser testing with designer involvement
Part 12: Post-Launch
- Build documented back to design system — update design system with any new components created during build
- Retrospective conducted — what worked, what didn't
- Handoff process improvements captured — for next project
Handoff Self-Assessment
Before declaring a design "ready for handoff," ask yourself:
If I disappeared tomorrow...
- Could a developer build this without needing to ask me questions?
- Are all states, edge cases, and variations covered?
- Are accessibility requirements documented?
- Are assets organized and exported?
If not, what's missing? Fix those gaps before handoff.
Common Handoff Failures
Failure 1: "Make it responsive"
Designing only desktop and handing off with "make it responsive" is the #1 source of implementation issues. Design every breakpoint.
Failure 2: Only default states designed
Hover, focus, error, loading, empty states are often missing. These are 60-80% of the actual UI work.
Failure 3: Inconsistent spacing
If designs use 14px, 16px, 18px, 22px arbitrarily, developers can't implement a consistent spacing system.
Failure 4: Missing interaction specs
"The button should feel snappy" isn't an interaction spec. Duration, easing, and behavior must be specified.
Failure 5: Lorem ipsum everywhere
Copy affects layout. Using placeholder text hides issues with real content length.
Failure 6: No dark mode (when product supports it)
Retrofitting dark mode after build is painful. Design it from the start.
Failure 7: Ignoring accessibility
Contrast failures, missing focus states, and inadequate touch targets aren't development bugs — they're design gaps.
Failure 8: Disorganized Figma files
If engineers can't find the current version of a screen, implementation suffers.
Sources and References
- Nielsen Norman Group, "Design Handoff Best Practices"
- Figma, "Dev Mode Documentation"
- Brad Frost, "Atomic Design" (design system thinking)
- Dan Mall, "Design That Scales"
- Airbnb Design blog, handoff essays
- Shopify Polaris, design system documentation approach
Created by Desisle — SaaS UI/UX Design Agency desisle.com | hello@desisle.com Free to use and share with attribution.
For design-to-dev consulting or to audit your handoff process, contact us at hello@desisle.com.
Keep Building With These Next
Frontend Code Quality Checklist - Ensuring the Build Matches the Design
A design QA checklist for verifying pixel accuracy, responsiveness, font rendering, spacing, interaction fidelity, accessibility, performance, and browser coverage.
Open Frontend QA ChecklistThe SaaS UX Audit Checklist - 100 Points to Check Today
The same 100-point UX audit checklist our team uses when reviewing SaaS products across onboarding, navigation, dashboards, forms, accessibility, mobile responsiveness, and performance.
Open UX Audit ChecklistThe UI Design Checklist - 80 Points for Pixel-Perfect Screens
A UI review checklist for typography, color systems, spacing, consistency, responsiveness, states, accessibility, and handoff readiness.
Open UI ChecklistNeed This Applied to Your Product? We'll Turn It Into Execution.
These resource pages are meant to be used hands-on. If you want the audit, plan, or framework translated into live product work, we can do that with your team.