As smartphones are increasingly becoming people’s primary computing device, organizations are seeing more demand for mobile apps. An important step in developing a successful mobile product is choosing between a Cross-Platform or a Native solution. As we are approaching 2021 and organizations are planning for new product builds, technology selection is an important consideration. At Quantum Mob we believe that the benefits of cross-platform development with React Native (RN) far outweigh the drawbacks. Let’s review why we believe this to be the case:
Organizational Considerations Talent pool — The talent pool of web developers is far greater than that of native iOS/Android developers. Web development experience translates to React Native very well.
One codebase — Significantly reduce development time, ensure correctness for important business logic and maintain feature parity across platforms.
Largest platform support — Seamless cross-platform experience between iOS, Android, Web, smart TVs, embedded systems, and desktop.
OTA — Over-the-air updates for critical patches.
Drawback — Accessibility features must be deliberately implemented on React Native, whereas with Native they would be included for free.
Drawback — App startup time is somewhat slower than native, and app download size is larger.
Developer Considerations Reload time — Hot reload and build times are many times faster than native
Great community support — third party libraries, guides / tutorials, and documentation.
First-class Typescript support — TS has matured significantly and is comparable to the type systems in Swift/Java.
Developer-friendly — Engineers love React’s simplified component lifecycle and declarative UI.
Open source — Developers can contribute fixes and fork React Native, and even port to new platforms.
Drawback — Slight inconsistencies in styling and behaviour between iOS and Android.
Drawback — Steep learning curve for those not familiar with the toolchain:
“Working with a React Native app requires installing and configuring several system-level dependencies (e.g. Homebrew, Node, Yarn, Ruby, Bundler, XCode, XCode Command-line Tools, XCodeGen, OpenJDK, Android Studio, Watchman, React Native CLI, TypeScript), synchronizing NPM packages (Javascript and native), synchronizing assets (e.g. fonts), managing a local Metro server with simulators/emulators, and connecting to a standalone debugger." - The Coinbase Blog
Drawback: While the community support is quite extensive, official documentation is lacking. However the React Native team has recently made significant improvements to their documentation, demonstrating their commitment to the project
Performance is another common concern with React Native, but is mostly unfounded. Generally, React Native apps are going to be more computationally expensive than an equivalent native app. However, as devices become more powerful, this becomes less of an issue. Apps that follow best practices will be plenty fast without deliberate optimization. With React Native components compiling into native iOS and Android components, the bottom line is that there are very few cases where it is impossible to achieve performance comparable to a native app.
However, following best practices is easier said than done. Having a development team that is familiar with React Native can make a world of difference in outcomes. The most significant drawbacks - poor official documentation, steep learning curve and platform inconsistencies are easily overcome with strong organizational support.
Unless any of the above drawbacks are deal breakers - say, for instance you are targeting low budget, older devices with a performance-sensitive application - React Native provides many significant benefits that should not be overlooked.
Cross-Platform Convergence We also believe that the future of React Native is bright. Competitors in the cross-platform framework space such as Cordova, Phonegap, and Ionic are being abandoned in favour of React Native, strengthening the already-great community. After 5 years of continuous improvement, React Native has proven itself to be a mature framework that is ready for large-scale investment.
Industry adoption continues to improve with big names like Shopify, Walmart and Discord choosing React Native. Notably, Microsoft has made a significant investment in React Native despite acquiring rival framework Xamarin in 2016. Their mobile Office suite is written entirely with RN, and are now supporting React Native on Windows.
React Native has matured significantly and is widely considered the front-runner among cross-platform frameworks, but a new cross-platform competitor has emerged and deserves to be investigated in depth: Google’s Flutter.
What about Flutter? Since being released in 2018, Flutter has steadily gained popularity, appearing just behind React Native in Stack Overflow’s annual developer survey of most wanted frameworks. After much deliberation, we think that Flutter is very promising, but is not quite ready for prime time.
Strengths of Flutter Flutter is undeniably strong in a few areas. Their first-party UI component library is gorgeous, extendable and backed up by solid documentation. React Native relies mostly on the third-party community for UI component libraries, and this results in subtle inconsistencies in behaviour and design. Also, we can’t talk about Flutter without mentioning that it does indeed compile down to native code - meaning your app will be just as fast as native. Learning curve is also worth mentioning. For developers not familiar with web technologies, Flutter will be easier to pick up. This is mostly due to the complexity of the React Native toolchain, as we discussed earlier.
Strengths of React Native In the hands of an experienced team, however, React Native easily outshines Flutter. Platform support is a huge gap between the two - Flutter currently only supports mobile, while React Native supports mobile, web, and desktop. It should be noted that web and desktop support for Flutter are currently in beta and alpha, respectively.
The React Native community is much more mature — you will be able to find solutions to the problems you are facing much quicker. The larger Javascript community is also one of the biggest of any programming language, meaning we can leverage third-party libraries and general JS resources. This means developers can avoid spending time re-inventing the wheel.
Finding experienced Flutter developers will be a challenge. It is still relatively new, and is written in an uncommon language (Dart). The supply of React Native developers is far greater, especially if you include general web and Javascript experience.
Looking to the Future Long-term support is another topic where React Native has proved itself. After being around for 5 years, it has gained widespread adoption by organizations large and small. Facebook has proven its commitment to the framework by continuing to address the community’s issues. Over the last year, we have seen a documentation overhaul, improved error screen, version upgrade helper tool, and improved hot reload in addition to general fixes and improvements.
Google has done a good job supporting Flutter so far, but it has only been nearly two years since their 1.0 release in December 2018. We also can’t ignore Google’s reputation for abandoning projects that fail to gain traction. Without Google, community support is nowhere near strong enough to carry the project forward, which is a risk for any organization.
The Verdict For inexperienced developers who prioritize the native feel of Flutter’s UI component library and are building an app that is simple in scope, Flutter may be a good choice. However, experienced web developers will feel right at home with React Native. For nearly all purposes React Native is more powerful, flexible and extendable than Flutter. Right now, Flutter is still a bit of a gamble, while React Native has proven itself to be a tried-and-true approach.
If you’re considering React Native for the next project in your organization, be confident in knowing that other organizations have gone through the adoption journey and are loving it.
For long term support, access to talent, cross platform, and continued growth, we think it’s an easy win for an organization to work with React Native in 2021.