01
Native iOS and Android
Swift and Kotlin applications where platform fidelity, performance or deep OS integration justify two codebases — and where that justification is stated rather than assumed.
02
Cross-platform applications
React Native and Flutter where the shared surface genuinely dominates, with a clear-eyed account of what still has to be written twice and what the bridge costs you.
03
Release engineering around the store
Feature flags and remote config so that shipping a binary and revealing a feature are separate decisions; phased rollouts with automated halt criteria; a release train that runs whether or not every feature is ready.
04
Mobile observability
Crash-free session rate, ANR and startup-time budgets, per-version adoption curves and a forced-upgrade path — because on mobile your old versions keep running in the field for months whether you like it or not.
05
Backend-for-frontend and offline behaviour
API shaping for constrained networks, offline-first data models, conflict resolution and sync — the parts that determine whether the app is usable on a patchy connection or only in the office.