All posts
Product design

Annotating Designs for Developers: States, Edge Cases and Interactions

Design annotations that developers actually read: a simple Figma annotation kit, what to spec for states and interactions, and the edge cases devs always ask about.

By Mehdi Hassan6 min read

The short answer

Design annotations are notes placed on a design that explain what the visuals can't: states, interactions, edge cases, content rules and accessibility. Designers should annotate behavior rather than appearance, keep notes next to the element they describe, use a small consistent kit of note types, and cover the edge cases developers always ask about before handoff.

Key takeaways

  • Annotate behavior, not appearance. Developers can inspect spacing. They can't inspect intent.
  • Four note types cover most needs: state, interaction, content rule and accessibility.
  • Put each note next to its element and number it, so feedback can reference it.
  • Design the common edge cases as frames. Annotate only the rules that frames can't show.
  • If a note runs longer than three lines, the design probably needs another frame.

Part of Design-to-Development Handoff: How to Ship Designs Without Losing Detail

What are design annotations and why do developers need them?

Design annotations are short notes on a design file that explain behavior a static frame can't show. A frame shows what a button looks like. An annotation says what happens when it's clicked twice, what it says while saving, and where focus goes afterwards. Developers need them because every unanswered question becomes a guess in code.

Annotations are one layer of a complete design-to-development handoff. They work best when the file is already organized, components are built properly and the obvious states are drawn. Their job is to cover the rules that are left, not to replace missing design work.

What should design annotations cover?

Design annotations should cover four things: states, interactions, content rules and accessibility. Leave visual specs such as spacing, color and type to the inspect panel or Dev Mode, which read them straight from the file and are always current.

Note type

What it explains

Example

State

How the element changes with data or status

Shows a skeleton for the first load, cached data on refresh

Interaction

What happens on click, hover, drag, keyboard or timeout

Escape closes the drawer and returns focus to the trigger

Content rule

Limits, truncation, formatting and fallbacks

Names truncate after one line with full name on hover

Accessibility

Labels, reading order, focus and announcements

Error message is announced and linked to the field

Open question

A decision not yet made, with an owner

Do archived projects appear in search? Owner: PM

The fifth type, open questions, matters more than it looks. Marking unknowns explicitly stops developers from treating a gap as an approved decision, and it gives the product owner a list to clear before the build starts.

How do you build a design annotation kit in Figma?

Build an annotation kit as a small set of Figma components that look nothing like your interface, so nobody mistakes them for UI. Keep it in your library and use it in every file. A kit takes an hour to make and saves that time on the first feature.

  1. Create a numbered marker

    A small circle with a number that sits on the element being described. Use one color that doesn't appear in your product.

  2. Create a note card with a type property

    One component with a variant for each note type: state, interaction, content, accessibility and open question. Each variant gets its own label and color.

  3. Add a connector or place notes beside the frame

    Keep notes outside the screen frame so they never get exported or inspected as UI, and match marker numbers to card numbers.

  4. Add a flow arrow

    A simple arrow component for showing what leads where between frames, labelled with the trigger.

  5. Document the kit on the read-me page

    Show one example of each note type, so new people copy the pattern instead of inventing their own.

Figma also has native annotation features in Dev Mode that attach notes and measurements to layers. If your team works in Figma Dev Mode, use them for property-level notes, and keep the component kit for flows and multi-step behavior. Either way, keep annotations next to the ready-for-dev screens described in our guide to Figma file organization.

Which edge cases do developers always ask about?

Developers ask about the same edge cases on almost every feature, so answer them before handoff. Draw the important ones as frames, and annotate the rules for the rest.

  • Empty: no data yet, no results for a search, everything filtered out. Each needs its own message.
  • Loading: first load, refresh, pagination and slow responses. Which parts show skeletons and which keep old data?
  • Errors: validation, network failure, server error and permission denied, with the exact copy for each.
  • Long and short content: the longest real name, a one-word title, a missing avatar, numbers in the millions.
  • Many items: what happens at 3 items, 30 and 3,000? Pagination, virtual scrolling or a limit?
  • Permissions: what a viewer sees compared with an admin. Hidden, disabled or explained?
  • Destructive actions: confirmation, undo, and what happens to related data.
  • Interrupted flows: closing a modal mid-way, going back, refreshing the page, a session expiring.
  • Keyboard and focus: tab order, focus after an action, and how to close overlays without a mouse.

How should you write interaction and state specs?

Write interaction specs as trigger, response and end state, in one or two plain sentences. "On submit, the button shows Saving and is disabled. On success, the drawer closes and a toast says Changes saved. On error, the drawer stays open and the message appears above the form." That format is quick to write and easy to test.

Hypothetical example: annotating a file upload field

For example, suppose a form has a file upload field. The designer draws four frames: empty, dragging over, uploading with progress and uploaded with a remove option. Then come the annotations. Note 1 (content rule): accepts PDF and PNG up to the size limit set by engineering, and the file name truncates in the middle so the extension stays visible. Note 2 (interaction): dropping an unsupported file shows the error frame without clearing previous uploads. Note 3 (accessibility): the drop zone is also a button that opens the file picker, and upload progress is announced. Note 4 (open question): can users upload more than one file? Owner: PM.

Four frames and four notes answer every question a developer would otherwise raise in a thread.

For motion, give the trigger, what moves, the duration and the easing, and link a prototype if timing matters. For responsive behavior, write the rule rather than drawing every width, and let auto layout settings that map to CSS carry the rest.

How do annotations fit with the rest of your handoff?

Annotations sit between a well-built file and a design QA pass on the finished build. The file provides components and layout, the annotations explain behavior, and the review checks that both made it into code. Skip any one and the other two carry more weight than they can.

Before handoff, run the Figma handoff checklist. After the build, review it with a design QA pass. And if annotation keeps turning into long threads, it's worth reading why design handoffs fail and what changes when one team owns both sides. That's how we run our own projects, starting with a fixed $3,000 brand and design sprint when a product needs direction first.

Frequently asked questions

Should annotations live in Figma or in a ticket?
Keep annotations in Figma, next to the element they describe, and link the frame from the ticket. Notes in tickets drift away from the design as it changes, and developers working from the file never see them. The ticket should hold scope, acceptance criteria and links. The file should hold the behavior. Keeping each in its natural place avoids two versions of the truth.
How many annotations is too many?
If a screen needs more than a handful of notes, something else is wrong. Usually the states aren't drawn, the components aren't reused, or the feature is doing too much. Many notes also signal that nobody will read them all. Aim for annotations that cover only what frames can't show, and draw states that change the layout instead of describing them.
Do developers read design annotations?
They read annotations that are short, close to the element and clearly about behavior. They skip long paragraphs, notes far from the frame and anything that repeats what inspect already shows. The most reliable way to get annotations read is to number them, keep them to one or two sentences and walk through them in a short handoff call for any complex feature.
What is a redline in design?
A redline is a marked-up version of a design showing measurements such as spacing, sizes and colors, traditionally drawn in red. Redlines were essential when developers worked from flat images. Tools like Figma's inspect panel and Dev Mode now read those values directly from the file, so manual redlines are rarely needed. Effort is better spent on annotating behavior and edge cases.

· CEO & Design Director

Copywriter, designer and developer, and founder of Designify Studio. Over five years, 60+ projects across 14+ industries, for startups that have raised $300M+.

Want this done for you? Brand & design sprint, $3,000.

A brand refresh or redesign, plus design explorations for your website and product. $3,000, one-time, fixed price. Book a free 30-minute call to see if it fits.

Schedule Call