Writing

Figma first: mapping the loop before I write code

1 Nov 2026, 4 min read

Before I build anything, I map it out in Figma. Not polished mockups, just two things side by side:

Then I go arrow by arrow and ask one question: “What breaks?”

It takes a short while, and it catches problems that would take hours to debug later.

A real example: “Mark Complete” from a notification

In Launch Control, my daily planner, reminders have a Mark Complete button right on the notification. Here’s the loop:

  1. Input: the user taps Mark Complete on the notification.
  2. Processing: the notification delegate finds the event and marks it done.
  3. Output: the event is saved.
  4. Feedback: the app shows the event as completed and the streak updates.

mark complete

lock screen

time

notification card event title, app name
mark complete btn

protocol screen

header text

streak count

event row
event row
event row

data loop

input tap mark complete
  • app not running?
processing delegate finds the event
  • which store?
output event saved
  • stale copy?
feedback shows done, streak updates
Wireframes on top, data loop underneath, a "what breaks?" note on every arrow. Drawn for this post in the style of my Figma boards.

Now, what breaks at each arrow?

Those questions led to an architecture decision before I wrote any feature code. The app, the Siri App Intents, and the notification delegate all open one shared SwiftData store in an App Group. A change from any entry point shows up everywhere.

SwiftUI views ───────────┐
App Intents (Siri) ──────┼──► one SwiftData store (App Group)
Notification action ─────┘

If I had started in Xcode, I would have built the feature for the app first and found the notification problem much later.

How I run the check

Why it’s worth it

Code is expensive to change once it exists. A box in Figma isn’t. Asking “what breaks?” while things are still boxes is the cheapest debugging I’ll ever do.