A mobile app that works correctly but feels slow or confusing will still get one-star reviews. Usability and performance are just as important as functionality.
Usability Testing
Usability testing answers: "Can real users accomplish their goals easily?"
Touch Targets
Mobile users tap with fingers, not mouse pointers. Apple and Google both recommend minimum touch targets:
| Platform | Minimum Size |
|---|---|
| iOS | 44 × 44 points |
| Android | 48 × 48 dp |
What to check:
- Buttons and links are large enough to tap accurately
- Touch targets don't overlap
- Interactive elements have enough spacing between them
- No "rage tapping" needed — elements respond to first tap
Gestures
Test all gesture interactions:
| Gesture | Common Use |
|---|---|
| Tap | Select, activate |
| Long press | Context menu, drag mode |
| Swipe | Delete, navigate, dismiss |
| Pinch | Zoom in/out |
| Pull down | Refresh content |
| Edge swipe | Back navigation |
Gotchas:
- Swipe-to-delete shouldn't be the only way to delete
- Gestures should have visual affordances (hints)
- Custom gestures shouldn't conflict with system gestures
Navigation
- Can users find what they need within 3 taps?
- Is the back button behavior predictable?
- Does the app remember scroll position when returning to a screen?
- Do deep links open the correct screen?
Text and Readability
- Minimum font size: 16px for body text
- Sufficient contrast between text and background (WCAG AA: 4.5:1)
- Text doesn't overflow or get cut off on small screens
- Dynamic type / font scaling is supported
Forms
Mobile forms are where usability dies:
- Show the correct keyboard type (email, number, phone)
- Auto-capitalize first name fields
- Don't make users type what you can auto-detect (location, date)
- Show inline validation, not just on submit
- Don't clear the entire form on a single validation error
Performance Testing
Key Metrics
| Metric | Target | Why |
|---|---|---|
| App launch time | < 2 seconds (cold start) | Users abandon slow apps |
| Screen transition | < 300ms | Feels instant |
| API response handling | Show loading state within 100ms | User knows something is happening |
| Frame rate | 60 fps (16ms per frame) | Smooth scrolling and animation |
| Memory usage | Stable over time | No memory leaks |
| Battery drain | Minimal in background | Users uninstall battery hogs |
Android Profiling Tools
Android Studio Profiler:
- CPU profiler: Find slow methods and excessive computation
- Memory profiler: Track allocations and detect leaks
- Network profiler: See all API calls, timing, and payload sizes
- Energy profiler: Estimate battery impact
How to use:
- Connect device or start emulator
- Run app in debug mode
- Open Profiler tab in Android Studio
- Monitor CPU, memory, network, and energy in real time
iOS Profiling Tools
Xcode Instruments:
- Time Profiler: Find CPU bottlenecks
- Allocations: Track memory usage
- Leaks: Detect memory leaks
- Network: Monitor API calls
- Core Animation: Measure frame rate
How to use:
- Open Xcode → Product → Profile
- Select an instrument (e.g., Time Profiler)
- Click Record
- Use the app
- Analyze the timeline for spikes and anomalies
Common Performance Issues
Slow list scrolling:
- Images not cached or resized
- Complex layouts being recalculated during scroll
- Too many items rendered at once (use virtualized lists)
Memory leaks:
- Event listeners not removed
- Retained references to destroyed views
- Caching without size limits
Network bottlenecks:
- Too many API calls on screen load
- Large payloads (send only what the screen needs)
- No caching of responses
- Images not compressed or properly sized
Battery drain:
- GPS running in background
- Frequent network polling
- Animations running when app is backgrounded
- Wake locks not released
Testing Under Constraints
Test what happens when the device is under stress:
| Condition | How to Simulate | What to Check |
|---|---|---|
| Low memory | Open many apps | App doesn't crash when resumed |
| Low battery | Use battery settings | App reduces background activity |
| No storage | Fill device storage | App shows helpful error, doesn't crash |
| Slow CPU | Use older device | App remains usable, just slower |