DEV Community

Xin Jiang
Xin Jiang

Posted on

Habit apps shouldn't punish you: design rules from shipping four small iPhone apps

Twenty-five out of twenty-six days is not zero. But open almost any habit tracker, miss one Tuesday, and that's exactly what it shows you: a big, bright 0.

That number isn't neutral UI. For many users, especially people with ADHD or anyone whose week doesn't run on rails, the reset is the moment they delete the app. As an indie iOS developer, I've shipped four small apps around this problem. Here are the product and engineering rules I ended up with.

Rule 1: Model "forgiveness" in the data, not just the UI

In StreaksChain, you get one grace day a week. Miss a day and the streak keeps going. Miss two in the same week and the streak starts over, but nothing in your history is ever deleted. The calendar keeps every square you earned.

The implementation lesson: store completions as immutable day records and derive the streak from them, instead of storing a mutable currentStreak counter that you decrement or zero out. Grace rules then become a pure function over history, and changing them later never destroys user data.

Other decisions that came from the same principle:

  • Three habits, on purpose. Track everything and you end up tracking nothing.
  • Zero taps to open the app. Interactive widgets on the home screen and lock screen do the check-in, because the hardest part of a habit app is remembering to open it.
  • HealthKit completes habits automatically. Steps, workouts, and mindful minutes check themselves off when you hit the goal.
  • Weekly targets. "Three times a week" scores the week, not the day.
  • No account. Data stays on the device and syncs through the user's own iCloud.

Rule 2: Compare users only with their own baseline

SquatStreak starts from a test clinicians actually use: the 30-second chair stand. It takes one chair and no equipment. The free version of the test runs in the browser on that page, so people can get their baseline without installing anything.

From that number, the app builds a 30-day plan that starts where the user actually is. Day one might be five stands while holding the chair. On day 30 you retest, and the change between the two numbers is the whole reward. There are no points, levels, or badges, and no reset: 25 days out of 30 is 83%, not a failure.

Rule 3: Attach the habit to something the user already does too often

PushCount flips the problem around. You pick the apps that eat your day (via Apple's Screen Time APIs), and they stay shielded until you finish a set of push-ups.

The phone lies on the floor, screen up, and the front camera counts reps on-device. Frames are processed in memory and never saved or uploaded. Two details mattered more than the detection model itself:

  • Calibrate to the user's range of motion, so knee and incline push-ups count. The set that unlocks your apps has to be one you can actually do today.
  • Show a live meter of what the camera saw. A missed rep is frustrating. A missed rep you can understand (and correct on the spot) is fine.

It's free, the whole thing, with nothing to buy.

Rule 4: Even games can drop the punishment

The same thinking ended up in a puzzle game. FlowGrid has 300 free levels, unlimited undo, no timer, and no fail screen. Get stuck and a hint bar appears. There are no daily quests, so nothing is waiting to be missed if you come back in a month.

The checklist

If you're building anything with streaks, here's what I'd suggest:

  1. Store immutable history and derive streaks from it.
  2. Add a grace mechanism before launch, not after the one-star reviews.
  3. Move check-ins to widgets and system integrations (HealthKit, Screen Time).
  4. Compare users with themselves, never with a leaderboard.
  5. Keep it on-device and accountless unless you truly need a server.

All of these, along with a few more small apps like ScanMind (on-device medical record organizer) and SnapClean (shows what's actually stored on your iPhone versus iCloud), are at qumge.com/en/products.

Top comments (0)