If you have recently considered developing a mobile application, you have likely heard of React Native. Developers either love it or hate it. But here is a short guide for those are looking to make a business decision whether to use React Native or not bother.
Actually, I am going to save your time and jump right to my conclusion: the only good reason to use React Native is to save money in the short term.
Now, here is a long story...
A year ago I talked about the pros and cons of cross-platform VS fully native mobile development in general. Since then React Native proved itself to be the best cross-platform iOS/Android solution available.
"Hybrid" HTML5 solutions like Cordova or Ionic are not even worth bothering. They are extremely slow. Why spend time building something, that doesn't look good and work like a total crap comparing to native apps?
Xamarin was invented, so .NET developers could build mobile apps for enterprise products they were working on. If you represent a big corporation and have hundreds of .NET developers in India or Eastern Europe working for you, you should definitely consider Xamarin.
Flutter is promising, but is still at very early stages of development. NativeScript is just like React Native but less mature and less supported (good luck finding someone who actually knows it).
So React Native is the best, but it is "the best of the worst" kind of "best". The simple truth is: there is no and there is never going to be any cross-platform iOS/Android framework that will allow building applications with the same quality as a fully native solution. Here are the benefits you can expect to get if you decide to go with React Native on your project:
Around 30% savings in development cost compared to building two applications separately for iOS and Android. This number is approximate and will vary from project to project, but it will never be even close to 50%. Developers will still have to test on both platforms, deal with quirks and limitations on both platforms and adapt UI to both platforms.
Faster prototyping. It is arguable, but from my experience it is faster to build something with React Native, comparing to native. Also, this "something" will work on both iOS and Android.
The same codebase for iOS and Android is a pro in its own right. A good looking application will end up with a bunch of
if (Platform.OS === 'something')here and there in UI layer. But at least business logic can be easily reused and covered with unit tests. To get this advantage you'll need a well-designed architecture.
There may be some other advantages for specific cases, but universally that's pretty much it. Now here are the potentially bad things:
Increased support cost. React Native is still technically not "released" (framework versions still start with "0."). This means API is subject to incompatible changes after each release and constant maintenance work is required just for that. This doesn't sound that bad if you only think about the core framework, but there are also third-party dependencies, which your developers will be tempted to use. That complicates things by an order of magnitude.
It is still hard to find good React Native developers. Building high quality, maintainable code with React Native is challenging. For various reasons, an average React Native developer is generally less skilled than a native developer. (Factorial Complexity, however, does have some good engineers with relevant experience. Contact us for more details).
If you want a truly native look and feel for your application, you will eventually end up spending as much as you would if you started with native (or even more than that). Building React Native application always involves some trade-offs. Developers will either go with less sophisticated UI/UX decisions or build the same thing twice for iOS and Android. Poor look and feel may deter users and they will go to your competitors.
As it may be expected, there are too many variables to say for sure if your project would win or lose from using React Native in the end. In general, you should definitely consider React Native if:
- You are really tight on money right now (but who isn't?).
- You are ok with paying your development team for regular maintenance.
- You are building a very small prototype or MVP (like a maximum of 6 weeks of work).
- It is really crucial for your product to have both platforms from the very beginning (otherwise, just build MVP for one platform, then port to another one - in many cases this will be at least as cheap as React Native).