The article

Designs often break between file and build in the same places: missing states, unclear spacing, unexplained motion, fake data that hides edge cases, and “just make it responsive”. I use a checklist to surface those gaps before implementation.

Start with shared tokens. Spacing, type, colour, and radius should have names both design and code can use. If a value appears twice in the interface and once in the code under a different name, the system is already drifting.

Design every state a component can be in — loading, empty, error, offline, overflowing — or developers will invent them for you.

Next, annotate behaviour rather than appearance. Developers can see the padding; they cannot see that a card dismisses on swipe after a delay, or that a chart animates on data change but not on filter change. I keep those notes beside the design while they are still current.

Then design with awkward data: long labels, empty search results, names that overflow, and users with unusual settings. Real content is a stress test the happy path rarely survives.

Finally, stay close to the build. Reviewing a real page reveals responsive and interaction details that a static frame cannot. Handoff is a shared phase of the work through release.