{"id":"l-fig-4-3","courseId":"figma-ui-design","lang":"en","kind":"lesson","summary":"Prepare Steady’s screens for developers, mark them ready for dev, annotate behaviour and accessibility, and use Dev Mode’s inspect, variables and change comparison to keep handoff a conversation.","html":"<p>A developer opens Steady’s file for the first time. Without help, they face sixty frames, three explorations of the Today screen and a page called <code dir=\"ltr\">Scratch</code>, and they have to guess which version is real, what happens when a name is too long and whether that teal is a token or a one-off. Every guess becomes a bug, a Slack thread, or both.</p>\n<p>Handoff is the work of removing those guesses. Most of it you have already done: named layers, auto layout, components with properties, variables. This lesson adds the last layer.</p>\n<h2 id=\"sec-1\" tabindex=\"-1\">Organise for the reader</h2>\n<p>Before anything else, make the file easy to navigate for someone who was not there:</p>\n<ul>\n<li>Move explorations off the <code dir=\"ltr\">Screens</code> page. Developers should only see what will be built.</li>\n<li>Group screens into <strong>sections</strong> by flow: “Check-in”, “Add habit”, “Habit detail”. Arrange each flow left to right in the order people move through it.</li>\n<li>Include the states, not just the happy path: empty Today (“No habits yet”), a habit with a 1,000-day streak, the text field’s error state, the loading state of Habit detail.</li>\n<li>Give each section a one-line description at the top: what the flow is for and any open questions.</li>\n</ul>\n<h2 id=\"sec-2\" tabindex=\"-1\">Ready for dev</h2>\n<p>When a flow is stable, select its section and mark it <strong>Ready for dev</strong>. At the time of writing, you can do this on sections, frames and components, and it is available on paid plans.</p>\n<p>Statuses are a signal, not a lock. If you edit a design after marking it ready, Figma marks it <strong>Changed</strong> automatically, so developers know to look again, and they can compare the current version with the one that was marked ready. When you have finished changing it, you mark it done with changes and can add a short note. On Organization and Enterprise plans there is also a <strong>Completed</strong> status for designs that have been built.</p>\n<figure class=\"diagram\"><svg class=\"diagram-svg\" focusable=\"false\" viewBox=\"0 0 680 210\" role=\"img\" aria-labelledby=\"l-fig-4-3-t1\"><defs><marker id=\"arrow-l-fig-4-3-1\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" class=\"d-arrowhead\"/></marker></defs>\n  <title id=\"l-fig-4-3-t1\">A design moves from In design to Ready for dev, which is set by the designer. Editing it afterwards sets Changed automatically; the designer marks it done with changes and it returns to Ready for dev. When it is built, it can be marked Completed on higher plans.</title>\n  <rect class=\"d-box\" x=\"10\" y=\"70\" width=\"120\" height=\"56\" rx=\"12\"/>\n  <text class=\"d-label\" x=\"70\" y=\"103\" text-anchor=\"middle\">In design</text>\n  <rect class=\"d-box-primary\" x=\"190\" y=\"70\" width=\"140\" height=\"56\" rx=\"12\"/>\n  <text class=\"d-label-strong\" x=\"260\" y=\"103\" text-anchor=\"middle\">Ready for dev</text>\n  <rect class=\"d-box-warn\" x=\"390\" y=\"10\" width=\"130\" height=\"50\" rx=\"12\"/>\n  <text class=\"d-label\" x=\"455\" y=\"40\" text-anchor=\"middle\">Changed</text>\n  <rect class=\"d-box-success\" x=\"390\" y=\"136\" width=\"130\" height=\"56\" rx=\"12\"/>\n  <text class=\"d-label\" x=\"455\" y=\"169\" text-anchor=\"middle\">Completed</text>\n  <path class=\"d-arrow\" d=\"M132 98 L188 98\" marker-end=\"url(#arrow-l-fig-4-3-1)\"/>\n  <path class=\"d-arrow\" d=\"M330 84 L388 44\" marker-end=\"url(#arrow-l-fig-4-3-1)\"/>\n  <path class=\"d-arrow d-dashed\" d=\"M400 62 L332 92\" marker-end=\"url(#arrow-l-fig-4-3-1)\"/>\n  <path class=\"d-arrow\" d=\"M330 112 L388 156\" marker-end=\"url(#arrow-l-fig-4-3-1)\"/>\n  <text class=\"d-label-muted\" x=\"560\" y=\"32\">set automatically</text>\n  <text class=\"d-label-muted\" x=\"560\" y=\"52\">on edit</text>\n  <text class=\"d-label-muted\" x=\"380\" y=\"96\" text-anchor=\"end\">done with changes</text>\n  <text class=\"d-label-muted\" x=\"540\" y=\"172\">Org and Enterprise</text>\n</svg><figcaption>Dev Mode statuses as a design moves from design to build</figcaption></figure>\n<aside class=\"callout callout-mistake\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg><span><span class=\"callout-kind\">Common mistake</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>Marking ready too early</span></p>\n<p>Marking a flow ready while you are still exploring means developers start building something that will change, and the Changed badge turns into noise they learn to ignore. Mark ready when you would be comfortable if it shipped exactly like this tomorrow.</p>\n</aside>\n<h2 id=\"sec-3\" tabindex=\"-1\">What developers see in Dev Mode</h2>\n<p>Developers switch to <strong>Dev Mode</strong> with the toggle in the toolbar or <code dir=\"ltr\">Shift+D</code>. It needs a paid plan and a Full or Dev seat at the time of writing. Selecting a layer shows its <strong>inspect</strong> panel:</p>\n<ul>\n<li><strong>Measurements and layout</strong>: sizes, padding and gaps, with auto layout described in terms close to CSS flexbox.</li>\n<li><strong>Variables by name</strong>: the check button’s fill appears as <code dir=\"ltr\">color/action/primary</code> with its value, padding as <code dir=\"ltr\">space/4</code>. If you set code syntax on your variables (Lesson 3.3), developers see the exact token name their code uses.</li>\n<li><strong>Components and properties</strong>: the instance’s component, its variant and property values, and the component description you wrote in Lesson 3.5.</li>\n<li><strong>Code snippets</strong>: generated CSS, iOS and Android code, a starting point rather than production code. On Organization and Enterprise plans, teams can connect real component code with Code Connect so the snippet shows their own component instead.</li>\n<li><strong>Assets</strong>: icons and images marked for export, downloadable in the right format.</li>\n</ul>\n<p>This is where all the earlier discipline pays off. A component with named layers and bound variables reads like a spec; a detached frame with raw hex codes reads like a puzzle.</p>\n<h2 id=\"sec-4\" tabindex=\"-1\">Annotate what pixels cannot say</h2>\n<p>Some things are invisible in a static frame. Annotations put them right on the design. Press <code dir=\"ltr\">Shift+T</code> (or use the annotation tool), select a layer and write a note, or pin a property so it stays visible. At the time of writing, annotations have categories such as Development, Interaction, Accessibility and Content, and developers can filter by them. Measurements (<code dir=\"ltr\">Shift+M</code>) pin spacing on the canvas.</p>\n<p>For Steady, annotate:</p>\n<ul>\n<li><strong>Content rules</strong>: habit names wrap to two lines, then truncate with an ellipsis; streaks above 999 show “999+”.</li>\n<li><strong>Behaviour</strong>: tapping a check button marks the habit done for today; it can be undone until midnight.</li>\n<li><strong>Accessibility</strong>: accessible names for icon buttons, the focus order of the New habit sheet, the 44 × 44 hit area, the reduced-motion alternative.</li>\n<li><strong>Data edge cases</strong>: what an empty list and a failed load look like, pointing at the frames that show them.</li>\n</ul>\n<aside class=\"callout callout-tip\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg><span><span class=\"callout-kind\">Tip</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>Walk them through it</span></p>\n<p>Book thirty minutes with the developers when a flow goes ready. Click through the prototype, point at the annotations, and ask what is unclear. Then, when the first build is ready, review it side by side with the design. Handoff is a conversation that starts here, not a file you throw over a wall.</p>\n</aside>\n<p>You have designed, systematised, prototyped, checked and handed off Steady. The final lesson is about the two skills that turn this work into a career: running a critique and telling the story in a case study.</p>\n","toc":[{"id":"sec-1","text":"Organise for the reader","level":2},{"id":"sec-2","text":"Ready for dev","level":2},{"id":"sec-3","text":"What developers see in Dev Mode","level":2},{"id":"sec-4","text":"Annotate what pixels cannot say","level":2}],"takeaways":["Handoff starts with an organised file; sections per flow, named layers and components bound to variables do most of the work.","Ready for dev tells developers which designs are stable, and Figma flags a design as changed when someone edits it afterwards.","Dev Mode shows measurements, variables by name and code snippets, so developers read tokens instead of guessing from pixels.","Annotations carry what pixels cannot, such as behaviour, edge cases, accessible names and focus order.","Handoff is a conversation, so walk developers through the flow and review the built screens against the design."],"further":[{"title":"Guide to Dev Mode","url":"https://help.figma.com/hc/en-us/articles/15023124644247-Guide-to-Dev-Mode"},{"title":"Dev Mode statuses and notifications","url":"https://help.figma.com/hc/en-us/articles/26781702258583-Dev-Mode-statuses-and-notifications"},{"title":"Add measurements and annotate designs","url":"https://help.figma.com/hc/en-us/articles/20774752502935-Add-measurements-and-annotate-designs-in-Dev-Mode"}],"quiz":[{"q":"<p>After marking the check-in flow Ready for dev, you change the habit row’s padding. What does a developer see?</p>","options":[{"text":"Nothing, because Ready for dev freezes the design.","why":"Ready for dev is a signal, not a lock. Designers can still edit, and Figma records that they did."},{"text":"The design shows as changed, and they can compare it with the version that was marked ready.","why":"Correct. The Changed status is applied automatically, and comparing versions shows exactly what moved."},{"text":"Figma automatically reverts the edit.","why":"Figma never reverts your edits. It surfaces them so developers are not surprised."},{"text":"The developer must unmark and remark the section to see edits.","why":"Developers see the latest design and the changed status without any extra steps."}],"answer":1},{"q":"<p>Which note belongs in an annotation rather than in the visual design?</p>","options":[{"text":"The habit row’s corner radius is 12.","why":"Dev Mode already shows the radius, and its variable, from the design. Annotating it adds noise."},{"text":"The title font is the Large title style.","why":"The text style name is visible in Dev Mode. No annotation needed."},{"text":"The screen background is white.","why":"The fill and its variable are visible in Dev Mode. Annotations are for what cannot be seen."},{"text":"Habit names wrap to two lines, then truncate with an ellipsis; the add button’s accessible name is “Add habit”.","why":"Correct. Wrapping rules and accessible names are behaviour you cannot read from a static frame."}],"answer":3},{"q":"<p>In Dev Mode a developer sees the check button’s fill as <code dir=\"ltr\">color/action/primary</code> rather than only</p>","options":[{"text":"The developer can use the matching token in code, so dark mode and future palette changes work automatically.","why":"Correct. Variables in Dev Mode connect the design to the token system the code already uses."},{"text":"Hex codes are not allowed in production code.","why":"Hex codes work in code. The problem is that a copied hex never updates with the theme."},{"text":"It makes the file load faster in Dev Mode.","why":"Performance is not the reason. The value is the shared name."}],"answer":0}],"exercise":{"kind":"order","items":["clean","sections","states","annotate","ready","walkthrough","review"],"title":"Hand off the check-in flow","prompt":"<p>The check-in flow is designed and tested. Put Sofia’s handoff steps in order, from preparing the file to checking what was built.</p>\n","hints":["Developers should never see a flow marked ready that still contains explorations or missing states.","Annotations describe the final frames, so they come after the states exist, and before the ready signal.","Clean, group, add states, annotate, mark ready, walk through, review the build."],"explanation":"<p>First <strong>clean up</strong> so only real designs remain, then <strong>group the screens into a section</strong> in flow order. Add the <strong>missing states</strong> (empty, error, long content) because annotations and developers both need them. <strong>Annotate</strong> behaviour and accessibility on those final frames. Only then <strong>mark the section Ready for dev</strong>, so the signal means “stable”. <strong>Walk the developers through</strong> the flow, and finally <strong>review the build</strong> against the design. Marking ready earlier would trigger Changed badges for every later edit and teach developers to ignore them.</p>\n","checkLabels":{},"itemText":{"clean":"Move explorations and old versions off the Screens page.","sections":"Group the remaining check-in screens into a section, arranged left to right in flow order.","states":"Add the missing states to that section: empty list, long habit name, error and loading.","annotate":"Annotate content rules, behaviour, accessible names and focus order.","ready":"Mark the section Ready for dev.","walkthrough":"Walk the developers through the prototype and annotations, and answer questions.","review":"Review the first build side by side with the design and file fixes."}},"words":810,"readMinutes":4}