Native or cross-platform? The honest test
Cross-platform is right for roughly seven business apps in ten. The interesting part is the other three — and the test that tells you which group you are in before you commit a budget.
Cross-platform suits roughly seventy percent of business apps we see. This guide lists the specific hardware, background and store cases where native is cheaper overall — and why we quote that option instead of selling a rewrite later.
The one-question test
Ask this: does the app need to keep doing something with the screen off?
If no — the app is forms, lists, maps, capture, payments and dashboards that run while someone is looking at them — cross-platform will serve you well and cost roughly 60–70% of the native equivalent for both platforms.
If yes — tracking a vehicle for an eight-hour shift, staying paired to a scanner, running the camera continuously — you are fighting the platform's background execution rules, and every plugin between you and the operating system is a liability. Go native.
The comparison, on criteria that decide real projects
| Criterion | Flutter / React Native | Native Swift & Kotlin |
|---|---|---|
| Cost for both platforms | One codebase — roughly 60–70% of native | Two codebases, two engineers, two release cycles |
| Standard business UI | Indistinguishable to users in practice | Marginally better, rarely worth the difference |
| Continuous background location | Fights the platform; battery and reliability suffer | Correct choice — full control of background modes |
| Bluetooth / hardware peripherals | Plugin quality is a risk you inherit | Direct access, predictable behaviour |
| Heavy camera or on-device ML | Workable with native modules | Better performance and thermal behaviour |
| CarPlay, Android Auto, watch apps | Native code required regardless | Native from the start avoids a hybrid mess |
| Speed to first release | Typically 3–5 weeks faster to both stores | Slower, unless you only need one platform |
| Long-term maintenance | One upgrade path, occasional plugin churn | Two upgrade paths, but fewer surprises |
Scroll the table sideways to compare both columns.
Flutter or React Native?
If cross-platform is the right call, the choice between the two is usually about your team rather than the technology.
- Flutter when the app is forms, lists, maps, capture and payments — which is most business software. Rendering is consistent across devices, which matters when your users carry a wide spread of hardware.
- React Native when you already have a React web team. They can review the code and eventually own it, and that continuity is worth more than any framework benchmark.
We will quote the more expensive native option when the app genuinely needs it, and explain why, rather than shipping something that drains a battery by lunchtime. Recommending cross-platform for a tracking app is how a project fails eight weeks after launch.
The mistakes that cost more than the framework choice
In practice, the native-versus-cross-platform decision is rarely what sinks a mobile project. These three are.
Testing on the wrong phones
Built and reviewed on a current iPhone, then deployed to warehouse staff carrying four-year-old Android handsets with cracked screens and 2GB of usable RAM. Ask for the actual device inventory in week one and test on the worst device in it, not the best.
Treating offline as a checkbox
"It should work offline" hides a week of decisions, and none of them are about storage. Two handsets, no signal, the same record edited on both — one of those edits has to lose, and someone has to be told which. Those conflict rules belong in the design document, agreed with you, not decided by whoever implements the sync loop. Sync is an integration problem wearing a mobile costume, and it fails the same quiet way — the queue stops draining, nothing crashes, and the disagreement surfaces weeks later in someone's reconciliation, which is the pattern behind why integrations fail silently.
No budget for the annual OS cycle
Once a year each store retires the SDK and API level it will accept builds against. Fall behind either and the store rejects your upload — including the urgent fix you were trying to ship, which is when most teams find out. This applies equally to native and cross-platform, and it is recurring work, not a one-off.
What actually drives the cost
Three things, in order of weight. One platform or both is the first and largest fork — cross-platform collapses it, native doubles it. Offline support adds a sync layer and a set of conflict rules that have to be agreed rather than assumed. And whether the backend already exists: it is usually the larger half of the work, and the part clients most often leave out of a budget. An app with nothing behind it is a form. If it has to be built, the same four decisions that set what drives the cost of a SaaS MVP set this half of your number too — it is the same build with a phone on the front. It also carries a monthly infrastructure cost from the day it deploys rather than the day you have users, and the lines that quietly inflate that bill are the ones in where cloud spend actually leaks.
We quote after a paid discovery that splits the mobile and backend numbers separately, so you can see which half is driving the total. Full detail, including the store submission process, is on our mobile app development page.
The questions that follow the framework decision
We built it cross-platform. Can we move to native later, and what survives?
The backend, the API contracts, the data model, the analytics events and the design system all survive — usually the larger half of what you paid for. The client does not: Dart or JSX screens do not become Swift and Kotlin, so budget a fresh build per platform for the interface layer, less the discovery and product decisions already made. A middle route fits most cases: keep the Flutter or React Native shell and write only the hardware-facing part — the Bluetooth session, the background location service — as a native module behind a platform channel. We build cross-platform apps with that seam in place from the first sprint, so a hardware requirement arriving in year two is a module swap rather than a rewrite. Rebuilding a whole app because one screen needs native access is rarely the cheaper answer.
How long does store submission actually take?
Review is the short part; the account state and the declarations are what move the date. Apple's App Review usually returns a verdict in a day or two, and Google Play is often same-week — slower for a developer account with no publishing history. Plan two weeks from code complete to live and that date holds. What buys you a rejection round: a privacy declaration that contradicts what the bundled SDKs actually collect, no working demo account for the reviewer, or no in-app route to delete an account once the app lets people create one. A new personal Play account must also run a closed test before it can go public, and that window cannot be compressed. So we settle who owns the developer accounts in week one rather than at code complete — an account that does not exist yet is the only part of this that can cost you a month.
What does keeping up with the annual OS cycle really cost?
Budget two to five days per platform per year for a small app with few dependencies, and two to three weeks for one leaning on Bluetooth, background location, a payments SDK or a map provider. Almost none of that is your own code — it is upgrading other people's libraries and re-testing every screen they touch. Both stores announce these deadlines well in advance, so we book the work into a sprint instead of handling it as an emergency: Google Play's target-API cut-off has fallen at the end of August every year so far, and Apple's minimum-SDK requirement usually follows in spring. Cross-platform does not spare you this and adds the framework's own major versions on top — a plugin whose maintainer has walked away is the version that costs weeks instead of days.
Does the app need a backend, and what does that add?
If the data outlives the handset or is shared with anyone, yes. A checklist that never leaves the phone does not need one; a driver app, a field service app or anything with a login does. What it adds is a system rather than an endpoint: authentication and roles, an API, a Postgres database, push delivery through APNs and FCM, file storage, separate environments, monitoring, and an admin console your own staff can open. That console is the first line cut from a budget and the first one missed, because without it support has nothing to look at when a driver rings in. Scope it as a backend build in its own right and price the running cost separately — it starts billing the month it deploys, not the month you get users.
Who decides what happens when two people edit the same record offline?
You do, in writing, before anyone writes the sync loop. We bring the options — last write wins, per-field merge, server-authoritative with client replay, or stopping and asking the user — and put each against a scenario from your workflow: the driver marks a job delivered while dispatch reassigns it, both offline. You choose per entity, because the right answer for a status field is not the one for a signature or a photo. Two mechanics we do not leave open: timestamps come from the server, not the handset, since device clocks drift and users change them, and the losing version is kept and visible rather than silently discarded.
How much device testing coverage is realistic?
Two or three physical handsets per platform, chosen to match the worst hardware in your users' actual fleet, plus a cloud device farm — Firebase Test Lab or BrowserStack — for the model and OS combinations that cover most of your installed base. We ask for that inventory before the estimate rather than after, because it changes the test plan and occasionally the framework choice. What we will not promise is every Android skin: Samsung's One UI, Xiaomi's MIUI and several others apply their own battery management, and an app with a background service behaves differently on each. If your users carry those handsets, say so early and we test on them rather than around them.
Related reading
Tell us who uses the app, and where they're standing.
Those two answers decide native versus cross-platform, the offline strategy and half the budget. An engineer replies within one business day with a recommendation and a range.
- Email — contact@canopussoft.com
- Phone / WhatsApp — +91 817 979 7732