Web & Mobile · 5 minute read
Mobile App Architecture: Decisions That Are Hard to Reverse
Mobile architecture differs from web architecture because you cannot deploy a fix instantly and cannot assume connectivity. The decisions that are expensive to reverse are how state is managed, whether the app works offline, how navigation is structured, and how old versions are supported.
Mobile apps ship through a review queue onto devices you do not control, which makes several architectural decisions far more expensive to reverse than their web equivalents. This guide covers those decisions, drawing on FISTA Solutions' web and mobile work.
Which decisions are hard to reverse?
These five shape everything built on top of them.
| Decision | Why reversal is expensive |
|---|---|
| Offline capability | Changes storage, sync, and conflict handling |
| State management | Touches every screen |
| Navigation structure | Deep links and flows depend on it |
| Local persistence | Migration of existing user data |
| API contract | Old app versions still call it |
| Cross-platform vs native | Whole codebase |
Why does release friction change the design?
Because a bug fix takes days to reach users, and some users never take it.
That pushes control to the server. Configuration, feature flags, and content should be fetched rather than compiled in, so behaviour can change without a release.
It also means the API must tolerate old clients indefinitely. Additive changes only; never remove a field a shipped version reads. See feature flags guide.
How should offline behaviour be designed?
As a foundational decision, made before the first screen is built.
Offline-capable apps treat local storage as the source of truth for the interface and sync in the background. That changes the data layer, adds conflict resolution, and affects every write path.
Many apps do not need full offline capability but do need graceful degradation: cached content that remains readable, queued actions that retry, and clear indication of what is stale. That middle ground is cheaper and covers most real usage.
What should state management look like?
One pattern, applied consistently, that the team can explain.
The specific choice â whichever the platform's ecosystem favours â matters less than consistency. Codebases with three approaches layered by era are what make mobile work slow.
Separate server state from local interface state. They have different lifetimes and different invalidation rules, and conflating them is the usual source of stale-data bugs.
How should navigation be structured?
Declaratively, with deep links considered from the start.
Any screen a notification, email, or share link points at must be reachable directly, with the back stack reconstructed sensibly. Retrofitting that into imperative navigation is painful.
Authentication interacts with this: a deep link arriving for a logged-out user should authenticate and then continue to the destination, not drop them on a home screen. See push notification architecture.
What are the rules for background work?
Assume it may be delayed, batched, or never run.
Both platforms restrict background execution to protect battery, and the restrictions tighten over time. Work that must happen should happen on the server, with the app fetching results when it next opens.
Use the platform's scheduled-work mechanism for genuinely deferrable work â uploading logs, prefetching content â and design it to be interruptible and resumable.
How do you handle local data migration?
With versioned schemas and migrations tested against real old data.
A user who has not opened the app in a year will upgrade several versions at once. The migration path has to work from any prior version, not just the previous one.
A failed migration that loses user data is one of the worst failures a mobile app can have, and it is difficult to recover from because you cannot inspect the device. Test upgrade paths explicitly.
What are the common mistakes?
Compiled-in configuration that requires a release to change. Retrofitting offline. Breaking API changes that strand old clients. Relying on background work that the platform will not run. And untested migration paths.
How do you test it?
Test on real devices, on old operating system versions, on poor networks, and on low-end hardware. Simulators hide performance and connectivity problems that dominate real user experience.
Test upgrade paths from several prior versions with realistic local data.
What does it cost to operate?
Mobile costs more than equivalent web work: two platforms, device testing, review queues, and a longer feedback loop.
The cross-platform decision is the main lever. See cross platform vs native decision guide.
What should you measure?
Crash-free session rate, cold start time, adoption curve of new versions, proportion of users on versions older than a few releases, and background sync success rate.
What changes with AI features in apps?
Latency and cost push work to the server for anything substantial, with the app handling streaming presentation and graceful failure.
On-device models suit small, latency-sensitive, privacy-sensitive tasks. Anything larger belongs on a server the app calls, which also means the feature can be improved without a release â a significant advantage given review queues.
When is this the wrong approach?
A simple content app that requires connectivity anyway does not need offline architecture, background sync, or elaborate state management. Match the architecture to what the app actually does.
What should you do first?
Decide your offline stance and write it down. Everything else in the data layer follows from that one choice, and changing it later is the expensive path.
How FISTA Solutions helps
FISTA Solutions builds and operates production systems through web and mobile, AI enablement, and staff augmentation: server-side configuration so behaviour changes without a release, and upgrade paths tested from several prior versions with realistic local data, decisions documented with their reasoning, and handover that leaves your team able to maintain what was delivered. The record is 150+ projects for 50+ companies across 12+ countries.
To scope this work, message FISTA on WhatsApp, or read mobile app security guide.
Share-ready article cover
Download the generated social format.
Clear answers
Questions raised by this field note.
Straightforward guidance for evaluating scope, fit, and the next step.
01What makes mobile different from web?
Release goes through a review queue, and users decide when to update. A bug can live on devices for weeks, which means server-side controls and forward-compatible APIs matter far more than on the web.
02Should the app work offline?
Decide at the start, because retrofitting it is close to a rewrite. Offline capability changes how you store data, how you sync, and how you handle conflicts â all foundational choices.
03How long must you support old versions?
Longer than you expect. Some users never update, so the API needs to remain compatible for versions still in use, with a forced-upgrade mechanism reserved for security issues.
04What about background work?
Both platforms restrict it aggressively to protect battery. Design for work that may be delayed or never run in the background, and put anything that must happen on the server instead.
05Which state management approach is right?
Whichever the team understands, applied consistently. The specific library matters less than having one pattern rather than three, because mixed approaches are what make mobile codebases hard to change.
Continue exploring
Related capabilities
Start with the hard problem
Need the outcome owned, not merely analyzed?
Tell us where delivery is constrained. Weâll map the fastest credible path from intent to verified production.