Most apps design for three moments. Nothing here yet, everything’s fine, and something broke.
Real life has a lot more moments than that.
You went away
Say a sleep app has 60 days of your data, and you skip 3 days. It shouldn’t throw away the 60. It should check again for a few days. If the numbers are in line, carry on and leave a gap where the gap was.
Now say you’ve been away for 3 weeks. It probably does need to recalibrate. But it can still show you something, as long as it’s clearly labelled as an estimate. That’s better than alarming you with numbers that are out of bounds.
There’s a balance to strike here. On one side: “I’ve come back, it’s useless now, I give up.” On the other: “This app has lied to me.” An honest estimate sits between the two.
You moved
A habit or reminders app that ignores where you are is killing itself. No, I can’t take the bins out. I’m visiting my family, 6 hours away.
And no, I can’t dial into that Zoom call. Daylight saving moved it, and I’ve missed it by an hour.
Apple knows how this feels. In 2010, a daylight saving bug made iPhone alarms go off at the wrong time, and a few months later, another one stopped some alarms sounding on New Year’s Day. It was the same year people were told they were holding their phones wrong.
The hard part is that time means two different things. Your 7am alarm should stay at 7am wherever you wake up. Your Zoom call happens at one moment, wherever you are. Pick the wrong one and your app is wrong twice a year, and every time someone travels.
You said no
Permission denied isn’t an excuse to shut down and give up. Turn that feature off and let people use the rest. Unless it’s core to the app, learn to live without it.
Sometimes you won’t even be told. If someone won’t let you read their health data, iOS doesn’t say so. It looks exactly like they have no data. So you have to design for not knowing.
You usually get denied because you bombarded someone with prompts before you’d explained why. I know people tap without reading, and I wish Apple gave us a better way to pitch this. Until then, ask when it makes sense, and say why first.
You lost signal
Someone who’s offline didn’t do anything wrong, so don’t stop them. Show the data you’ve cached. Keep their changes and upload them later. And tell them they’re offline, so nothing comes as a surprise.
Hide the mess and be open about the fix. If an upload still fails, say so, and say what happens next.
Users and clients don’t want you to come to them with problems.
They want you to come to them with solutions.
You found nothing
Someone with no search results doesn’t want to hit a blank wall. They want suggestions and help. Maybe something loosely related, as long as you’re upfront about it and it doesn’t feel like being dragged down a rabbit hole without warning.
You finished
A cleared list isn’t the same as first use. Someone who’s just cleared theirs knows how your app works, so don’t show them the welcome screen.
It should be a celebration. It’s one of those little big details, the small thing that makes a big difference. Say well done. See you next week. Asana sometimes sends a unicorn flying across the screen. And if you’re a bank and someone has just paid off their loan, it’s “We loved writing to you every month, but you’ve paid it all off. See you around. Bye!” Imagine a bank that didn’t harass you, just said thanks, and left you be.
First use, no results and all done can all look like the same empty screen. They aren’t the same moment.
Spotify worked this out with Wrapped. The end of a year isn’t a state most apps would design for at all, and they turned it into the moment people wait for and share.
So always ask what your user wants to see at that exact moment. The first time they open your app. At home. At the supermarket. On the way to work. It’s the same app and the same data. What changes is what you show.
Design for the moment, not the data.