Native App vs React Native App - What Should You Choose?
I have worked with both native iOS and Android apps and React Native apps. I have also worked for companies that have switched between the two. In short, going for the native approach requires you to develop two separate apps with, in turn, requires that you have both iOS and Android developers. React Native is a web technology that allows web developers to develop a single app that works on both platforms.
From the outside, React Native seems like a no-brainer to go with, given its cross-platform capabilities. In reality, the choice is very dependent on your organization and switching costs from one to another can be huge, so you might want some knowledge to back up the decision. Here's the blog post that I wish existed before making decisions on what to choose.
When to choose Native
If you're targeting a specific platform, native development is what you want to go with. We could end this discussion right here, as the disadvantage of no shared code between platforms is ignorable. If you're targeting both platforms, there are a few more things to take into consideration.
The native iOS and Android platforms are opinionated in how you develop your apps, ranging from the tools you use for navigation to how you implement dark mode in your app. You have a ton of official tools and APIs available that are supported by the platform vendors. You have most of what you need to get the app off the ground and to start working on the product, rather than dealing with platform requirements. Having opinionated platforms is an advantage if you have many different people working on your project since they can be very efficient from the first day by being familiar with the platform standards.
Going native comes with full control of how much you abstract from the underlying platform and, thereby, the performance you achieve. If you haven't written any terribly inefficient code, you should expect a decent performance without any need for extreme performance tuning. This aspect of native apps, compared to React Native, will be most prominent when you're running on relatively slow devices.
You should choose native, if:
- You are targeting a specific platform
- Decrease time for developers new to project to be efficient
- You want full control of performance
When to choose React Native
The biggest advantages of React Native are:
- Being a web technology, allowing for the migration of existing web developers to your project, especially if they're already familiar with ReactJS.
These two advantages are very dependent on your organizational setup. In the right setup, React Native is often the most cost-efficient approach, as you develop one app that works on both platforms. If you have web developers, and maybe even an existing ReactJS codebase to reuse code from, you will beat native apps in time-to-market.
These advantages come with a few hidden pitfalls in larger projects. The most prominent one is that, inevitably, you're going to deal with the underlying platforms, for instance, to bridge any gaps in functionality. Unless you're confident in both iOS and Android, you risk introducing unforeseen issues or doing a lot of troubleshooting. This has ultimately led companies, such as Airbnb, to move off of React Native.
The companies I've seen succeed with React Native in large, enterprise apps have set up a separate core native team to deal with the native aspects of the app. That will go a long way when the React Native platform-agnosticism starts to peel off.
React Native is limited in what you get out of the box, so you might find yourself spending excessive amounts of time laying the foundation for the app. You either decide on which external libraries to use and what you'll implement yourself. The choice of libraries to use for navigation, HTTP communication, etc. is all up to you. Someone who wants a highly custom and flexible application might benefit from not using an opinionated framework.
React Native and other hybrid options are, by nature, an abstraction on top of the native platforms and hardware. As a result, some control is lost when it comes to performance. Unless you want supreme performance at all costs, this might not be an issue for you. In my experience, it sometimes requires more effort to keep high performance compared to native code. I've seen very complex React Native code that was written to achieve smooth animations, in an attempt to run the code on the native thread instead of the usual JS-thread.
Overall, React Native is implemented in a fairly efficient way. React Native and native can be used efficiently or inefficiently, and that will honestly have a much bigger say on how an app performs.
You should choose React Native, if:
- Time-to-market and rapid development is a major concern
- You have many existing web developers and perhaps few native developers
- You want to reuse large parts of existing ReactJS codebase
Making the decision whether to go with native iOS and Android or React Native is very much about the fit in the organization. Whether you're a startup and mostly concerned with releasing an app for both platforms in the lowest amount of time while keeping costs low, React Native is probably your weapon of choice. Perhaps you're a larger organization where high performance or onboarding speed of new developers is a priority, then native is likely the way to go.
There are, of course, other things that play a role in the choice of technology. It's not as black and white as depicted here, but I've done my best to highlight the key points of both sides you should consider before making the decision.