React Won't Save You

coding Aug 19, 2019

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?

  • Code was mostly but not completely portable between iOS, Android and Web.  This led to a false sense of security during development/testing which led to problems coming up in production instead of getting caught during development.
  • The type-free nature of Javascript (on which React development is based) leads to painful and difficult refactoring of code, especially in large code bases.
  • The fast-moving development of and changes within React itself requires constant maintenance and updating of any code which relies on it.
  • iOS and Android have powerful first-party development tools while using React requires the use of different tools for building.  These non-standard tools are in some ways less powerful but more importantly they require developers to learn yet another complex tool.  And, because React isn’t a 100% substitute for native development, developers still need to stay fluent and up-to-date in the platform’s native tools.
  • Crashes are much more difficult to debug because stack dumps aren’t traceable across the Reactive/native boundary.

(NB There are plenty of other pain points; see here and here for detailed write-ups from the horses’ mouths).

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.


50% Complete

Two Step

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.