My thoughts on React Native

kurtmcintire

Kurt McIntire

11.01.2019

The first six years of my engineer career was spent building mobile apps the native way, with Objective-C, Swift, and Java. Since I know how to build mobile apps natively, I didn't spend much time considering cross-platform mobile app technologies like React Native, Xamarin, and Cordova. Not only did these cross-platform technologies have a reputation of delivering sub-par mobile app experiences, I didn't see many job postings for companies needing these skills.

However, in 2017, I gave React Native a try at my current employer. I was initially skeptical of the technology, thinking that we wouldn't be able to deliver a strong experience for our customers. But I was wrong. Over the next two plus years we continued using React Native with great success. Being able to go deep in React Native and traditional native mobile development has given me good perspective on the technology's pros and cons.

Let's walk through a few hypothetical scenarios. First, we'll think of a situation where I am starting my own startup, with no mobile app code base or existing engineering team. Second, we'll explore a scenario where I am joining an existing engineering team that needs to build a brand-new mobile app.

Scenario 1, Founding a new startup

I can build mobile apps natively or with React Native. If I launched a startup where I needed to deliver an enterprise-grade CRUD application, I'd choose React Native. React Native allows me to write one Javascript codebase and deploy it multiple mobile platforms. Additionally, React Native is basically React.js, meaning I can share logic between my website and mobile apps. Finally, as I grow my startup, it's often easier to find Javascript engineers than find specialist native mobile app developers.

However, if in my theoretical startup, I need to build a video-intensive app, video game, or highly custom mobile app, I'd stick with native. React Native can be used to make performant applications sufficient for many types of businesses. However, when doing intensive data or graphics processing, maintaining the highest level of performance can be difficult.

Scenario 2, Joining an existing engineering team

If I were to join a startup consisting mostly of Javascript engineers, I'd likely choose React Native. In my experience, most React.js engineers can hop into a React Native code base an be productive within a day or two. This means that we can leverage more of our in-house talent when building the mobile code base, instead of only having a handful of engineers with the knowledge needed to contribute mobile code. The caveat to this is if we have to build a video-intensive app, video game, or highly custom mobile app.

And finally, if my engineering team consists of mobile native engineers, I'd stick with native. I would not try to teach native developers React Native. Any efficiency gains made by choosing React Native over native would be lost as engineers need to onramp with a new technology.

Conclusion

React Native is a strong tool worthy of consideration for most mobile app projects. It can speed up development times and let you ship apps to multiple platforms in a single code base. However, it is not a silver bullet. Depending on the type of app you need to build and the makeup of your current team, it may make more sense to stick with traditional native development. And please, don't make your native mobile app development team drop their current expertise and chase React Native.