What you will take away
- Cross-platform saves perhaps 60 to 70 per cent of the work, not 100.
- Flutter draws its own UI; React Native uses the platform components.
- Heavy device or graphics work is still native territory.
What you actually save
Business logic, networking, state and most screens are shared. What is not shared: platform-specific navigation conventions, permissions handling, push notification setup, store submission, and the tuning each platform needs to feel right. Budget for one codebase and two release processes.
That still makes cross-platform the correct default for most products. Two native teams cost roughly twice as much and drift apart in feature parity, which becomes its own ongoing tax.
The architectural difference that matters
Flutter draws every pixel with its own rendering engine. You get identical output on both platforms and complete design control, at the price of not inheriting platform behaviour automatically - when the operating system changes a control, your app does not follow until the framework does.
React Native renders real platform components. The app inherits native look, feel and accessibility behaviour by default, and the bridge to native code is where performance work concentrates. Recent architecture work has narrowed that gap considerably.
Flutter gives you your design on every device. React Native gives you the platform's design on every device. Which is right depends on whether your brand or the platform should win.
Choosing on team, not on features
- A team already fluent in React and TypeScript will be productive in React Native immediately, and can share logic with a web application.
- A team without a JavaScript background often finds Flutter cleaner, because the toolchain and widget model are consistent and self-contained.
- Heavy custom animation and precise brand-controlled interfaces favour Flutter.
- Deep integration with many native SDKs favours React Native, where the ecosystem of wrappers is broader.
When to go native anyway
Sustained camera or sensor processing, augmented reality, real-time audio or video manipulation, games, and anything where battery and thermal behaviour is a core feature. Also apps whose main value is deep platform integration - widgets, watch apps, complex background work.
A hybrid is legitimate and common: cross-platform for the bulk of the application, with one native module for the demanding part. That is usually cheaper than making the whole app native for the sake of one screen.
Practical delivery advice
Set up automated builds and store deployment in week one - manual release processes are where mobile projects lose their time. Test on real low-end devices, not only the newest simulator, because that is what most of your users hold.
Plan for over-the-air updates where the store rules allow, and design the app to handle being several versions behind. Some proportion of your users will never update, and the API has to tolerate them.