Most senior devs have heard this pitch: build once, ship everywhere. It sounds rational. It rarely plays out that way.
Where the myth starts
The assumption is that Flutter or React Native eliminates platform-specific work. In practice, you still write platform channels for camera access, push notifications, and background tasks. The shared layer handles UI. The hard parts stay native.
What actually takes the most time
Edge cases on older Android devices and iOS version fragmentation eat more hours than most estimates account for. A team that chose React Native for a fintech app I reviewed spent roughly 40% of their sprint time on platform-specific patches. That was not in the original scope.
When native is the quieter choice
If your app relies heavily on device hardware, animations tied to 60fps rendering, or deep OS integration, native Swift and Kotlin are not the expensive option. They are the option that does not accumulate invisible debt over 18 months.
The real tradeoff nobody names
Cross-platform saves money at the start. Native saves credibility later. Neither is wrong. But treating cross-platform as a default rather than a deliberate choice is where teams get into trouble.
- Audit your feature list for hardware dependencies before picking a stack
- Check whether your team has actual native debugging experience
- Factor in App Store and Play Store review cycles separately
The myth is not that cross-platform is bad. The myth is that it is simpler.