How Design Decisions Drive App Development Cost | Handoff Guide
Your App Development Cost Is Mostly Decided in Figma
Ask two development teams to quote the same set of screens and the numbers can come back half apart. Same features. Same platforms.
Most of that gap is in the design files.
An estimate measures how many questions your files already answer. Design to development handoff is where the number gets set, weeks before anyone opens an editor. We build software for a living, mostly web platforms and data systems with some mobile work alongside, and the pattern holds across all of it: every question a design leaves open becomes a developer’s assumption, assumptions get caught in review, and the rebuild is what pushes a budget sideways.
To be clear, this is not an argument for plainer products. Ambition is fine. Unresolved ambition is what gets billed twice.
Screens Are the Wrong Unit. Count States.

A checkout screen is one artboard. It is also eight states: empty, loading, half-filled, validation error, network failure, success, expired session, offline.
If the file shows one, the team quotes one. The rest surface around sprint two, and each needs a decision that travels through a designer, then a stakeholder, then a calendar. The calendar is the expensive part. Building an error state that already exists in Figma takes an hour. Getting agreement on one that does not exist can take three days of Slack.
Loading states get skipped most often, which is strange, because users notice waiting long before they notice your spacing scale. When the file has no skeleton screen, somebody ships a spinner nobody approved.
I do not have a clean number for what full state coverage saves. What I can say is that when a file covers its states, the padding we put into an estimate for unknowns gets noticeably thinner, and that padding is real money on your invoice.
Custom Components Have a Price Tag Nobody Prints

A date-range picker with dual calendars, preset shortcuts and inline validation is maybe twenty minutes of design work. In engineering it is days. Keyboard navigation. Screen reader behaviour. The mobile variant. The timezone bug you find in QA on a Friday.
Pull the same control from a mature component library and it is close to free.
I am not against custom UI. Spend the custom budget on the part of the product people actually showed up for, and let the library carry the pickers and the toasts. Designers who check the target library before drawing a control routinely take a week out of a build, and nobody using the app can tell the difference.
Which makes one question worth asking before design starts: what are we building on? Shadcn, MUI and the platform-native kits each hand you a different set of free components. Draw against the wrong assumption and you create work that stays invisible in the mockup and very visible in the sprint.
The Logic That Lives Nowhere
Static screens hide behaviour. What sorts the list by default? What happens at 3 items, and at 3,000? Who sees the delete button? What does the app do when someone backgrounds it mid-payment?
None of that lives in a frame. All of it gets implemented anyway, by a developer at 11pm, using their best guess.
Write the rules down next to the design. A comment thread, a text layer beside the artboard, a linked doc. The format matters much less than whether it exists at all.
One client of ours arrived with page structures mapped, workflows written out and a database schema ready. We had estimated $5,000 and three weeks. It closed at $3,000 inside a single week. There was almost nothing to guess at, so there was almost nothing to bill beyond the actual work.
Motion Is a Line Item

“Feels smooth” tells an engineer nothing. Spring physics with custom damping is a different job from a 200ms ease-out, and a shared-element transition across a navigation stack is a different job again, once on iOS, once on Android, and once more in whatever cross-platform layer sits between them.
Give duration, curve and trigger for anything past a fade. A short Lottie or even a screen recording says more than a paragraph of description ever will.
It also helps to be honest with yourself about which animations carry meaning and which ones exist because they looked good in the portfolio shot. The second group is the first thing we suggest cutting when a client wants the number down, and that conversation is usually awkward.
Design That Ignores the Data
Every mockup gets populated with names that fit, avatars that load, lists that are pleasantly short. Production is not like that.
Test your design against a user called Konstantinos Papadopoulos-Wainwright. Against a product title in German. Against an account with zero transactions, then one with eleven thousand.
Then against the API that does not actually return the field your card is displaying. That one is worth catching early. A design showing data the backend cannot produce turns into a scope conversation after the quote is signed, which is the worst possible moment to have it. Get the endpoint list before the visual design locks, if the timeline lets you.
Handoff Format Is Not Housekeeping

Untokenized colours mean a developer picks the nearest variable and gets it wrong twice. Layers named Rectangle 47 mean assets get exported by hand. No auto-layout means every responsive rule is a guess.
On its own, none of that is dramatic. It compounds. On a 40-screen product it adds up to roughly a week of work that produces nothing a user will ever see.
Tokens, a naming convention and published components put that week back into features. Figma variables map onto a theme file cleanly, and when they do, a developer implements your design system instead of reverse-engineering it. Design handoff is a deliverable with its own quality bar, not the moment you stop working.
What This Looks Like in Money
Rates make the arithmetic easier to see. Our design work runs about $15–20 an hour, up to $25 at senior level. Frontend and backend sit at $25–35. Full-stack is $30–40. Every hour a decided file removes from engineering is either billed at a lower rate or not billed at all, and that is most of what sits behind app development cost landing under estimate instead of over it.
Two more numbers from our own delivery. A fintech MVP planned at $15,000 shipped at $9,000 in two months with one designer and two developers, mostly because scope was pinned early and we reused internal modules. A real-estate platform started at $3,000 and finished at $12,000 across three and a half months, with scope expanding as the product came into focus during the build.
Neither of those was a mobile app. One is web, one is a platform, and the mechanism does not care about the form factor. Ambiguity at the start is what drives the number.
When a client asks our engineering team to bring a quote down, the answer is almost never a cheaper stack.
The Checklist Worth Running Before You Hand Off
Print it, ignore the parts that do not apply, argue with the rest:
- Someone from engineering has seen the file before anyone called it final
- Every screen that fetches data has its empty, loading and error states drawn
- Form fields show their validation rules and their error copy
- Custom controls have been checked against the target component library
- Interaction logic sits in writing somewhere a developer will actually find it
- Motion beyond a fade has duration, curve and trigger specified
- Text has been stress-tested with long strings and a second language
- Colours, spacing and type run on tokens or variables rather than hex codes
- Layers and components are named for humans
The first item matters more than the other eight. A thirty-minute review before handoff catches the assumptions nobody knew they were making, and it is the cheapest half hour in the project.
The Short Version
The quote you get measures your file’s clarity more than your product’s ambition. I have watched genuinely complex products land close to estimate because the decisions were already made, and simple ones drift because half the behaviour was still open. The drift arrives as change requests rather than as a longer feature list, which is why it rarely feels like anyone’s fault.
Run design to development handoff as a decision checkpoint instead of a file transfer. Most of the savings are already sitting there before anyone writes code.







