Mobile QA Process
Instructions
QA for mobile is about catching what automation cannot: visual regressions across devices, real-world network conditions, store compliance, and UX friction. A working QA process is lightweight, predictable, and repeated every release.
1. QA Cadence
Tie QA to the release train, not to a calendar.
- Pre-merge: automated checks + code review (see
mobile-testing-strategy).
- Pre-release candidate: smoke test on internal testing track.
- Release candidate: full regression + exploratory bug bash.
- Post-release: production smoke + monitored rollout (see
staged-rollouts).
2. The Release Checklist
Every release runs the same checklist. Store it as a template in the repo.
# Release Checklist v<date>
## Versioning
- [ ] versionName matches changelog
- [ ] versionCode / build number strictly increases
- [ ] Git tag applied on the release commit
## Build
- [ ] Release build succeeds on CI with the production flavor
- [ ] App size delta < 10% vs last release (investigate otherwise)
- [ ] Startup time under 2s on reference devices
## Functionality
- [ ] Smoke pass on iOS and Android (latest + oldest supported)
- [ ] Regression suite green
- [ ] Critical deep links verified on both platforms
- [ ] Push notifications verified (alert + data) end to end
## Compliance
- [ ] Privacy nutrition labels / Data Safety form match SDK inventory
- [ ] Permission prompts have correct Info.plist strings / manifest rationales
- [ ] Export compliance answered (iOS encryption declaration)
- [ ] Accessibility spot-check (VoiceOver, TalkBack, Dynamic Type)
## Store
- [ ] Screenshots current for all required locales and device sizes
- [ ] What's New notes drafted
- [ ] Age rating reviewed if content changed
- [ ] Staged rollout plan written (start %, halt criteria)
## Observability
- [ ] Crash-free sessions baseline recorded from previous version
- [ ] Analytics dashboard links noted
- [ ] Kill switches and feature flags verified
3. Regression Suite
A living, manual document for what automated tests do not cover:
- Sign-in with each auth provider (email, SSO, passkey) including failure paths.
- Offline flows on each platform.
- Push notification variants (cold start, foreground, backgrounded, actions).
- Payment sandbox purchases + restore.
- Camera, microphone, photo picker, notifications permissions in Settings-off state.
- In-app update flow (Android) and forced-update gate (both).
- Deep links from web, email, and notifications.
- Backgrounding during long operations (upload, download).
Keep the suite under 60 minutes for a single platform pass.
4. Exploratory Bug Bash
- Invite engineering, design, PM, support, and at least two outsiders.
- 60-90 minutes, two platforms.
- Each participant gets a persona and a focus area (onboarding, payments, settings, edge cases).
- Participants file bugs with reproduction steps, device, and OS version. No discussion during the session.
- Triage immediately afterwards.
Bug bashes surface issues automation never will: unreadable contrast, copy mismatches, subtle animation jank.
5. Real-World Conditions
Spend part of QA outside the office/Wi-Fi:
- Elevator, subway, tunnel -> reconnect behavior.
- Low-power mode / battery saver -> background work disabled.
- Dark mode, dynamic type at 200%.
- Right-to-left language (pseudo-locale on iOS, RTL pseudolocale on Android).
- Network shaping:
Network Link Conditioner on iOS, adb shell tc / charles / proxyman for throttling.
6. Defect Tracking Hygiene
- Every bug has: platform, OS, device, build, reproduction steps, severity, screenshot/video.
- Severity levels are shared between PM and engineering with release-blocking semantics.
- Regressions are tagged so they can be counted per release.
7. Internal Testing Tracks
- Apple TestFlight: internal testers + external testers (up to 10,000). Review can take up to 24 hours for external.
- Play Store Internal Testing: internal testers (up to 100 emails), promotes to Closed/Open testing.
- Treat the internal track as the last mile. Do not submit to production from a build that has not been on internal for at least a few hours.
8. Support Loop
Close the loop with customer support:
- Weekly triage of user-reported issues against current release.
- Named owner for each repeatable issue.
- Use in-app feedback with device metadata (anonymized) to cut repro time.
9. Anti-Patterns
- QA gate at the very end. Bugs found then are 10x more expensive.
- Manual regression that takes four days. Trim ruthlessly or automate.
- Bug bashes without triage; they demoralize.
- Relying solely on emulators and simulators. Physical devices reveal what they cannot.
- Releasing on Friday without a rollback plan.
10. Metrics
Track per release:
- Time-to-first-bug-found in exploratory.
- Escaped defects (post-release bugs with severity above Low).
- Regression rate (new bugs in areas that passed last release).
- Crash-free sessions delta vs prior release.
- Store review latency.
Aim for downward trends. Trends matter more than absolute numbers.
Checklist
1---2name: mobile-qa-process3description: Release checklists, regression suites, exploratory bug bashes, and how to run QA for a mobile app without burning the team out. Use when preparing a release or standing up a QA practice.4---56# Mobile QA Process78## Instructions910QA for mobile is about catching what automation cannot: visual regressions across devices, real-world network conditions, store compliance, and UX friction. A working QA process is lightweight, predictable, and repeated every release.1112### 1. QA Cadence1314Tie QA to the release train, not to a calendar.1516- **Pre-merge**: automated checks + code review (see `mobile-testing-strategy`).17- **Pre-release candidate**: smoke test on internal testing track.18- **Release candidate**: full regression + exploratory bug bash.19- **Post-release**: production smoke + monitored rollout (see `staged-rollouts`).2021### 2. The Release Checklist2223Every release runs the same checklist. Store it as a template in the repo.2425```markdown26# Release Checklist v<date>2728## Versioning29- [ ] versionName matches changelog30- [ ] versionCode / build number strictly increases31- [ ] Git tag applied on the release commit3233## Build34- [ ] Release build succeeds on CI with the production flavor35- [ ] App size delta < 10% vs last release (investigate otherwise)36- [ ] Startup time under 2s on reference devices3738## Functionality39- [ ] Smoke pass on iOS and Android (latest + oldest supported)40- [ ] Regression suite green41- [ ] Critical deep links verified on both platforms42- [ ] Push notifications verified (alert + data) end to end4344## Compliance45- [ ] Privacy nutrition labels / Data Safety form match SDK inventory46- [ ] Permission prompts have correct Info.plist strings / manifest rationales47- [ ] Export compliance answered (iOS encryption declaration)48- [ ] Accessibility spot-check (VoiceOver, TalkBack, Dynamic Type)4950## Store51- [ ] Screenshots current for all required locales and device sizes52- [ ] What's New notes drafted53- [ ] Age rating reviewed if content changed54- [ ] Staged rollout plan written (start %, halt criteria)5556## Observability57- [ ] Crash-free sessions baseline recorded from previous version58- [ ] Analytics dashboard links noted59- [ ] Kill switches and feature flags verified60```6162### 3. Regression Suite6364A living, manual document for what automated tests do not cover:6566- Sign-in with each auth provider (email, SSO, passkey) including failure paths.67- Offline flows on each platform.68- Push notification variants (cold start, foreground, backgrounded, actions).69- Payment sandbox purchases + restore.70- Camera, microphone, photo picker, notifications permissions in Settings-off state.71- In-app update flow (Android) and forced-update gate (both).72- Deep links from web, email, and notifications.73- Backgrounding during long operations (upload, download).7475Keep the suite under 60 minutes for a single platform pass.7677### 4. Exploratory Bug Bash7879- Invite engineering, design, PM, support, and at least two outsiders.80- 60-90 minutes, two platforms.81- Each participant gets a persona and a focus area (onboarding, payments, settings, edge cases).82- Participants file bugs with reproduction steps, device, and OS version. No discussion during the session.83- Triage immediately afterwards.8485Bug bashes surface issues automation never will: unreadable contrast, copy mismatches, subtle animation jank.8687### 5. Real-World Conditions8889Spend part of QA outside the office/Wi-Fi:9091- Elevator, subway, tunnel -> reconnect behavior.92- Low-power mode / battery saver -> background work disabled.93- Dark mode, dynamic type at 200%.94- Right-to-left language (pseudo-locale on iOS, RTL pseudolocale on Android).95- Network shaping: `Network Link Conditioner` on iOS, `adb shell tc` / charles / proxyman for throttling.9697### 6. Defect Tracking Hygiene9899- Every bug has: platform, OS, device, build, reproduction steps, severity, screenshot/video.100- Severity levels are shared between PM and engineering with release-blocking semantics.101- Regressions are tagged so they can be counted per release.102103### 7. Internal Testing Tracks104105- **Apple TestFlight**: internal testers + external testers (up to 10,000). Review can take up to 24 hours for external.106- **Play Store Internal Testing**: internal testers (up to 100 emails), promotes to Closed/Open testing.107- Treat the internal track as the last mile. Do not submit to production from a build that has not been on internal for at least a few hours.108109### 8. Support Loop110111Close the loop with customer support:112113- Weekly triage of user-reported issues against current release.114- Named owner for each repeatable issue.115- Use in-app feedback with device metadata (anonymized) to cut repro time.116117### 9. Anti-Patterns118119- QA gate at the very end. Bugs found then are 10x more expensive.120- Manual regression that takes four days. Trim ruthlessly or automate.121- Bug bashes without triage; they demoralize.122- Relying solely on emulators and simulators. Physical devices reveal what they cannot.123- Releasing on Friday without a rollback plan.124125### 10. Metrics126127Track per release:128129- Time-to-first-bug-found in exploratory.130- Escaped defects (post-release bugs with severity above Low).131- Regression rate (new bugs in areas that passed last release).132- Crash-free sessions delta vs prior release.133- Store review latency.134135Aim for downward trends. Trends matter more than absolute numbers.136137## Checklist138139- [ ] A written release checklist is version-controlled in the repo.140- [ ] A regression suite covers flows automation misses and runs under 60 minutes per platform.141- [ ] A bug bash is scheduled for every release candidate.142- [ ] Real-world conditions (network, battery, locale) are explicitly tested.143- [ ] Internal testing track is used before any production submission.144- [ ] Support issues are triaged weekly and feed regression updates.145- [ ] Severity levels are shared across engineering and product.146- [ ] Per-release metrics are tracked and reviewed.