Web apps live in a forgiving box: a browser, a keyboard, a stable connection. Mobile apps live in the real world, where a phone call can interrupt a checkout. Here's the checklist I built after testing dozens of builds.
Interruptions
The app must survive being interrupted mid-action:
- Incoming call during form submission
- Push notification while typing
- App backgrounded and restored after 10 minutes
- Screen lock during an upload
The classic bug: backgrounding the app loses unsaved form state with no warning.
Permissions
Test every permission path, not just the happy one:
- Grant on first ask
- Deny, then try to use the feature
- Deny, then grant later from system Settings
- Revoke a previously granted permission while the app runs
Apps that crash when camera permission is denied are extremely common.
Network Conditions
| Condition | What to check |
| Offline | Graceful message, no crash, queued actions |
| Slow 3G | Loaders, timeouts, no duplicate submits |
| Network drop mid-request | Retry without double-charging |
| Switch Wi-Fi โ mobile data | Session survives |
Device Fragmentation
I test on at least: one small old Android, one current Android, one current iPhone. Layouts that look fine on a big screen overflow on a 5-inch one.
System States
- Low battery / battery saver mode (throttles background work)
- Low storage (downloads and caching fail differently)
- Large system font / accessibility text scaling
- Dark mode vs light mode
The Install/Update Path
Fresh install behaves differently from an update over an old version โ migrations, cached tokens, and old local data only surface on upgrade. I always test the upgrade path, not just clean installs, because that's what real users actually do.
