Pairing & Mob on Mobile
A cookbook for simulator sharing, device lab etiquette, and review norms on Expo SDK 57 teams - mobile pairing fails when only one person sees the screen.
Search across all documentation pages
A cookbook for simulator sharing, device lab etiquette, and review norms on Expo SDK 57 teams - mobile pairing fails when only one person sees the screen.
Quick-reference session card - paste into calendar invite.
## Pairing session - <feature>
- Driver: <name> (keyboard)
- Navigator: <name> (reads aloud, watches sim)
- Device: iPhone 16 sim + Pixel 8 API 35 emu
- Branch: feature/<ticket>
- Rotate: 25 min
- Done when: PR opened with screenshot + test output# Shared verification before ending session
npm run lint && npm run typecheck && npm test
npx expo start --dev-client # if native modulesWhen to reach for this:
| Tool | Use for | Mobile tip |
|---|---|---|
| Zoom / Meet | Sim mirror, face cam | Share window not full screen - hide notifications |
| VS Code Live Share | Same buffer, shared terminal | Driver runs Metro; navigator watches sim on stream |
| QuickTime (macOS) | Crisp iOS sim video | File → New Movie Recording → pick Simulator window |
| scrcpy | Android device mirror | scrcpy --stay-awake for physical device sessions |
# Driver - standard start
npx expo start --clear
# Navigator - verify on second platform without stopping Metro
# press a / i in shared terminal with driver consentNorms:
expo start causes port confusion## Before session
- [ ] Same Node 20 + `npm ci` completed both machines
- [ ] Same git branch checked out
- [ ] Named simulators: iPhone 16, Pixel_8_API_35
- [ ] .env.local values confirmed (staging API)
## During session
- [ ] Redbox reproduced on both iOS and Android once for UI bugs
- [ ] Font scale 100% default; test XL if a11y ticket
- [ ] Dark mode toggled if theme-related
## After session
- [ ] PR description includes both platform screenshots
- [ ] No uncommitted `app.config.ts` experiments left on driver machineStandard device names tie back to Onboarding Basics - team scripts npm run ios:16 reduce pairing friction.
Physical devices beat simulators for camera, push, biometrics, and performance.
## Device lab shelf - team norms
### Checkout
- Sign device out in #device-lab or sheet: name, date, ticket
- Note OS version sticker on cradle (iOS 18.2, Android 15)
### Hygiene
- Log out of personal Apple/Google accounts before return
- Clear app data for staging builds when testing auth flows
- Charge to 80%+ before check-in; cable stays with cradle
### Shared staging accounts
- Use team vault credentials - never personal 2FA-only accounts
- Rotate passwords quarterly; document in 1Password vault
### Broken / flaky devices
- Red tag "do not use" + Slack post - flaky hardware wastes mob hours# iOS internal build install - buddy verifies UDID registered
eas device:create
eas build --profile preview --platform ios
# Android APK sideload
eas build --profile preview --platform android
# QR from EAS dashboard - both observe install successRelated: EAS Build Basics - internal distribution | Internal Distribution
Roles rotate each slice:
Driver - types
Navigator - strategy, reads tickets
Researcher - docs, Sentry, Expo forums
Device op - physical device + screenshots (optional fifth)25-minute slices:
## Mob rules (mobile)
- No parallel Metro on different branches mid-session
- Production EAS credentials: senior only, group observes
- Merge only after everyone saw green tests on streamRequire evidence beyond green CI:
| Change type | Reviewer expects |
|---|---|
| Layout / spacing | iOS + Android screenshots; note device class |
| Gestures / sheets | Screen recording or paired repro steps |
| Navigation | Deep link path or back-stack behavior described |
| Permissions | Screenshot of allow/deny dialogs |
| Native-adjacent | Preview build_id or dev client version noted |
| Performance | Before/after if list or animation touched |
Review comment templates:
<!-- Request device evidence -->
Thanks - please add Android screenshot; iOS safe area looks correct.
<!-- Request preview build -->
This adds a config plugin - please trigger `needs-preview` and paste EAS link.
<!-- Approve with device note -->
Verified on iPhone 16 sim + Pixel 8 emu - LGTM.SLA norms:
app/_layout.tsx, app.config.ts, or eas.jsonNever solo on first production credential touch - mob the checklist.
## Release pairing checklist (45m)
- [ ] Confirm RC `build_id` matches QA sign-off sheet
- [ ] Driver shares EAS dashboard read-only; navigator reads steps aloud
- [ ] `eas submit` only after Maestro smoke green
- [ ] Rollback doc open: OTA roll-back + staged rollout pause links
- [ ] Post submit links in #releases threadRelated: Mobile CI/CD Basics - release vs PR lanes
| Scenario | Pair | Async OK |
|---|---|---|
| First-week onboarding capstone | ✓ | |
| Hermes redbox only on device | ✓ | |
| Copy change in static Text | ✓ | |
| New Expo config plugin | ✓ | |
| Typo in test fixture | ✓ | |
| Flaky Maestro in CI | ✓ | |
| API type fix | ✓ |
| Anti-pattern | Fix |
|---|---|
| "Let me share later" screenshots | Block merge until evidence in PR |
| Driver hogs keyboard 2h | Hard rotate 25m |
| Sim-only review for camera ticket | Mandatory device lab checkout |
Two people run different expo start | One Metro; driver owns terminal |
| Mob of 6 on tiny typo | Split - pair for code, async for review |
| Team size | Pairing cadence |
|---|---|
| 3–4 engineers | 2–3 paired sessions / week |
| 5–8 | Weekly mob on release + ad-hoc pairs |
| 9+ | Feature-area pairing pods; monthly cross-pod mob |
Onboarding capstones and native bugs are faster paired than three async review rounds. Track time-to-merge for paired vs solo tickets one sprint.
Minimum: one team Android + one iOS device passed between squads. Simulators cover 80%; pairing on shared hardware for the 20%.
QuickTime sim mirror + scrcpy + strict screenshot PR template. Quarterly in-person or device-ship week for tactile QA.
Mob produces merged code or a repro recording. Standup syncs status - do not mob entire backlog in standup block.
Stack versions: This page was written for React 19.2.3, React Native 0.86.0, and Expo SDK 57 (
expo~57.0.4).
Reviewed by Chris St. John·Last updated Jul 16, 2026