React Native is dead, long live React Native

A lot of rumbling and commotion on the Twitter-sphere and tech blogs today. Last night, Airbnb released a five-part series of blog posts on Medium covering their experience and findings using React Native, concluding with the announcement that they’re saying goodbye to React Native by the end of this year.

“Due to a variety of technical and organizational issues, we will be sunsetting React Native and putting all of our efforts into making native amazing.”

This news comes as quite the surprise - as Airbnb has been continuing its efforts in pushing development on open source projects and workflow-tools for React Native, i.e. the Lona announcement last month at React Europe - but before getting all caught up in doomsday-tweets and cross-platform rants…

Airbnb was one of the first major Silicon Valley start-ups to adopt React Native in 2016, which was shortly after it was released mid 2015. At that time, Airbnb had a native iOS and Android stack on mobile and a React stack for web. Given the good experience with React, they decided to embrace React Native to speed up their native development. The implication of this migration (which didn’t become apparent immediately) was that it created a lot of overhead. They had to invest a lot of extra effort in writing supporting functionality (e.g native bridges, wrapper code, ...) in order to be able to support (existing) native functionality through Javascript. As well as maintaining these libraries for every iOS, Android & React update. Next to a technical challenge, it also proved to be an extra organisational challenge for them.

As their original intent was to ‘move more quickly as a company’, using React Native is no longer a viable strategy for Airbnb due to multiple reasons. Does this mean we should turn our backs to React Native? We think not. We can relate to a lot of the issues mentioned in the blogpost. But the scale at which Airbnb operates (for reference, they have 100 developers working on their mobile app, at In The Pocket, a product team usually consists of 4-10 developers) and the depth of their investment together with the product & UX requirements of their application are a big reason for their decision to abandon React Native. As with any tool, you should know/anticipate for its limitations.

“Hybrid Apps Are Hard.”

Although React Native is a Javascript framework, most React Native developers know at least two platforms (Android, iOS, React Native). While working with React Native applications at In The Pocket over the last year-and-a-half we have learned that knowing common native patterns (like navigation..) is a valuable asset, and at some point you’ll eventually have to introduce some native parts in your codebase. And yes, this brings extra complexity - but in the end, we really want to stick to Javascript as much as possible - albeit with Native integrations under the hood.

“...we wound up supporting code on three platforms instead of two.”

At Airbnb they have 220 screens in React Native, but additionally they have about 880 native screens per platform, which basically means they only have 20% functionality living in React code. “Many of the difficulties we encountered were due to the hybrid model approach we took” is also one of the lessons we learned from combining native and React code in the projects we work on. However, these difficulties shouldn’t be a setback when choosing to use React Native as a platform.

“When everything came together, which it did for many features, the iteration speed, quality, and developer experience matched or surpassed all of our goals and expectations. At times, it really felt like we were on the verge of changing the game for mobile development.”

Even though Airbnb has now decided to ‘sunset’ React Native in their mobile products, this should not have a negative impact on the future of React Native. Airbnb’s major open source projects (Lottie, react-native-maps,..) that we use on a daily basis are being handed over to the React Native Community. Having read all five blog posts we can safely say that React Native was no longer a fit for the scale of Airbnb’s applications when considering maintainability and sustainability. In the end, they have proven that React Native is an extremely powerful framework that can handle and scale big production apps. But like any tool, it isn’t always the right one for the job.

Here at In The Pocket, we still believe we’re at the dawn of some great evolutions in mobile app development when talking about React Native. The community is ever so active, with Facebook announcing they’re working on a big-scale rearchitecture to make the framework more flexible and integrate better with native infrastructure, and companies like Expo making big breakthroughs creating libraries like react-native-gesture-handler. We are continuing our efforts to bridge the gap between development & design, using tools based on React components, improving our workflow and iteration speed, and by doing so create more value for our clients.

React Native is not dead.

Thanks to @bitcrumb, @jodierckens & @thomasmons for helping me write this post.