From weeks to days: building a design-in-code workflow at Fig — Qinglan Zheng
qinglan.zheng
← all work About
weeks → days FLAGSHIP · FIG · 2026

From weeks to days: building a design-in-code workflow at Fig

How I pitched a two-week pilot, connected Figma to our production codebase in Cursor, and turned small UI fixes from a weeks-long queue into same-day draft PRs.

ROLE
Directly Responsible Individual (DRI)
TEAM
1 designer, 1 engineer
TOOLS
Cursor, Figma MCP, Storybook, front-end change skill
01 · The problem

Small UI fixes took weeks

Copy tweaks, spacing fixes, a reordered form field — the kind of change that should take an afternoon was queued behind sprint planning, engineering handoff, and a staging cycle. By the time I counted, more than 10 small improvements were sitting blocked, none of them contentious, all of them stuck in the same handoff chain.

The cost wasn't any single fix. It was the compounding drag: designers describing changes instead of making them, engineers re-deriving intent from a Figma frame, and a queue that only grew.

One example made the cost concrete: on the address step, the Continue button sat greyed out with no explanation whenever validation failed silently. That single screen cost roughly 4,500 applications over 90 days — and it had been sitting in the queue the whole time.

02 · The bet

A two-week pilot, Shape Up style

I pitched leadership a small, time-boxed bet: one designer, one engineer, one surface, two weeks. Not a platform initiative — a test of whether AI tooling could let a designer ship real UI changes without breaking engineering review.

“I wasn't sure Phase 3 would ever become real. It did.”

03 · Three phases

From a first PR to a production playground

01

First PR from Cursor

The engineer and I shipped the first real change together, from a Cursor session directly into a draft PR — proving an AI-assisted diff could survive review unchanged.

Cursor agent session in agent mode: prompt asking to change review-page copy from 'periodic credit checks' to 'periodic soft credit checks', the agent's plan using the design-change skill, and the resulting origination.ts diff
First shipped fix — a Cursor agent session updating review-page credit-check copy
Slack message from Qinglan announcing the first PR shipped via the Design in Code pilot bet, with teammates congratulating her and reacting with celebration emoji
The team's reaction — first PR shipped under the pilot
02

Figma MCP connected to the codebase

We wired Figma's MCP server into the repo so component structure, tokens, and layout could be read directly from the design file instead of re-described by hand — backed by a real component library in Storybook.

Storybook component library for Fig's LOS and SSP apps, showing organized folders for Components and Pages (Generic, Offer, PersonalLoan, Prequal) with a live PersonalLoan page preview including Flinks bank connection copy
The component library in Storybook — the shared source of truth
03

The Design Playground

Production screens running with local state and mock data — a sandbox where I could test real UI against real components without touching a shared environment.

The Design Playground: a production loan-amount step running with mock data, next to a Design Playground panel listing every Prequal, Origination, Portal, and Chat screen plus a prompt box to describe a visual change for an agent to apply
The Design Playground — every screen, one prompt box away from a change
04 · The workflow today

Figma or a prompt, to a merged PR

BEFORE · HANDOFF CHAIN
{{ $index }} {{ s }}
AFTER · OWNED CHAIN
{{ $index }} {{ s }}
GitHub profile activity for qinglanzheng-prog showing a contribution graph, commits created in fig-financial/figgy, and a pull request titled 'feat(prequal): update legal name copy and focus-triggered hints'
GitHub activity — commits and PRs shipped through the workflow
05 · Results

Weeks became days — with review intact

Thirteen changes shipped since launch, across six stages of the funnel — pre-qual, KYC, offer, bank connection, review, and servicing. All live in production.

13 changes
Shipped since launch
6 stages
Of the funnel touched
weeks → days
Turnaround for small UI fixes
30 min
Fastest fix, spotted to shipped
0
Handoffs, staging pushes, and QA cycles for small changes
100%
Changes still pass engineering review

The pilot didn't remove engineering — it removed the parts of the process that existed only to translate intent from one person to another. Review stayed. The queue didn't.

06 · What we learned

Three things worth passing on

AI over-engineers

Asked for a small fix on the date picker, it produced hundreds of lines. Engineer review isn't a formality — it's where clever-but-wrong gets caught.

Shipping isn't the end of the story

The address fix took three releases in one week — each one revealed the next problem underneath. We only found them because we kept watching.

Know the boundary

We tried to pre-fill a partner-provided phone number. Thirty minutes in, it was clear that data doesn't exist on our side yet — that's backend work. Finding the edge fast is a good outcome.