3 min read
Native, cross-platform or web? A decision guide
There is no universally right answer, only trade-offs. Here are the questions we use to choose a mobile stack with clients.
“Should we build native or cross-platform?” is one of the first questions we hear on mobile projects. The honest answer is it depends. That’s only useful if we are clear about what it depends on, so here is the framework we use with clients.
Start with the product, not the framework
Before comparing tools, we answer five questions together:
- How deep does the app go into the device? Heavy use of the camera, Bluetooth, background processing, widgets or platform-specific UI patterns leans towards native.
- How much of the experience is content and forms? Apps built mostly from lists, forms and dashboards are a strong fit for cross-platform.
- Who will maintain it? A team fluent in TypeScript will move faster with React Native. A team with existing iOS and Android engineers may prefer native.
- What are the performance constraints? Most modern cross-platform apps are fast enough. Animation-heavy, real-time or graphics-intensive apps deserve a closer look.
- Does it need to be an app at all? Sometimes a well-built progressive web app covers the need at a fraction of the cost.
The options at a glance
| Factor | Native (Swift / Kotlin) | Cross-platform (React Native / Flutter) | Progressive web app |
|---|---|---|---|
| Codebases | Two | One (plus small native modules) | One |
| Platform fit | Best | Very good | Good, browser-limited |
| Device APIs | Full, day one | Most, via modules | Limited on some platforms |
| Store distribution | Yes | Yes | Optional (some stores) |
| Updates | Store review | Store review, plus over-the-air for JS | Instant |
| Relative build cost | Highest | Medium | Lowest |
Native
The best possible platform fit and day-one access to new OS features. The trade-off is two codebases, two sets of skills and two release pipelines to fund and coordinate.
Cross-platform
One codebase for both platforms, with native rendering and the ability to drop down to native code where needed. This is our default for most business apps, because the cost savings are real and the quality gap has largely closed. React Native suits teams already invested in React and TypeScript; Flutter suits teams who want pixel-identical UI across platforms.
Progressive web app
Installable, fast and instantly updatable, with no store review. It’s limited on some device APIs and less visible in app stores, but it’s ideal for internal tools, field forms and content-led products.
Look at the total cost, not the first release
The first release is usually less than half of what an app costs over its life. Before deciding, consider:
- Maintenance. Every OS release brings API changes and new review guidelines. With two native codebases, you pay that cost twice.
- Feature parity. Keeping iOS and Android in sync takes deliberate effort; a shared codebase makes it the default.
- Hiring. Check which skills you can realistically hire and retain where your team lives.
- Shared logic. If you also have a web product, a TypeScript stack can share validation, API clients and design tokens.
Common myths
- “Cross-platform apps feel non-native.” Modern frameworks render native components. Poor UX usually comes from ignoring platform conventions, not from the framework.
- “Native is always faster.” For typical business screens, users can’t tell the difference. Profile the hard parts before deciding.
- “A PWA can’t be a real product.” Many successful products run as PWAs. The question is whether you need deep device access or a store presence.
Our rule of thumb
If the app is primarily business logic and UI, we recommend cross-platform. If it’s primarily hardware, graphics or deep OS integration, we recommend native. If it doesn’t need to live on a home screen, we question whether it needs to be an app at all.
Whatever we recommend, we put the reasoning in writing, so the decision can be revisited as your product grows. If you are weighing these options now, we’re happy to help you think it through.