Designing on Screenshots in a Distributed Team
I joined Figure as the designer in the Brno office in June 2024 - embedded with the Czech development team and bridging to a PM/lead designer in New York. Figure makes restaurant technology such as point-of-sale, mobile ordering app, kitchen display, web management platform, and a new mobile POS in active development.
The design practice was at an early stage. Most products had a set of basic Figma components but lacked screen components. Designers worked directly on top of product screenshots - layering new designs over captured images of the real app, then color-picking from those screenshots and typing hex codes into Figma's color picker by hand.
That created a cascade of problems downstream:
- Inconsistencies between products were common but rarely escalated - too small to bother the New York team about across a timezone gap.
- Developers first saw designs at grooming as finished high-fidelity artifacts, too late for technical input.
- The same button was called Button in Figma and MainButton in code.
- When small clarifications went unanswered, developers made their best guess and moved on.
What Developers Actually Needed
Before proposing solutions, I did research. During July 2024, I had informal conversations with the Brno developers: what did they actually expect from a designer working alongside them? The conversations revealed a systemic improvement roadmap.
Developers were frustrated by design inconsistencies but weren't raising them. They wanted to see designs earlier, not at grooming as a finished artifact. They wanted component names that matched what they wrote in code. And multiple developers, unprompted, named design tokens as something that would make their work meaningfully better.
"Developers would welcome a gradual introduction of design/semantic tokens, and design system practices, starting with the most used elements - buttons, colors, font sizes, icons - to start eliminating inconsistencies between designs and implementation."
— Developer feedback from July 2024
Process
The work unfolded in four overlapping areas.
Rebuilding from Screenshots to Components
Rather than a separate "design system sprint," I embedded component work directly into real design tasks. When working on a feature, I retraced the existing product screens into proper Figma vector components as I went - making every subsequent task faster.
Following Dan Mall's contribution model: design system work hides inside product work. Build the system by building the product.
- Retraced screens into proper Figma components, working feature by feature rather than in a separate system sprint.
- Met with developers to review components before grooming to verify implementability — not just visual correctness.
- Added slot-based container components (e.g. Bottom Sheet) for flexible composition.
- Converted logos from bitmap to scalable Figma components with toggleable tags for production and local builds.
Not all components got it right the first time. Early builds were designed for maximum Figma flexibility — every variant and property exposed, every combination possible. Developers flagged the problem: that flexibility created invalid states that don't exist in code, making it unclear what to implement.
The fix: several components were rebuilt around a closer 1:1 mapping between Figma and implementation — same variants, same states, same names. Where Figma genuinely can't constrain an edge case, an annotation explains the intent instead. The change benefited designers too: fewer opportunities to accidentally combine properties into something that doesn't correspond to anything in production.
Figure Design Tokens
Developers had named tokens explicitly as a pain point. I made it the next focus. I studied design tokens seriously — completing Brad Frost's Subatomic course and Dan Mall's Design Systems 101 — then built Figure Design Tokens in Figma as a first-class system.
One constraint: scheduling and daily workload meant the team couldn't workshop the token architecture together before building. I defined the first version independently, validating choices with developers as I went rather than presenting a finished structure for sign-off. The first version is working well, and is understood to be a living system that will continue to evolve.
The tokens were introduced on mPOS, a new product in active development. Greenfield products are the right entry point: tokens can be there from the start, and the work integrates naturally into sprints rather than requiring a separate migration effort.
- Created Figure Design Tokens Figma file: color, spacing, typography, border - each documented with values and names.
- Aligned token names with developer; renamed collections to Pascal Case for clean export.
- Proved and shipped the full pipeline end-to-end.
color/brand/primary
{ "value": "#e56b0c" }
source: ['tokens.json']
const brandPrimary = "#e56b0c"
- Created Whitelabel Tokens — a single source of truth for the 3 merchant brand variations. Switching a design between brands now takes two clicks rather than manually replacing every colour value across every file.
- Documented token changelog with semantic versioning aligned to dev expectations.
The tooling choice was deliberate. Token Studio and Supernova were both considered — each offers a polished UI layer for token management. The case against them was vendor lock-in: a third-party tool's pricing change or deprecation would break the pipeline.
Native Figma Variables with Style Dictionary won instead because:
- It follows the W3C Design Tokens community specification.
- The pipeline is owned entirely by the team.
- Any developer can read and modify a JSON file or Style Dictionary config without a plugin licence.
Closing the Design–Dev Gap
A component library and token pipeline only deliver value if they reach developers accurately and early. The bottlenecks at that boundary — late design visibility, mismatched naming, no version tracking — were as much a process problem as a tooling one.
- Got read-only access to Figure's source code on GitHub - could now read actual color values in code instead of guessing from screenshots, and compare naming between Figma and implementation.
- Used Storybook to pair production components with their Figma counterparts and test alignment.
- Named components consistently: "component extraction" sessions during grooming aligned Figma names with code names.
- Established a shared handoff process: designers set "Ready for dev" on components, link the exact Figma version history snapshot in Jira, and notify developers of changes via Slack.
- Thanks to the Project Manager, the design team moved from Notion to Jira - design and development tasks now tracked together under the same stories and epics.
Improving Collaboration Practices
Beyond tooling and process, the research revealed that collaboration itself needed to change. Designers were too far downstream in the development process.
- Joined grooming sessions regularly - answered feasibility questions on the spot, caught missed edge cases before dev started.
- Created a design review checklist in collaboration with PM, covering hover/pressed states, empty states, edge cases, icon viewboxes, shadow application, and spacing - adopted by the design team before handoff.
- Designers started reviewing each other's work before grooming.
- Product Manager began attending grooming, closing the NY/CZ communication loop.
- Lead developer became routinely involved in technical feasibility scoping, not just for major projects.
- Provided Figma training to non-designers so developers could navigate and inspect designs independently.
What Shipped, at Scale
The component work shipped. The mPOS UI kit — built from scratch — covers 24 components designed and handed off across two shipped milestones. The shared library serving Figure's existing products (POS, Web App, Mobile Ordering, MIB, CFD, Kiosk) grew by 90 new components and 20 updated ones.
The icon migration is done. 200+ icon font glyphs were extracted as individual SVGs, reorganised, and made independently usable in both Figma and code — replacing a monolithic icon font that couldn't be worked with selectively.
The token pipeline is live. Figma Variables export to JSON, convert via Style Dictionary to TypeScript, and are consumed directly by the mPOS app. Three merchant brand variations are managed from a single Whitelabel Tokens source — switching between brands takes two clicks rather than manually replacing every colour value across every design file.
Design–dev collaboration changed. Figma names now match code names for mPOS components. Feasibility discussions happen before hi-fi, not at grooming. Designers work from a component library, not screenshots. Handoffs include version-linked Figma snapshots in Jira.
"The component library and design tokens made life way easier, and your quick feedback + design tweaks kept everything running super smoothly. Amazing teamwork and a fantastic first milestone! Thank you! "
— Development team kudos, mPOS Milestone 1
Learnings
-
New products are the right entry point for system work
Introducing tokens and components on mPOS (greenfield) worked cleanly because there was no legacy to navigate. Retrofitting existing products like POS and Mobile Ordering is a different challenge - still ahead. Don't fight the legacy. Build the standard on new work first, then migrate.
-
Research gives more than you ask for
The research validated tokens as a felt need - not an assumption. This made everything easier to build and easier to adopt.
-
Product work and system work can be the same work
Following Dan Mall's contribution model, components and tokens were built during real design tasks - not in separate system sprints. This is more sustainable, produces a system that's actually used, and avoids the "nobody asked for this" problem.
-
Align at the boundary, not just inside Figma
The highest-impact changes happened at the design–dev interface: component naming, implementability of variants, shared Jira backlog, version-linked handoff. Making Figma prettier on its own doesn't move the needle. What moves the needle is reducing friction at the handoff.
-
Read the code
Getting read-only access to the source code was unexpectedly powerful. Actual color values, naming conventions, and component structure all became legible. Designers who can read code have a different kind of conversation with developers - one built on shared ground rather than approximation.
-
Team buy-in is the real prerequisite
Colleagues already wanted tokens and better processes - I didn't need to evangelize or convince anyone. That freed energy for building. In future roles this won't always be true. Understanding the buy-in landscape before proposing systemic changes is worth more than the best-designed system nobody asked for.