Fact: React and React-Native have popularized some radically productive changes to developing complex stateful UI-driven software.
Fact: Despite the hype/promise, React will not let you develop once and seamlessly deploy across iOS, Android and Web.
Fact: Dropbox, AirBnB and other companies have given up on React and gone back to pure native development.
Before you snicker, know that I’ve been programming for fun since 1981 and professionally since 1988. In that time the same story has played out time and time again: some “miracle” technology appears that promises to dramatically reduce developer costs, people get excited, massive investments are made, expected savings aren’t realized, disillusionment sets in and cynicism darkens the skies until another new technology promises salvation. Wash, rinse, repeat.
In the 90's Microsoft created a cross-platform library for Mac and Windows. Great effort, but poorly received. OOP promised all sorts of benefits, many of which are now being questioned.
These technologies (and many others) did “work” in so far as they often shielded the developer from substantial effort and/or complexity that would have slowed them down and even rendered some efforts unfeasible.
All of these technologies “failed” because of a simple truth. It’s not because they inevitably introduce their own layer of bugs (although that doesn’t help). It’s because non-trivial software (which includes features like asynchronous processing, cloud access, state persistence, rich data models and fancy user interfaces) is very, very complicated.
More to the point, this complexity cannot be eliminated. It can be encapsulated or shifted but that just pushes it out of the open and into dark, hidden recesses where it festers and waits to attack…
And when complexity which has been hiding suddenly attacks it tends to be far more virulent than when it was exposed to the light of day all along.
Panaceas Are Just a Different Hell
Think of it this way: if a developer would normally operate at a “50” level of day-to-day complexity, and uses one of these technologies to help them operate at a “10” level of day-to-day complexity, then when that complexity can no longer be hidden and lashes out it will tend to do so at a “100” or “200” or even greater level of complexity. In fact, the more the technology simplifies the day-to-day the worse the pain when the complexity has to be dealt with.
Today the promised panaceas are functional programming and using React (which relies on many functional concepts) as a cross-platform library. Yet the cracks are already appearing.
AirBnB and Dropbox are two high profile companies with lots (note: LOTS) of resources that went all-in on the promise of React and have now (as of August, 2019) decided that the pains React introduced outweighed the gains React provided.
Yes, definite gains were made, but because this article is focusing on why the pain wasn’t worth the effort I’m not going to list the positives here. (And frankly you have probably already heard what the promised benefits of React and React Native are).
So, what are some of these pain points that made AirBnB and Dropbox back away?
Further, there are other organizational-level pain points to contend with vis-a-vis iOS and Android developers, such as retaining developers (and even attracting them in the first place) because they don’t want to “dilute” their skills by going outside of their platform’s standard toolset.
Now tell me: what do you think the odds are that things will turn out any differently with React Native than they have in the past for other promised “miracle cures”?
Special note: The newly introduced SwiftUI framework for Apple platforms accomplishes about 90% of React’s benefits without any of the downsides. How? By being a first-party solution that provides seamlessly integrated declarative tools instead of introducing another language and layer of complexity.