flows, not screens
The arrows are the design work
A screen is easy to draw and cheap to argue about. What decides whether an app is any good is the route between screens, and what happens on the branch nobody wanted to think about.
Disciplines 02 · Mobile apps
Mobile design makes every decision visible. Limited space forces hierarchy, navigation and interaction to earn their place. I explore iOS and Android as one job — interface concepts and working prototypes that treat design and build as a single discipline.
01 · What this is
An app people open on a phone: the interface, the flows between screens, the states nobody remembers to draw, and the small mechanical decisions that make it feel like it belongs on the device rather than on a website that has been squeezed. Design and build are one job here, not two — which mostly matters at the seams, because the seams are where a handover loses things.
Most of the cost of an app is not in drawing it. It is in the decisions taken before anything is drawn, and in the states that only appear when something goes wrong.
flows, not screens
A screen is easy to draw and cheap to argue about. What decides whether an app is any good is the route between screens, and what happens on the branch nobody wanted to think about.
one thumb
A phone is held, usually in one hand, often badly. The primary action goes inside the arc a thumb can cover; the destructive one deliberately does not.
dynamic type
Somebody set that in their system settings for a reason. Layouts are built to grow with it rather than clip it, which is the single most common accessibility failure on a phone.
local first
Work done on a train is still work. What was saved locally is shown as saved, what has not reached the server is shown as pending, and neither pretends to be the other.
two platforms
Back is a gesture on one and a bar on the other; the primary action sits in a different place. Matching the platform is not a compromise on the design, it is part of it.
the release
Build, submit, wait. Preparing the listing and walking a submission through is its own small discipline, and a review process will not allow everything — that gets flagged early rather than argued with.
02 · The states
Almost every app is designed in the state where everything worked: content arrived, the network was there, the account existed. The other four are where people actually decide whether to keep it. All five are drawn before anything is built.
The first screen almost everyone sees, and the one almost nobody designs. It has to say what this is for and give exactly one thing to do next.
Shaped like the thing that is coming, so the layout does not jump when it lands. A spinner in the middle of a blank screen tells the reader nothing except to wait.
The one in the pitch deck. It is the easiest of the five and it is the reason the other four get skipped.
What failed, in words, and what to do about it. Never a code, never a shrug, and always a way back that is not force-quitting.
One true sentence for every screen. What is cached is still readable and marked as cached; what needs a connection says so. A spinner that never resolves is why apps get deleted.
03 · The method
Every app worth taking on starts as this sequence, written out and argued with while arguing is still free. It takes an afternoon, and it is the cheapest afternoon in the project.
04 · What I test for
Same size, same weight, both columns. Knowing where a build's edges are is as much a design decision as anything inside them.
05 · The questions
Because two apps described in the same sentence can be an order of magnitude apart in actual complexity, and a screen count alone hides most of it.
The things that drive it are not mysterious. How many screens there really are once the empty and error states are counted. Whether anything is stored, and where. Whether it has to talk to a system that already exists. Whether there is a login, and therefore an account to recover. Whether it goes to one store or both. And how long a review queue takes when it gets there, which is nobody's to control. Those six questions are where the thinking actually starts.
Some of what an app needs, and not all of it — worth being exact about which is which rather than blurring the two.
What they do prove: interface work, flow design, keyboard and screen-reader discipline, drawing every state rather than the happy one, and the habit of writing down why a decision was taken. What they do not prove: store submission, device fragmentation, and a release that ends in somebody else's review queue. The honest test is to open any one of the ten builds and read its interaction code — why focus goes where it goes, what happens on a slow connection, what the reduced-motion path does and why. That is the same work, in a browser instead of a store, and it is running right now.
06 · The work
None of these is an app. They are the interaction work an app is made of, they are self-initiated, and each one is live with a write-up saying what fought back.
Keyboard-complete interface · 2026. A command palette that behaves like one: focus held while it is open, arrow keys, scroll locked, focus handed back on close.
Touch and pointer · 2024. Pointer capture done properly — a drag that does not break when the finger leaves the element, which is the bug every hand-rolled slider ships with.
Drawn interface, no assets · 2022. Progress rings and counters drawn in SVG rather than shipped as images, on one shared observer instead of one per element.
See the ten builds — all self-initiated, all live, all with the source open.
mobile apps
There is no app here yet, but every principle on this page — states, flows, keyboard and screen-reader discipline — is already running in the ten. The projects show the same discipline applied.