1. Platforms, stacks, and tradeoffs

The main decision is native vs. cross‑platform. I care about long‑term maintainability, hiring pool, and how fast I can ship v1 without boxing myself in.

  • Native (Swift/Kotlin): best platform integration, performance, and UX; higher engineering cost for two codebases.
  • React Native / Expo: single codebase, JS/TS, good enough performance for most products, large ecosystem.
  • Flutter: great UI consistency across platforms, Dart ecosystem is smaller but opinionated and fast.

2. Core architecture principles

Regardless of stack, I try to keep a clean separation between UI, state management, and data access. This keeps features testable and easier to refactor.

  • Presentation layer: screens, navigation, and components; as "dumb" as possible.
  • State / domain layer: view models, hooks, or controllers that own business logic.
  • Data layer: API clients, persistence, and caching (e.g., SQLite / Room / Core Data / local storage).

3. Networking, offline, and sync

Good mobile UX assumes bad networks. I try to design flows that are resilient to flakiness and intermittent offline use.

  • Use a typed API client (OpenAPI / tRPC / generated SDKs) instead of ad‑hoc fetches.
  • Cache critical data locally and design idempotent writes for safe retries.
  • Make error states explicit in the UI (loading, offline, partial data) instead of just failing silently.

4. Performance and UX considerations

On mobile, jank is obvious. I try to ship with a short checklist for responsiveness.

  • Batch network calls and avoid "waterfall" request chains on app launch.
  • Use virtualization for long lists and avoid heavy work on the main thread.
  • Lazy‑load non‑critical screens, images, and analytics.

5. Testing and release pipeline

Releasing often with confidence is the real productivity unlock.

  • Unit tests for core business logic (validation, pricing, permissions, etc.).
  • Basic end‑to‑end flows through a small set of critical journeys (sign‑in, checkout, main feature).
  • Automated builds and distribution to test users (TestFlight / internal tracks) before going to the stores.