Engineering7 min read·

React Native vs Flutter: How We Choose — and Why We Put It in Writing

React Native vs Flutter: How We Choose — and Why We Put It in Writing

The wrong framework decision at kickoff creates rework 18 months later. The decision logic we use — and why we write it down before the deposit is paid.

React Native: the right choice when your team has JavaScript expertise, when you are building a companion to a web app (shared logic, shared API contracts), when time-to-market is the primary constraint, and when the app's UI requirements are achievable without native-only platform APIs.

Flutter: preferred when pixel-perfect UI consistency across iOS and Android is the primary design requirement, when your backend team works in Dart, when the app has complex animations that need to run at 60fps consistently, or when you need to target web and desktop from the same codebase.

The cases where native is actually necessary: device-specific hardware integrations (custom camera pipelines, ARKit/ARCore features), performance-critical background processing, apps where the UI must be indistinguishable from a native system app. These are rare for most commercial projects.

Why we put it in writing: a verbal framework recommendation disappears in the noise of a kickoff call. A written justification creates accountability — you can refer back to it 18 months later and verify whether the recommendation was sound. We commit to our recommendation; you can hold us to it.

The practical effect: we have never had a client ask us to switch frameworks mid-project when the initial recommendation was written and signed off. The discipline of committing in writing filters out weak recommendations before build begins.