
Almost every mobile project starts with the same question: native or cross-platform? A few years ago this was a real trade-off — cross-platform frameworks were noticeably rougher around the edges, and there were good reasons to default to native. That gap has narrowed a lot, and the question that actually matters now is rarely about raw performance.
What we ask before recommending either
The first thing we look at is how much the app depends on device-specific capabilities — deep camera integration, background processing, complex animations tied to platform-specific APIs, or hardware features that only get first-class support on one OS at a time. The heavier that dependency, the stronger the case for native, because you're otherwise fighting the abstraction layer instead of using it.
The second is team and budget reality, which matters more than most clients expect going in. Building natively means maintaining two separate codebases — Swift for iOS, Kotlin for Android — with two teams, or one team context-switching between platforms. That's a real ongoing cost, not just a launch cost. Cross-platform frameworks like Flutter or React Native let one team ship to both platforms from a single codebase, which shows up directly in maintenance cost over the app's life, not just development speed at launch.
Where the decision actually lands
For most business apps — a service booking app, an internal tool, a loyalty or e-commerce app — cross-platform is our default now, specifically because the UI is mostly standard components and the maintenance savings compound every time there's a feature update. We've shipped several Flutter apps that are functionally indistinguishable from native in day-to-day use, and the client gets one codebase to maintain instead of two.
Where we still push clients toward native: apps built around AR/VR features, anything doing heavy real-time audio or video processing, or apps where a few milliseconds of animation smoothness is genuinely part of the product experience — a gaming app, for instance. In those cases the abstraction layer costs more than it saves.
The honest version of this advice is that the framework choice matters less than most people think, and the team's familiarity with whatever you pick matters more. A cross-platform team that's shipped a dozen Flutter apps will out-execute a native team building their first app in a new language, regardless of what the benchmark charts say. We'd rather match the tool to the team than the team to whatever's trending.
The part clients underestimate: app store review
One thing that surprises clients regardless of which route they pick is how much app store review adds to the timeline, and how little control anyone has over it. Both frameworks package down to the same native binaries the stores review, so this isn't really a native-vs-cross-platform issue — but it's worth planning for either way. We build in review time as a fixed buffer on every mobile launch now, after one too many clients assumed “done building” meant “live tomorrow.”
We also test on real, older devices before submission, not just simulators or the newest phone on the market. A layout that looks perfect on the latest flagship can break in small but visible ways on a three-year-old mid-range Android phone, which is still what a meaningful share of any general-audience app's users are actually holding. It's a cheap check that catches an embarrassing number of last-minute surprises.
















