Skip to main content
Development

Mobile Development on Cloud: Five Decisions That Hurt If You Get Them Wrong

Mobile apps built on cloud backends live or die on a handful of architectural decisions. Here are the five that we see teams regret.

John Lane 2022-09-28 5 min read
Mobile Development on Cloud: Five Decisions That Hurt If You Get Them Wrong

Mobile backends look deceptively similar in vendor marketing — all of them promise scale, auth, push notifications, and "seamless" integration. In practice, a handful of decisions made in the first month of a project determine whether the app is still maintainable in year three. Here are the five we see teams regret most often.

1. Your Authentication Strategy Will Define Your Options

Auth is the most common first mistake on a cloud mobile backend. Teams pick whatever is easiest to stand up — a custom username/password table, Firebase Auth, Cognito, Auth0 — without thinking about where the app is going.

The decision matrix

  • If you are building a consumer app with social login, Firebase Auth or Auth0 are reasonable. They have the social providers wired up, the token refresh handled, the flows documented.
  • If you are building B2B SaaS with enterprise customers in the roadmap, plan for SAML and OIDC federation from day one. Auth0, Clerk, and Cognito can all handle this but Firebase Auth really cannot. Migrating an enterprise customer base off Firebase Auth a year later is painful.
  • Do not roll your own. The number of subtle token, refresh, and session-fixation bugs in hand-rolled auth is not worth the licensing savings.

The cost of re-platforming auth on a shipping mobile app is high because every existing user has to re-authenticate, every token has to be reissued, and every edge case gets surfaced at once. Decide once and commit.

2. Offline Behavior Is a Product Decision

This is the one that separates "works in the demo" from "works on a customer's commute." Cloud backends make it tempting to treat the network as always available. It is not. Subway tunnels, elevators, rural cell gaps, airplanes, bad hotel Wi-Fi — your app will spend 2 to 5 percent of its time offline for most users, and 30 percent or more for users in the field.

Three offline postures

  • Online-only: every action requires the network. Acceptable for apps where offline is genuinely pointless (video streaming, live auctions). Unacceptable for anything a user might do on a commute.
  • Cached read, online write: the user can see the last synced state but cannot do anything without connectivity. This is the middle ground and the default for most cloud-backed apps.
  • Optimistic offline: the user can read and write anywhere, with local-first data synced back when the network returns. This is where RxDB, WatermelonDB, Core Data + CloudKit, or SQLite + custom sync come in. It is real engineering work and should be scoped as such.

Pick one at the start of the project. Retrofitting offline support into an online-only architecture is nearly always a rewrite.

3. Push Notifications Are an Infrastructure Problem, Not a Feature

Push notifications look like a checkbox until you have ten thousand users and start hitting Apple and Google rate limits, dealing with expired tokens, debugging notifications that arrive hours late, and trying to reconcile your send logs with what users actually saw.

The realistic options:

  • FCM directly — free, fine for simple use cases, painful for segmentation and analytics.
  • OneSignal, Braze, or Airship — more expensive, meaningfully better at scheduling, segmentation, A/B testing, and delivery analytics.
  • Your own service on top of APNs and FCM — only reasonable if you have a very specific requirement (strict data residency, integration with an existing notification platform).

If notifications are important to your product — transactional alerts, reminders, engagement loops — budget for a proper service. If they are a nice-to-have, FCM is fine.

4. API Design: REST, GraphQL, or tRPC

The mobile backend API contract is harder to change than the backend code itself. Old app versions will keep calling the old endpoints for years. Pick a shape and plan for versioning.

  • REST remains the safest choice. Every mobile dev understands it, every HTTP cache respects it, every proxy knows how to log it. Version by URL (/v1/, /v2/). Boring and durable.
  • GraphQL is compelling when the mobile client needs to shape data differently across screens and the backend has a lot of types. It is painful when you have to reason about query cost, field-level authorization, and caching. If you adopt it, use persisted queries from day one.
  • tRPC is elegant for full-stack TypeScript teams but couples client and server in ways that hurt when you need to ship a fix to a three-month-old version.

Our default recommendation for a new project: REST with OpenAPI, generated client code, and a discipline about never breaking old versions.

5. Observability Before Launch, Not After

The most expensive bugs on mobile backends are the ones that happen on a specific phone, in a specific country, on a specific carrier, to 3 percent of users. You will not catch those without proper observability instrumented from day one.

What to instrument

  • Crash reporting (Crashlytics, Sentry) — non-negotiable.
  • API-level tracing with a request ID propagated from the mobile client through every backend service. When a user reports a problem, you should be able to find their exact request path in your logs.
  • Client-side performance metrics — cold start time, first screen render, API latency percentiles by region.
  • Error budgets on the critical paths — login, checkout, sync. If any of these degrade, you should know in minutes, not days.

Setting this up after the app is in the store is three times as much work because you have to ship another release to instrument the client, wait for adoption, and then diagnose the issues. Do it before launch.

Three Takeaways

  1. Auth and offline are the decisions you cannot cheaply reverse. Spend the time to get them right on day one.
  2. Do not let a demo define your API shape. REST is still the least regretted choice for mobile backends with a long lifespan.
  3. Observability is a launch requirement, not a phase-two project. You cannot debug what you cannot measure.

Talk with us about your infrastructure

Schedule a consultation with a solutions architect.

Schedule a Consultation
Talk to an expert →