Northwind Studio

How to build a Figma handoff developers actually want to use

Stop throwing static designs over the wall. Learn how to structure Figma files and use design tokens to build a shared language with your engineering team.

Generated with TopicForge

An engineer pings you at 10:00 PM on a Thursday. They are staring at a Figma frame titled Dashboard_v3_final_REAL_v2—a chaotic canvas of detached buttons, three random shades of dark gray text, and a layout that defies any known grid. They just want to know which button style to build.

This is the messy reality of the traditional design handoff. We treat it like a border crossing—we pack up our work, throw it over a high wall, and hope the engineering team can make sense of the wreckage.

It does not have to be this painful. When we stop treating handoff as a single, dramatic event and start treating it as a shared language, the friction disappears.

The handoff myth and why the old way fails

For years, the design industry treated handoff like a relay race. The designer ran their leg of the race, handed off a static baton—first as a layered Photoshop file, then as a PDF, and eventually as a link to a chaotic Figma canvas—and walked away.

This approach fails because static screens cannot capture dynamic software. A static mockup does not show what happens when a user's name is forty characters long—or how a card wraps on a tablet—or how a button behaves during a slow API call.

When you dump flat designs on developers, you force them to make design decisions on the fly. They have to guess the hover states, guess the responsive behavior, and guess which gray you actually meant to use. Real collaboration is an ongoing translation process. Your job is to build the dictionary.

Structuring Figma files for human eyes

If a developer opens your Figma file and has to zoom out to 2% to find the start of the user flow, the battle is already lost. Clean file structure is a form of respect—it tells your engineering partners that you value their time.

We structure our delivery files to be read from top to bottom, left to right. We separate our messy sandbox pages from our clean delivery pages.

Here is a simple, effective page structure you can copy:

  • ℹ️ Read Me First: A single frame explaining the project scope, links to Jira or linear tickets, and a legend for status badges.
  • 🟢 Ready for Dev: Only screens that are fully approved and ready to be built live here—no messy iterations.
  • 🟡 In Review: Work that is currently being tested or awaiting stakeholder feedback.
  • 🔴 Archive: Old explorations. Do not delete them—just move them here so they do not clutter the active canvas.

Inside your "Ready for Dev" page, use visual status badges at the top of each frame. A simple green component badge that says "Ready" or a yellow one that says "In Progress" prevents developers from writing code for a feature that is still being debated in a product review.

Component naming that matches the code

Nothing slows down a build like a Figma file filled with layers named Group 4102 or Frame 98. When your design components do not match the components in the codebase, developers have to translate your names into their own system.

Your component names, variants, and properties should mirror the code. If your developers use React, sit down with them and agree on a naming convention.

A worked example of component alignment

Let us look at a standard button component. In Figma, you might be tempted to create separate components for every single button variation. Instead, use component properties and variants to match how a developer writes props.

For example, instead of creating a component named Button-Primary-Large-Hover, build a single Button component with three clear properties:

  • Variant: Primary / Secondary / Tertiary
  • Size: Small / Medium / Large (represented as sm, md, lg in code)
  • State: Default / Hover / Focus / Disabled

(Note: These property names are illustrative examples of a standard system setup.)

When a developer clicks on your button in Figma's Dev Mode, they should see properties that look exactly like the React props they are about to write:

<Button variant="primary" size="lg" state="default">
  Get Started
</Button>

When your design properties match their code properties, implementation speed doubles—there is no translation required.

Using design tokens instead of pixel-pushing

If your designs rely on hardcoded hex values like #1E293B or arbitrary margins like 13px, your codebase will eventually bloat. Developers will write custom CSS overrides for every new page, and your product's visual consistency will erode.

Design tokens solve this by replacing raw values with semantic names. Instead of telling a developer to use a specific hex code for a border, you use a token.

At Northwind Studio, we deliver comprehensive design systems built with dev-ready tokens for spacing, color, and typography so engineers never have to guess a hex code.

For example, look at how we structure our color tokens:

Design ValueToken NameUsage
#FFFFFFcolor-bg-primaryMain page background
#F8FAFCcolor-bg-secondaryCard and sidebar background
#0F172Acolor-text-primaryHeadings and body text
#64748Bcolor-text-mutedCaptions and helper text

(Note: These token values are illustrative examples of a basic color scale.)

When the brand evolves and you need to change your primary background color, you do not have to update fifty static mockups. You update the token value once—and it updates across the entire design system and codebase.

What not to pixel-push: knowing your boundaries

Designers often waste hours trying to make static layouts look perfect at every single pixel width. They design a 375px mobile screen, a 1440px desktop screen, and an 800px tablet screen.

The web is fluid. It does not exist in fixed boxes. Instead of micro-managing exact pixel values for every layout, define the rules of the system and trust your developers to implement them.

Stop specifying that a card must be exactly 320px wide. Instead, specify that the card container has a minimum width of 280px, a maximum width of 400px, and should stretch to fill the available space using CSS Flexbox. Use Figma's Auto Layout to build these rules directly into your designs. When you resize a frame in Figma and the content behaves correctly, the developer can inspect those exact constraints and build them in CSS.

The fifteen-minute walkthrough

Documentation is necessary, but it should not be a substitute for human conversation. No matter how clean your Figma files are, a quick live conversation or a short screen recording saves hours of back-and-forth Slack messages.

Before you hand off a major feature, record a ten-to-fifteen-minute Loom video. Walk through the file as if you were the user. Explain the happy path, point out the edge cases, show how the responsive layout behaves, and explain what happens when an error occurs.

This quick video gives developers the context they need before they write a single line of code. They can watch it on their own time, refer back to it during development, and write clean code with confidence.


If you want to build digital products that scale, you need to bridge the gap between design and development. We help teams establish these exact processes through our retainer-based design ops support, setting up robust design systems and Figma structures that keep your product momentum high.

FAQs

What is the best way to organize Figma pages for developer handoff?

Keep your working files separate from your delivery files. In your delivery file, use clear page names with emojis or status tags like '🟢 Ready for Dev', '🟡 In Review', and '🔴 Archive'. Keep a single, clean frame for each screen size and delete any loose, unused layers to avoid confusion.

Should designers write CSS for developers?

No, designers do not need to write production CSS, but they should understand how CSS layout models like Flexbox and Grid work. Designing with Auto Layout in Figma ensures your designs naturally translate to clean CSS without requiring you to write the code yourself.

How do design tokens help the handoff process?

Design tokens replace hardcoded values with names. Instead of telling a developer to use '#1A1A1A' for a border, you use a token like 'color-border-default'. This ensures consistency across platforms and makes global design updates as simple as changing a single value in a central file.

How do we handle responsive design specs without designing every screen size?

Design the minimum and maximum breakpoints, then document the behavior in between. Use Figma's constraints and auto-layout to show how elements stretch or wrap, and write simple notes explaining when a layout should stack vertically.

← More from Automatic blog