My company recently switched both our Android and iOS apps over from native to RN. The RN promoters promised all sorts of benefits about sharing code between platforms and how the performance would be as good as native, and how the UI would look like native, and none of that actually materialized:
- In the end, RN code is only something like 20% of our Android app. They weren't able to just "write once" and run on both.
- Instead of having 2 teams, an iOS and Android, now we have 3 teams, iOS native, Android native, and RN. And the RN team is split between iOS and Android. All sorts of additional complexity now.
- We still need a fully staffed Android specific team for everything that couldn't be done in RN.
- The performance difference vs. a native app is blatantly obvious.
- Now we just have organizational problems as the app has multiple teams/languages involved, different parts of the app are owned by different teams and manager chains, rather than just one team of people that own making a good app. RN teams can dynamically push code changes to production apps and we no longer have deterministic, reproducible builds.
- Now we have morale issues from the discontent from the team members that want nothing to do with RN.
- The UI, even though it's supposed to use native controls, just does not look and feel like native apps, there's so many little things that are strange/different.
- Our codebase is now dependent on a 3rd party platform and on a language that completely differs from how Google says that Android apps should be built. Why wouldn't we just build Android apps the way the Android team says we should? Is there going to be long term support for RN/JS?