Switching costs

Cory has published the transcript of his talk at the Transmediale festival in Berlin. It’s all about enshittification, and what we can collectively do to reverse it.

He succinctly describes the process of enshittification like this:

First, platforms are good to their users; then they abuse their users to make things better for their business customers; finally, they abuse those business customers to claw back all the value for themselves. Then, they die.

More importantly, he describes the checks and balances that keep enshittification from happening, all of which have been dismantled over time: competition, regulation, self-help, and workers.

One of the factors that allows enshittification to proceed is a high switching cost:

Switching costs are everything you have to give up when you leave a product or service. In Facebook’s case, it was all the friends there that you followed and who followed you. In theory, you could have all just left for somewhere else; in practice, you were hamstrung by the collective action problem.

It’s hard to get lots of people to do the same thing at the same time.

We’ve seen this play out over at Twitter, where people I used to respect are still posting there as if it hasn’t become a cesspool of far-right racist misogyny reflecting its new owner’s values. But for a significant amount of people—including myself and anyone with a modicum of decency—the switching cost wasn’t enough to stop us getting the hell out of there. Echoing Robin’s observation, Cory says:

…the difference between “I hate this service but I can’t bring myself to quit it,” and “Jesus Christ, why did I wait so long to quit? Get me the hell out of here!” is razor thin.

If users can’t leave because everyone else is staying, when when everyone starts to leave, there’s no reason not to go, too.

That’s terminal enshittification, the phase when a platform becomes a pile of shit. This phase is usually accompanied by panic, which tech bros euphemistically call ‘pivoting.’

Anyway, I bring this up because I recently read something else about switching costs, but in a very different context. Jake Lazaroff was talking about JavaScript frameworks:

I want to talk about one specific weakness of JavaScript frameworks: interoperability, or the lack thereof. Almost without exception, each framework can only render components written for that framework specifically.

As a result, the JavaScript community tends to fragment itself along framework lines. Switching frameworks has a high cost, especially when moving to a less popular one; it means leaving most of the third-party ecosystem behind.

That switching cost stunts framework innovation by heavily favoring incumbents with large ecosystems.

Sounds a lot like what Cory was describing with incumbents like Google, Facebook, Twitter, and Amazon.

And let’s not kid ourselves, when we’re talking about incumbent client-side JavaScript frameworks, we might mention Vue or some other contender, but really we’re talking about React.

React has massive switching costs. For over a decade now, companies have been hiring developers based on one criterion: do they know React?

“An expert in CSS you say? No thanks.”

“Proficient in vanilla JavaScript? Don’t call us, we’ll call you.”

Heck, if I were advising someone who was looking for a job in front-end development (as opposed to actually being good at front-end development; two different things), I’d tell them to learn React.

Just as everyone ended up on Facebook because everyone was on Facebook, everyone ended up using React because everyone was using React.

You can probably see where I’m going with this: the inevitable enshittification of React.

Just to be clear, I’m not talking about React getting shittier in terms of what it does. It’s always been a shitty technology for end users:

React is legacy tech from 2013 when browsers didn’t have template strings or a BFCache.

No, I’m talking about the enshittification of the developer experience …the developer experience being the thing that React supposedly has going for it, though as Simon points out, the developer experience has always been pretty crap:

Whether on purpose or not, React took advantage of this situation by continuously delivering or promising to deliver changes to the library, with a brand new API being released every 12 to 18 months. Those new APIs and the breaking changes they introduce are the new shiny objects you can’t help but chase. You spend multiple cycles learning the new API and upgrading your application. It sure feels like you are doing something, but in reality, you are only treading water.

Well, it seems like the enshittification of the React ecosystem is well underway. Cassidy is kind of annoyed at React. Tom is increasingly miffed about the state of React releases, and Matteo asks React, where are you going?

Personally, I would love it if more people were complaining about the dreadful user experience inflicted by client-side React. Instead the complaints are universally about the developer experience.

I guess doing the right thing for the wrong reasons is fine. It’s just a little dispiriting.

I sometimes feel like I’m living that old joke, where I’m the one in the restaurant saying “the food here is terrible!” and most of my peers are saying “I know! And such small portions!”

Responses

Luke Dorny

@adactio so, encouraging those interested to start an anchor/base/instance/domain of their own and to start connecting, which is a bit more work but can be much more rewarding, is the path.

# Posted by Luke Dorny on Wednesday, January 31st, 2024 at 4:19pm

Dan Jacob

@adactio I’d like to think when and if the tech downturn bottoms out that there will be steady contract work in moving sites off React to something more sane.

# Posted by Dan Jacob on Thursday, February 1st, 2024 at 2:15pm

7 Shares

# Shared by ankur sethi is alive and well on Wednesday, January 31st, 2024 at 4:06pm

# Shared by The Spicy Web on Wednesday, January 31st, 2024 at 4:16pm

# Shared by Zach Leatherman :verify: on Wednesday, January 31st, 2024 at 4:34pm

# Shared by Geffrey van der Bos on Wednesday, January 31st, 2024 at 5:39pm

# Shared by JR Tashjian on Wednesday, January 31st, 2024 at 6:38pm

# Shared by Fynn Becker on Thursday, February 1st, 2024 at 2:45pm

# Shared by Eric on Thursday, February 1st, 2024 at 2:47pm

23 Likes

