All insights

Mobile · Strategy

Flutter, React Native, or Native? How We Actually Choose

We ship apps with all four stacks — Swift, Kotlin, Flutter, and React Native — so we have no framework to defend. This is the decision process we walk through with every client, including the questions that matter more than the technology.

Start from the product, not the framework

The platform question is usually asked backwards — "should we use Flutter?" — when the productive question is "what does this product need from the platform?" A handful of product facts decide most cases before any framework comparison begins:

  • How deep does the app reach into the platform — background processing, Bluetooth, widgets, watch apps, camera pipelines?
  • Does the product's success depend on native look-and-feel, or on a strong brand design of its own?
  • What team will maintain this in two years — yours, ours, or one you'll hire?
  • How much budget and time exist for the first version — and is there truly a business case for both platforms at launch?

When cross-platform wins

For most product startups and business apps, one codebase for both stores is the economically correct call: near-halved development effort, one team, features landing on iOS and Android simultaneously. Invoice Guru is a typical case — an invoicing product for tradespeople has no requirement that justifies paying for two parallel native codebases.

Within cross-platform, our default is Flutter: one rendering engine drawing identical UI on both platforms, strong tooling, and consistent performance without a JavaScript bridge. React Native earns the nod when the client's context favors it — an existing React/TypeScript web team who will co-own the app, or a codebase and hiring pool already invested in the React ecosystem. Both are proven; the tiebreaker is almost always the humans around the project, not benchmarks.

When native is worth double the codebase

Native Swift and Kotlin remain the right call in specific, recognizable situations: apps that live deep in platform APIs, products where instant adoption of new OS features matters, performance-critical media pipelines, and — frequently overlooked — organizations whose existing teams and codebases are already native. Crew Call ran as two native apps, Swift and Kotlin, and our embedded developers worked in that idiom because that was the product's established reality.

The cost is honest: two codebases, two skill sets, every feature built twice. When a product genuinely needs what native offers, that cost is justified. When it doesn't, it's an expensive way to feel rigorous.

The advice we actually give

Our FAQ states it plainly: we work with all four stacks, so we recommend what fits the product — not what we happen to sell. In practice that produces a simple pattern: cross-platform (usually Flutter) as the default for new products, React Native when the client's team gravity points that way, and native when the product's platform demands or the organization's existing investment make it the honest choice.

The most expensive mistake isn't picking the "wrong" framework — all of them ship excellent apps. It's picking one for reasons that have nothing to do with your product: hype, a single developer's preference, or a decision nobody revisited when the product's needs changed.

Takeaways

  • Ask what the product needs from the platform before asking which framework to use.
  • One codebase for both stores is the economically right default for most business apps and MVPs.
  • Choose between Flutter and React Native by team context and ecosystem gravity, not benchmarks.
  • Pay for native when the product lives deep in platform APIs — or when the organization already does.
  • Every framework ships great apps; the expensive mistake is choosing for reasons unrelated to your product.

Building something where this matters?

This is how we work on every project — mobile, web, and AI. If you want a team that reasons this way about your product, let's talk.

Get a free estimate