- Instead of 2 platforms to support, we now have 3
- Code that's shared across teams is difficult to share with the JS teams and vice versa. Consistency between native and RN is poor.
- Adding JS to the codebase exploded our dependency graph. One feature team introduced over 700 (!) dependencies via npm, which brings me to:
- Enforcing code/quality standards is difficult. Same app, completely different tech stacks
- Educating JS developers about ensuring compatibility with native dependencies is an ongoing expense
- Massive new attack surface area is now exposed via the increased dependencies (see https://hackernoon.com/im-harvesting-credit-card-numbers-and...)
I can go on. I think it's actually a super cool and ambitious technology. I had the opportunity to hack on some of the internals as part of an exploration to see how easy it'd be to share our native UI components with it, and that was pretty darn fun. It's just very, very poorly suited for integration with an existing large codebase, and decidedly not a miracle solution.
If I were bootstrapping a startup with no existing codebase and needed to target web, Android and iOS it'd be a no-brainer to use RN, but that's a quite different scenario.