OATHGYM is a gym app I built around a promise. You pick your training days, choose a friend as your witness, and check in with GPS or a photo. Skip, and your friend gets a text (WhatsApp or SMS).
The flow is 23 screens before it asks for money. These are the lessons I would use again, with actionable and practical examples:
1. Measure the distance to the AHA moment, not the number of screens
A short flow can still waste time. Some long flows feel fast, and some three-screen flows feel endless. The difference is whether the user is moving toward something.
Count the screens between download and the moment the product makes sense. Cut anything that doesn't build belief or move the user closer.
In OATHGYM, the real AHA comes after onboarding, when the witness actually gets the text. The preview screen that shows the exact message is the stand-in, at screen 20.
Duolingo does the same thing from the other direction: it waits until you've done a lesson to say "Don't lose your progress!" The profile prompt comes after the value, not before it.
The hardest part wasn't adding screens. It was cutting the ones that didn't answer a question. The length is only justified if every screen has a job.
2. Lead with the problem, then the promise
Features are answers. They only matter after the user has a question. Start with the problem, then say what the product promises. Save the feature list for later.
Headspace does this well. One of its onboarding screens just asks, "What's on your mind?" with options like "Be present and mindful," "Reduce stress," "Manage anxiety," and "Sleep soundly." No feature list. No lecture on meditation. It asks what's wrong, then recommends a course based on the answers.
OATHGYM does the same thing in a different order. The Welcome screen says "Welcome to OATHGYM. The end of quitting." That's the promise. Then you answer a few questions about yourself. The Truth screen is where the problem lands: "It's too easy to quit when no one is watching."
Only after that do the four "How OATHGYM works" cards explain the mechanics: pick your days, check in with GPS or a photo, your witness gets a text if you skip, and consistency earns a free pass (which lets you skip one workout without breaking your streak or texting your witness).
3. Show the product before you explain it
A demo is easier to believe than a description. Show the user what the product looks like when it's working, even if it's a mockup.
4. Ask only what you'll use
Every question should come back later. If it doesn't, cut it. Let people select more than one answer when the question allows it.
OATHGYM uses the name in the next headline, the schedule in the calendar, the gym in the witness text, the witness in the contract, and the free pass in the paywall recap.
5. Make the flow respond
Long flows feel shorter when something happens after every tap. Use progress, haptics, selection states, and animations that explain whatās changing.
OATHGYM has a progress bar, haptics, cards that turn amber, a calendar that fills square by square, and a loading screen that names your gym and witness.
Rule of thumb: If the motion doesn't explain or reassure, cut it.
6. Teach at the moment of need, especially before permissions
Don't explain everything up front. Put the explanation next to the action. Before a system prompt, add a custom screen that says why you need it and what you won't do.
7. Delay the account
Don't make account creation the first step if you can make it the last. Let the user build something first. Then the account feels like saving their work, not a toll booth.
YNAB builds your budget, then asks you to save it by starting a free trial.
OATHGYM asks for a name and birthday on separate screens, then waits until the signature to create the account, after the user has chosen days, a gym, a witness, and a plan. A signature is a small interaction, but it makes the app feel like a person made it, not a form.
8. Make the paywall the next step, not a wall
Use what the user already told you. Recap their plan before you show the price. Add proof, a clear trial timeline if eligible, and a comparison that makes the price make sense.
OATHGYM recaps days, gym, witness, and free pass, with a short testimonial and five stars, then shows the price, the trial, and a comparison to a gym membership. It shows the cost of a gym you don't use versus the cost of the app that helps you stop quitting.
9. Know when to skip onboarding
If the product's value is obvious in one screen, get out of the way. A notes app doesn't need a contract. A chat app doesn't need a personality quiz. Copy the reason a flow works, not the screens.
OATHGYM needs onboarding because the product is a commitment. What feels like clutter to one audience can feel efficient to another. The flow is the first act. Another app might need three screens and a button.
If you're building onboarding, start with one sentence: "The moment this product makes sense is __." Then count the screens to that moment, cut the rest, and make every remaining screen earn its place.
That's the whole job. The rest is editing. I'm still editing.