Frameworks decision

Should I rather use React-Native or Flutter in 2020 for my new enterprise projects?

Which framework will best suit for your next enterprise-grade project? Does this choice really matter in fact?

👋🏻 This article is about entreprise grade projects, with high stakes and strict deadlines. I’ll make another one for side projects will fewer impacts and stakes in the next weeks with a more experimental approach.

Since 2016, thanks to my experience as a Tech Lead @ Kaliop I had the chance to make beautiful React Native apps, especially for great events such as the official 🎾 Davis Cup Davis International Tennis Tournament app. I learned a lot and I’ve got many occasions to compare this technology with the famous and fast Growing Flutter.

Also, my friends at Kuzzle and especially Luca Marchesini gave me nice feedback on some projects with Flutter. We are coworkers and we use each of us a different framework as we always love to experiment with new things. Given that we can make relevant comparisons.

Here is a quick brief on 3 key points to help you capitalize on the proper technology for your needs.

React native bring Over The Air Updates (OTA)

The major difference by the time I’m writing those lines is made by react-native specificity to use scripting over compiled language.

Thanks to that we can serialize into a string (aka stringify) the Javascript code and host it on a remote server! Currently, there is no robust solution that provides that with Flutter, which is currently compiled to native code at build time.

This feature is the real game-changer at the moment between RN and Flutter.

One of the most important metrics on mobile development is Retention, which is the capability of an app to keep users using it and reduce uninstallations.

❓ What’s the problem with standard native app release behaviors?

You cannot guarantee user updates from app stores. You can pray, you can maybe try to trigger them using push notifications, but if they don’t, good luck… Enjoy bad notes on the app stores.

Generally, updates are running during the night, on Wi-Fi only, expecting to be at home and not in a foreign country but this is not always the case…

When someone leave and uninstall your app, you can be 90% sure the user will not come back further.

Using OTA you can make your app behave like a website and release new version and hotfixes instantly to a portion, or your whole user base.

OTA also has some benefits characteristics:

You can maintain less versions in production, or maybe only one. Which is a major pitfall of mobile development that requires the backend to be backward-compatible with the previous versions of your app.

Less version means less code to manage, which results in an average enhanced maintainability.

Quickly make hotfixes, enjoy safe progressive rollout on short deadline apps, such as event applications that are designed for short-timing events.

OTA is a cloud (maybe not in the future) service powered by many tools, but most used services are Microsoft Codepush and Expo.io.

You should definitely give it a try.

🧘🏻‍♀️ Adoption, maintainability, and stability

One cool thing with react-native is that it inherits from the react-web ecosystem and practices. React Native leverage web best practices with UI code split in kind of stylesheet (or CSS-in-JS styles).

React has a clear separation from design and business logic, where Flutter can be complicated to use with git-based service such as pull requests, that doesn’t provide helpers currently as IDEs are doing.

While Flutter widgets are fat and hard to read, JSX close to HTML markup and is easy to read.

At Kaliop most developers come from a web background, using React native we can easily add/remove developers to a project as reinforcement if required, even if they never did mobile development. This can be done because most developers are already familiar with Javascript and Web practices in our company.

Also, the job market has more volume in Javascript than Dart, Javascript developers are commons nowadays and you won’t have big issues finding human resources.

Flutter is pretty young and will keep improving, especially on patterns and libraries. Static compilation is also a great thing as you will catch errors upstream, where some type of errors can persist in Typescript. Also, performances are better in Flutter.

You might also see my detailed comparison from a real project experience perspective:

🔮 Future

Javascript community & ecosystem is strong and resilient, many great companies are using react-native for production applications: Microsoft, Uber, Tesla, Discord, Instagram or Facebook.

React Native Architecture is coming to a new version in 2020. This new paradigm will improve performances and is a massive effort Facebook undertook to address some long-standing issues of this cross-platform mobile solution.

New React Native Architecture, read more at https://formidable.com/blog/2019/react-codegen-part-1/

Dart and Google are the next step to Google Fuschia, the new Google Mobile Operating System. They will for sure optimize Flutter to play with it.

Also, Flutter is experiencing Web support, as React native already does.

Both platforms will be the two mastodons in the new years.

🚛 Takeaway / TLDR; 📦

Besides OTA updates things and maturity, which are the major differences between those two tools, you should choose the framework according to your team preference and skills.

If you’re coming from a web background, already have a web team, especially with frontend frameworks such as ReactWeb, you’ll definitely start with a great advantage on React Native. You could also bring reinforcement in an easy way as a single React Native developer (or native one) is for most projects enough to handle mobile-focused specificities in a react native team such as Notifications or native code exceptions.

Flutter achieves 120 FPS on some devices, even if it aims for 60 FPS, as it is better optimized.

But are react-native performances bad?

— NO! Myth! They don’t. They are close to native and almost full time 60 FPS in well optimized.

If you’re coming from a native background and love static typings out-of-the-box, then Flutter might be a good choice. It is also more performant and the navigation is fully native. You don’t have to ask yourself « will it work on both platforms? » It just works out-of-the-box.

There are many companies with a lot of experience that are already specialized in react-native and a nice community that can bring supports. In the case of Flutter, this is pretty recent.