# Liked by Ben Delarre on Wednesday, January 31st, 2024 at 3:33pm

# Liked by Luke Dorny on Wednesday, January 31st, 2024 at 3:33pm

# Liked by Jared White on Wednesday, January 31st, 2024 at 4:16pm

# Liked by Zach Leatherman :verify: on Wednesday, January 31st, 2024 at 4:32pm

# Liked by Matt Stein on Wednesday, January 31st, 2024 at 5:05pm

# Liked by Alexis Deveria on Wednesday, January 31st, 2024 at 5:05pm

# Liked by Ashur Cabrera on Wednesday, January 31st, 2024 at 5:07pm

# Liked by Olivier Forget on Wednesday, January 31st, 2024 at 5:54pm

# Liked by Andy Davies on Wednesday, January 31st, 2024 at 5:54pm

# Liked by JR Tashjian on Wednesday, January 31st, 2024 at 6:36pm

# Liked by nrk 9819 on Wednesday, January 31st, 2024 at 6:36pm

# Liked by Erin Kissane on Wednesday, January 31st, 2024 at 7:34pm

# Liked by Mottokrosh on Thursday, February 1st, 2024 at 9:51am

# Liked by Angela "Ge" Ricci on Thursday, February 1st, 2024 at 2:40pm

# Liked by Dan Jacob on Thursday, February 1st, 2024 at 2:45pm

# Liked by Fynn Becker on Thursday, February 1st, 2024 at 2:47pm

# Liked by Jeremy Neander on Thursday, February 1st, 2024 at 2:56pm

# Liked by Carter Baxter on Thursday, February 1st, 2024 at 2:56pm

# Liked by spacer on Thursday, February 1st, 2024 at 3:12pm

# Liked by Jon Maskrey on Thursday, February 1st, 2024 at 3:44pm

# Liked by Pauxlll Kruczynski on Thursday, February 1st, 2024 at 5:17pm

# Liked by Jason Neel on Thursday, February 1st, 2024 at 8:46pm

# Liked by Jeff on Thursday, February 1st, 2024 at 10:06pm

Related posts

Frustration

Applying the principle of least power to tools and technologies.

Whatever works for you

There are many ways to style a cat.

JavaScript

Inside me there are two wolves. They’re both JavaScript.

Saving forms

A defensive enhancement to avoid losing everything you just typed into a textarea.

Lightweight

Minimum viable television and minimum viable websites.

Related links

React, Electron, and LLMs have a common purpose: the labour arbitrage theory of dev tool popularity – Baldur Bjarnason

An insightful and incisive appraisal of technology adoption. This truth hits hard:

React and the component model standardises the software developer and reduces their individual bargaining power excluding them from a proportional share in the gains. Its popularity among executives and management is entirely down to the fact that it helps them erase the various specialities – CSS, accessibility, standard JavaScript in the browser, to name a few – from the job market. Those specialities might still exist in practice – as ad hoc and informal requirements during teamwork – but, as far as employment is concerned, they’re such a small part of the overall developer job market that they might as well be extinct.

Tagged with

Front-end development’s identity crisis - Elly Loel

I know how to do full-stack development, not because I wanted to but because I had to.

Grim, but true. I know quite a few extremely talented front-end developers who have been forced out of the field because of what’s described here.

There is no choice anymore, I can’t escape it. React is so pervasive that almost every job is using it. On the rare occasion that they’re not using it, they’re using something like it.

Tagged with

HTML Web Components: An Example - Jim Nielsen’s Blog

Here’s an excellent case study of an HTML web component. Jim starts by showing how you’d create the component in React; then he shows how you’d do it as a JavaScript web component; finally he shows the way to do it as an HTML web component:

The point is we’re starting with a baseline, core experience that will provide basic functionality and content to a wide array of user agents before any JavaScript is required.

Once you’ve done everything you can in vanilla HTML to provide core elements of your baseline experience, you can begin enhancing the existing markup with additional functionality.

This is where HTML web components shine.

Tagged with

Building a Frontend Framework; Reactivity and Composability With Zero Dependencies

The thinking behind the minimal JavaScript framework, Strawberry:

Even without specialized syntax, you can do a lot of what the usual frontend framework does—with similar conciseness—just by using Proxy and WebComponents.

Tagged with

We’re all trying to find the guy who did this

Imagine the web is a storefront, React is a hot dog car, and here’s Create React App dressed as a hot dog:

HTML is the cornerstone of the web — so why does creating a “React app” produce an empty HTML file? Why are we not taking advantage of the most basic feature of the web—the ability to see content quickly before all the interactive code loads? Why do we wait to start loading the data until after all the client-side code has finished loading?

Tagged with

Previously on this day

5 years ago I wrote Union

Taking a tour.

6 years ago I wrote New Adventures 2019

Now that’s what I call a conference.

11 years ago I wrote The complexity of HTML

The simplicity of HTML.

11 years ago I wrote Communication for America

Transatlantic client calls.

12 years ago I wrote The main issue

An email to the HTML working group.

13 years ago I wrote Brighton Coffee

A map tale.

16 years ago I wrote Source

The importance of transparency.

22 years ago I wrote How the west was left

My time here in Arizona is coming to an end.

23 years ago I wrote I *heart* Jeffrey Zeldman

Wow! Jeffrey Zeldman likes my site:

23 years ago I wrote What Video Game Character Am I?

I am an Asteroid.