March 15, 2023

From Figma to Production: Closing the Design-Dev Gap

FigmaHandoffCollaborationDesign Systems

The Handoff Myth

There's a moment in every project where designs are "done" and get "handed off" to developers. This moment is a lie.

The handoff model imagines design and development as sequential phases: designers finish, developers start. In reality, the best products emerge from ongoing collaboration where design and development inform each other continuously.

After years of watching handoff processes fail -and slowly learning what actually works -I've developed a different perspective on how design becomes code.

Why Traditional Handoffs Fail

The Telephone Game

By the time a design reaches production, it's passed through multiple translation layers:

  • Designer's intent → Figma file
  • Figma file → Handoff documentation
  • Documentation → Developer's interpretation
  • Interpretation → Code implementation

Each translation loses information. Nuances disappear. Context evaporates. The final product often only roughly resembles the original design.

Static Specifications Can't Capture Dynamic Experiences

Figma captures screens, not experiences. Transitions, loading states, error handling, edge cases -these exist imperfectly in static mockups. Developers fill in gaps with their best guesses, which often differ from designer intent.

Design Evolves During Development

Development reveals problems designs can't anticipate. Performance constraints, technical limitations, data that doesn't behave as expected -these discoveries require design adaptation. A rigid handoff model can't accommodate this evolution.

Knowledge Asymmetry

Designers don't always understand technical constraints. Developers don't always understand design rationale. Without ongoing dialogue, each side makes assumptions the other finds baffling.

Design Tokens as Source of Truth

The most important shift in modern design-dev workflows is treating design tokens as the shared source of truth.

What Are Design Tokens?

Design tokens are the atomic values that define a design system:

  • Colors (primary-500: #3B82F6)
  • Spacing (space-4: 16px)
  • Typography (heading-lg: 24px/32px bold)
  • Shadows, borders, radii, transitions...

Tokens exist in an abstract format that both design tools and code can consume. Change a token, and both Figma and production update.

Why Tokens Matter

Single source of truth: Designers and developers reference the same values. No more "the blue in Figma doesn't match the blue in production."

Systematic consistency: Using tokens enforces design system decisions. Ad hoc values become visible violations.

Efficient updates: Changing a token propagates everywhere. Global style updates become trivial rather than terrifying.

Implementing Token Workflows

  1. Define tokens in a neutral format (JSON, YAML, or tools like Tokens Studio)
  2. Generate Figma variables from tokens
  3. Generate code variables (CSS custom properties, JS constants) from tokens
  4. Automate sync between source tokens and outputs

This isn't free. It requires tooling investment. But the alignment it creates is worth the effort.

Figma Dev Mode: Promise and Limitation

Figma Dev Mode promised to solve handoff by giving developers design information in developer-friendly formats. It partially delivers.

What Dev Mode Does Well

  • Shows dimensions, spacing, and styles in code-like formats
  • Highlights components and their properties
  • Integrates with VS Code for quick reference
  • Tracks changes between versions

What Dev Mode Can't Do

  • Capture interaction details beyond basic prototypes
  • Explain why design decisions were made
  • Replace human communication about intent
  • Account for edge cases not represented in mockups

Dev Mode is a tool, not a solution. It improves information access but doesn't replace collaboration.

Async Collaboration Patterns

The alternative to handoff isn't constant meetings. It's async collaboration that keeps both sides informed without blocking either.

Design Documentation That Developers Read

Most design documentation goes unread because it's:

  • Too long
  • In unfamiliar tools
  • Disconnected from the code

Effective documentation:

  • Lives close to the implementation (in the PR or ticket)
  • Uses developer-friendly formats (Markdown, Notion, Linear)
  • Focuses on decisions, not descriptions (Figma already shows what; docs explain why)
  • Highlights edge cases and exceptions

Comments on Design Files

Asynchronous discussions on Figma frames keep context attached to designs. Before implementing, developers should:

  • Review designs in context
  • Ask clarifying questions as comments
  • Confirm understanding before coding

Designers should:

  • Respond to questions promptly
  • Update designs to address common confusions
  • Leave comments explaining non-obvious decisions

Video Walkthroughs

A 5-minute video explaining a feature is often worth more than pages of documentation. Record yourself walking through:

  • The user journey
  • Key interactions and states
  • Edge cases to handle
  • Areas of flexibility

Videos scale. Record once, watch asynchronously.

The Role of Design Engineers

Some teams have discovered a secret weapon: design engineers (or front-end developers with strong design sensibility).

Design engineers:

  • Translate design intent into code with high fidelity
  • Push back on designs that won't work technically
  • Suggest improvements that design alone couldn't envision
  • Build prototypes that test real interactions

If your organization can hire design engineers, consider it. They bridge the gap more effectively than process ever could.

Component-Based Collaboration

When design systems and component libraries align, collaboration becomes component-level rather than screen-level.

Designing with Real Components

Instead of designing screens from scratch, design by assembling existing components. This ensures:

  • Designs are implementable by definition
  • Components have been tested and are accessible
  • Development time focuses on assembly, not creation

Component Specifications

For new components, designers and developers should collaborate on specifications:

  • What props/variants does this component need?
  • What states does it have?
  • How does it behave responsively?
  • What accessibility requirements must it meet?

Document these jointly. Don't throw specs over the wall.

Handling Design Changes

Design will change during development. Plan for it.

Non-Breaking Changes

Small adjustments (spacing tweaks, copy updates) should have minimal friction. Designers update files; developers notice and adjust. No ceremony required.

Breaking Changes

Significant redesigns need coordination:

  1. Designer explains what's changing and why
  2. Developer estimates impact on current work
  3. Together, decide whether to pivot or defer
  4. If pivoting, update scope and timeline

The "Good Enough" Conversation

Sometimes, implementation won't match design perfectly. Discuss the gap:

  • Is it worth fixing now?
  • Can it be addressed in a follow-up?
  • Is the deviation actually fine?

Not every pixel matters equally. Prioritize visible impact over technical purity.

Measuring Handoff Success

How do you know if your design-dev workflow is working?

Quantitative Signals

  • Time from design completion to production
  • Number of back-and-forth cycles
  • Design-related bugs in production
  • Deviation between design and implementation

Qualitative Signals

  • Designer satisfaction with implementations
  • Developer frustration with unclear designs
  • Product quality perception
  • Team collaboration health

If numbers are improving and people are happy, your workflow is working. If not, diagnose and iterate.

Practical Steps to Improve

If your handoff is struggling, start here:

  1. Establish design tokens if you haven't already. This creates shared language.

  2. Move documentation closer to implementation. Put design context in tickets, not separate tools.

  3. Create video walkthroughs for complex features. Asynchronous explanation scales.

  4. Schedule regular design-dev syncs. Even 30 minutes weekly improves alignment dramatically.

  5. Celebrate great implementations. When developers nail the design intent, acknowledge it publicly.

  6. Retrospect on handoff failures. When things go wrong, understand why and fix the process.

The Ongoing Relationship

The best design-dev relationships I've seen aren't about handoffs at all. They're ongoing conversations where:

  • Designers understand technical constraints and design with them
  • Developers understand design intent and implement with care
  • Both sides feel ownership over the final product
  • Feedback flows freely in both directions

This doesn't happen by accident. It requires intentional process design and cultural investment. But when it works, the handoff problem disappears. Not because it's solved, but because it's dissolved.

Design and development become one continuous flow toward the same goal.


What's worked (or failed) in your design-dev workflow? Always curious to hear other perspectives.