Skip to content
Mobile6 min read

Native, cross-platform or web: deciding on what actually differs

The choice is usually argued on performance, which is rarely the deciding factor for the applications most organisations build. What decides it is which platform capabilities you need, what your team can maintain, and whether you can afford to be wrong.

Part ofMobile App Development

Cross-platform frameworks are now good enough that performance only decides the question at the edges — heavy real-time graphics, sustained camera processing, low-latency audio. For a typical business application showing lists, forms and detail screens, all three approaches produce something that feels fine. So the decision has to be made on the things that genuinely differ.

The four options, honestly characterised

ApproachStrongest atCosts you
Fully native, two codebasesPlatform capability, performance ceiling, day-one OS supportTwo teams, two backlogs, two release processes
Cross-platform compiledOne codebase with near-native feel, good capability accessA dependency on the framework's pace and direction
Web wrapped in a shellReuse of an existing web application, fastest to shipFeels like a website; store review scrutinises it
Progressive web app, no storeNo review, no store fees, instant updatesCapability limits, and the cost of discoverability

Start from the capabilities you actually need

This is the question that eliminates options fastest, and it should be answered before any framework comparison. Write the list, then check each item against each approach — specifically, not by reputation.

  • Background execution — location tracking, syncing or processing while the app is closed. Heavily restricted everywhere and the most common source of "this cannot be done as we imagined"
  • Hardware access — Bluetooth peripherals, NFC, biometric authentication, specific camera control
  • Platform integration — widgets, share sheets, deep links, watch companions, contact or calendar access
  • Offline operation — not a feature but an architecture; see the separate constraint it imposes
  • Push notifications — supported broadly, but the reliability and behaviour differ more than expected
  • Background file handling — large uploads and downloads that survive the app being suspended

Background execution is worth checking first because it is where product assumptions most often collide with platform reality. Both platforms restrict what runs when an app is not in the foreground, and no framework choice loosens those limits — a cross-platform app and a native app are equally constrained.

The shared-code figure is not the one quoted

Cross-platform proposals lead with a percentage of shared code. The number is usually accurate about lines and misleading about effort, because the unshared part is disproportionately difficult.

SharedNot shared
Business logic and data modelsPlatform permission flows, which differ meaningfully
Network and persistence layersPush notification setup and behaviour
Most screens and navigationBackground execution, per platform
Validation and formattingAny native module you have to write yourself
State managementStore submission, review responses and signing
Tests for all of the abovePlatform-specific bugs, which still need two devices

The team you have, and the team you can keep

This decides more real projects than any technical criterion, and it is frequently left out of the comparison entirely.

  1. Who maintains this in two years? An approach nobody on the team knows is a permanent hiring dependency.
  2. Can you hire for it locally? Native platform engineers and cross-platform engineers are different, differently priced markets.
  3. What does the rest of your stack look like? If the team is already strong in one language, sharing it lowers the ongoing cost materially.
  4. How many people will actually work on this? Two codebases with one engineer is a slow-motion failure regardless of the technical merits.

The last point is the practical one. Fully native is the strongest technical choice and it assumes enough people to sustain two codebases. Below a certain team size, choosing it means each platform gets half an engineer and both fall behind.

The cost of being wrong

A decision's quality includes how recoverable it is. These approaches differ sharply in what changing your mind later costs.

From → toCost
Web app → wrapped shellLow — mostly packaging and store work
Wrapped shell → cross-platformModerate — the web logic often ports
Cross-platform → nativeHigh — a rewrite, though the backend and models survive
Native → cross-platformHigh, and usually done for team-cost reasons rather than technical ones
Anything → anything, with users installedAdd migration: their local data has to survive the change

Defensible defaults

SituationReasonable default
Business app: lists, forms, notifications, an APICross-platform
An existing web app and no mobile teamProgressive web app first; wrap only if the store presence is needed
Heavy hardware use — Bluetooth, camera pipeline, sustained locationNative
Games and real-time graphicsA game engine, which is its own category
One engineer, needs to exist on both platformsCross-platform, without hesitation
Large team, platform feel is the productNative, with the team size to sustain it

The second row is the one most often skipped. An organisation with a working web application and no mobile engineers can frequently meet the actual requirement — usable on a phone, installable, sends notifications — without entering the store ecosystem at all. That is worth eliminating deliberately rather than by omission, because the store route adds a review process, a release cadence and an account dependency to everything that follows.

Questions

Is native still worth it over cross-platform?

For heavy hardware use — Bluetooth peripherals, sustained camera processing, low-latency audio, background location — and where day-one support for new OS features is a requirement. For a typical business application showing lists, forms and detail screens, cross-platform frameworks now produce something that feels fine, so the decision should be made on capability access, team shape and maintainability rather than on performance.

How much code does cross-platform actually share?

The quoted percentage is usually accurate about lines and misleading about effort, because the unshared portion is disproportionately difficult: permission flows, push notification behaviour, background execution, any native module you write yourself, and store submission per platform. Budget for two test devices and platform-specific bugs regardless — one codebase does not mean one platform to test.

Can I just wrap my website in an app?

Both major stores reject applications that are little more than a browser pointed at an existing site, and the rejection arrives after you have built it. A wrapper needs genuine platform integration — notifications, offline behaviour, native navigation — to be accepted. If you have a working web app and no mobile team, a progressive web app often meets the real requirement without entering the store ecosystem at all.

What makes switching approach expensive later?

Local data. Changing approach with an installed base means every user's on-device data must migrate, in an update that may be installed months late or skipped entirely — so a technical decision becomes a data-loss risk. Designing the local store as something exportable from the start turns that eventual change from an incident into a project.

Want this applied to your systems?

Most of what is described here begins as an assessment: a fixed-scope review producing a prioritised written report you can act on with any supplier.

Prefer email? hello@kornspire.com