🤖 Fighting over frameworks ⚔️
Tuesday, February 28, 2023 :: Tagged under: engineering essay. ⏰ 15 minutes.
🎵 The song for this post is The Vital Vitriol (Plague Knight Battle), by Jake Kaufman for the game Shovel Knight. 🎵
Alex Russel wrote The Market for Lemons which is a "big JS frameworks are Bad and have always been Bad" piece with a lot of invective, than Laurie Voss wrote a rebuttal calling him a big meanie (which he kinda was) and defending React, but then also the idea of frameworks. The Laurie piece sat poorly with me so I'm going to respond to it on my own blog, like it's 2007. I'll quote from Laurie's a bunch but you should probably read it and The Market for Lemons, if you haven't already.
First
I'm glad both of them wrote their pieces, they're all cool and part of Discourse Working As Designed, and while a lot of this is critical of Laurie's piece I want to be super clear that it's great, I think all three of us agree on a lot (customers are great, accessibility is important, performance is an accessibility issue, accessibility is an accessibility issue). This is all quibbling over tone and details of those agreements.


CHOOSE YOUR CHARACTER
Intentions, disclosure, and what lying means, including to yourself
The big takeaway I got from Laurie's piece was "Alex was being mean." They say a lot more and adds some technical/social claims and I'll address that at the end to show that I read it and understand it, but so much of it boils down to "Alex called me and my friends lying grifters" and they're understandably upset.
I think the biggest difference in understanding here is what "lying" means, and when you can call someone a grifter. Alex is attacking an institution, and he (not for nothing) thinks it exists and thrives because of people and the choices they make, and if you think that institution shouldn't exist, it's not hard to let that animus fall onto the people who built and uphold it. If you were a part of that institution, it's hard not to take it all a bit personally.
Cards on the table, I worked at Google from 2012-2013. I noted when I was getting free lunch and social prestige and dogfooding Glass in San Francisco (it's cringe now but wearing it in the city got you treated a bit like a celebrity) that weirdly, I thought it was fair to criticize Google but I wasn't treating Google like an existential threat to the Open Web. Later in my career when I got a $50k signing bonus and a $40k cash salary raise and a grant worth mid-six figures to go from ClassPass to Lyft, I found I wasn't as bothered by rideshare being persistently unprofitable, or worker-unfriendly, or shown to increase congestion in cities. I didn't thrive in either of those roles, nor did I stick with them for very long, but I'd be lying to myself if I said it wasn't easier to put principles aside when I was profiting wildly, personally and professionally, from joining Big Institution. Grappling with this kind of thing is a lot of the challenge of trying to live ethically.
Laurie has this disclosure in their article:
Disclaimer: I was involved in npm, the world's repository of open source JavaScript software.
They were Chief Data Officer and Co-Founder of npm
. It's a bit of an
understatement to say they were "involved." Whatever wealth Laurie has, most of
their professional networks, most of their followers (and the influence that
comes from that), the people who offer them leadership jobs and ask for their
leadership advice are doing so directly as a consequence of JavaScript becoming
the dominant technology and much of that was rich frontend apps off frameworks
like React.
Bro1, own it! It doesn't make Laurie or anyone else who works in Big JavaScript a bad person or anything, but it's insulting to act like it wasn't the dominant thing paying their rent, materially and as far as connecting purpose to one's professional life.
My main thesis is I strongly agree with Laurie's greater point that I think the system looks the way it does because people are making the best choices available to them. Where I disagree is whether developers are really getting their needs met: the developer ecosystem is full of incentives for rent-seeking that are mostly about the limits of developer attention, specifically in the short term, and not serving customers or developer productivity in the long run.
Secondary thesis: people in institutions need to own that their positions within those institutions may compromise their ability to see its flaws, and/or they need to come to terms with the fact that people will criticize the institution and implicate the people in it.
What Alex might mean by "persuasive"
Laurie spends a lot of time saying Alex calls them and their friends "persuasive liars and grifters." Ctrl-F Alex's article, he never calls anyone a liar or a grifter. He does, at the very end, refer to the people doing the work as "smooth talkers [doing] hollow marketeering". Pedantically, these are different. "Liar" and "grifter" implies someone knows their being Bad, and and choosing to be bad anyway. But "smooth talk" is a skill, and "marketeering" is a Profession™. I suspect people who make their livelihood in the institution Alex criticizes are rounding up Alex's rhetoric to make the "being mean" part sting more, so that the call for accountability stings less.
Are influencers persuasive? Can they be performing "hollow marketeering"? Of course! I don't think it's a strong position to think marketing is fake and that people are immune to it. I'm sure people elevated React on some level because it solved their technical problems perfectly, but one can't deny it might also be because they kept hearing about it, and "thousands of developers can't be wrong, right?" If we can suggest companies doing layoffs is a "social contagion," why not their tech choices? Consider how the last decade's new technologies/frameworks seem to require a major corporate sponsor or originator who vouches for it in order to "break through" (Google for Golang, Mozilla for Rust for a while, GraphQL and FB, Typescript and Microsoft…). I think a lot of the "charisma" being referred to is real, dollar-backed marketing (or personal professional branding) efforts, with a network of incentives for people to propagate these technologies as "better" before they've been vetted out:
-
A lot of influencers promote what Big Shops do because big shops to it (FAANG envy, or, "it's important for my 2011 startup with no customers to use Mongo and if you ask me why I'll say because it's easier to shard than MySQL")
-
Software professionals who get up to speed with what's trendy to promote their professional brand, and differentiate themselves from other candidates. "If you're considering me vs. another developer in the hiring pipeline, look how Passionate I am with my list of buzzword technologies. I can make you Web Scale."
-
Promotion-seeking at those big corps: the old joke was "to get promoted at Google, invent a domain-specific programming language." A lot of the tech that emerges from these places is someone there trying to demonstrate technical prowess and impact. I'm sure he's a great engineer and I've liked his writing but I only know who Matt Klein is because he's "the Envoy guy."
-
Big Corps get Engineering Brand for inventing and propagating new technological solutions.
-
Content creators who follow trends because new hotnesses are Good Content. Their content senses are for new hot trends in large part out of some awareness of these other points ☝️
All this leads to a world where if I'm a FE developer, every position for growth companies is asking for React, if I'm Googling "how to make a website" and it's all React tutorials, of course I'm logically going to learn React. Per Laurie, I'm doing something rational and I'm not a dumbass for doing it.
But crucially: that doesn't mean React is "better" for my project. And (this is harder to see): it doesn't imply React saves me developer time either. The input to this function is marketing dollars and the incentives above, independent of developer needs.
Suppose I learn React and I'll get one of those jobs. I can probably use React in the next 4-5 jobs. But consider me making 8 web apps over the next 3-4 years, the price of "learning React" considered as a shriking fixed cost and the cost of each app is a variable cost. Using Laurie's own chart:

Unless all 8 of those apps make it to Large Scale, only using and learning probably React cost me time (since I could have probably made the apps with simpler tech) and led to bigger, nastier pages for customers.
Per my thesis, this was mostly about my attention, not any real measure of
productivity. And to be clear, this isn't the end of the world: almost nobody
optimizes every aspect of their lives. Is your laundry schedule Optimal? Do you
know all your nutrition macros, or do you just, like, eat food you like when
you're hungry? Is your terminal using the perfect programming font with a
custom tty? Most people just want something that kind of works. But saying "it's
saving me developer time" when you're re-inventing routing the browser gives you
for free and could have used a href=
… well, I don't think you're being honest
about what you're saving.
I think Alex's piece (and inner peace, generally) might be served by internalizing that most people won't learn things, even if they lead to better products, and even if they save them time in the long run, because some inefficiency is Fine. But Laurie should acknowledge that that's what's actually happening: people aren't picking better tech, the reasons may be closer to what Alex called "hollow marketeering."
Why he would he call people "liars and grifters" (again, he didn't use those words, but: on intellectual honesty)
Alex's claim is that SPAs being bad at performance and accessibility has been known for a while and when people promote themselves or their tech, they didn't disclose this to his satisfaction. I don't think everyone would call this lying, but I don't think you have to try that hard to understand why someone might view it that way. If you take other institutions with people working at them, you can sub in another example and it becomes more clear.
An example
If you're still confused, let's change institutions: American Healthcare. Are the executives of healthcare insurance companies evil, greedy bastards? Maybe. But they're also running giant companies responsible for ~20% of the US economy, and are the primary way sick people get care in a country of ~400m people, where many voters are sure they won't tolerate anything but the private insurance model (they might even say something like "keep your goddamn government hands off my Medicare").
Consider every doctor who bills giant rates responsible for the exhorbitant cost (but "insurance will cover it; and besides, my malpractice insurance premiums are bananas")… are they evil, greedy bastards? Are the HR officers of every pharmaceutical company, who mostly concern themselves with running a healthy and efficient work environment? Is the medical researcher who's working on treatment for sickle-cell lymphoma from a big pharma grant? The finance operator who's evaluating risk on loans for medical equipment, are they evil?
An adult understanding of things can keep all the following in their head at the same time:
-
You can't ethically judge every individual in this system.
-
Each individual is making rational choices; most are probably wonderful people who should live full, beautiful lives with many holidays surrounded by loved ones.
-
Each individual has a variable amount of control over the outcomes of the system (a nurse, for example, can't make a choice with the same impacts as Aetna's CEO)…
-
…but no individual, including Aetna's CEO, can unfuck the parts that are fucked, and can make a good case for "I'm just doing the best I can with what I've got."
-
But the system is run and upheld, in small or large ways, by each individual who's a part of it. If they all stopped coming to work, or all demanded change, the system would cease. A plurality of them, especially near the top, could choose to make a few different choices which would have massive after-effects. Many, including me, like to ascribe the more brutal aspects of the healthcare system to the self-interested choices many of those actors make.
Alex is saying all the things most educated people say about American Healthcare: the system is Bad, the people who promote it say the same tired lines at the expense of a lot of preventable suffering, and they happen to make bank doing it.
Laurie (again, co-founder of npm), is someone from that system, saying (and there's truth to this too!) the equivalent of "American Healthcare produces research no other system has produced; we've innovated, but most of all: how dare you think we're a bunch of lying monsters who enjoy the worst parts of this. If you're a healthcare worker, don't let Alex bully you into feeling guilty for the wonderful work you do every day."
And he's right: I don't think my coworkers are Bad People for picking React or anything. But if I cared very strongly about the things Alex seems to care about, I would see their choice to do it (for a fintech company? showing numbers and text and maybe a graph or two?) as a complicit actor in a bigger system.
That's the main thing I wanted to talk about, but as promised, Laurie makes some social/techincal points, I'll speed through them to show I read and considered them.
If you liked this, you might like when I wrote about CSS-in-JS, which I saw as a similar culture war, though that one was more about developer ergnonomic tradeoffs rather than include people's jobs and things.

Basic sleights of hand
-
I don't buy that "hawks and doves" applies here. I mean, it's neat! But why are we talking about hypothetical animal behavior? It's like saying "Conway's Game of Life tells us: if you get too close to too many people, you'll drown in social obligations." I just don't see why "framework" is "hawk" and "not" is "dove," when hawk and dove are basic rule-based constructs of a state machine and we're talking about something as fuzzy as "what should matter when we build on the web." Especially in the presence of marketing budgets? Maybe the better experiment when FB is plugging the framework is "hawks with machine-gun talons and body armor."
-
Alex has a line with criteria that Laurie uses later, so it's kind of a beef with both: I don't buy the criteria for "should be single-paged app" is "has login" lmao. And I think it's a poor-faith read of "has long sessions" to include things like LinkedIn, Zillow, or Google Maps, which I think many, many people use very successfully without ever creating a login (e.g. looking at individual Zillow listing, that person's LinkedIn profile).
Laurie then points to this list of top 100 websites of traffic, but if you look at it, as before, many offer login and some features, but I'd bet my liver most of their utility is available to non-logged-in users, and "session length" hardly affects their use: Google Search, Wikipedia, XVideos, Yahoo, Pornhub, Reddit… I don't buy these "should be" SPAs. A URL pointing to the thing you're looking at without redefining routing or a whole lot of DOM rejiggering or client-side state management would serve most of these sites fine. Where's Slack in this? Figma?
Network effects: "Easier to hire," "already solved your problem"
So I agree with this for the most popular strategy of running tech companies today, which is "do what's most popular." Sometimes people will say using React is "Use Boring Technology" but idk how so much JavaScript reimplementing so much of the browser is more boring than, say, PHP or server-rendered HTML templates.
Regardless, "use it because it's popular" is like saying your investment strategy is "index funds" — it's great advice for most regular people, but I think it's depressing (and maybe embarassing) as the core position of a professional investor. I don't think using React makes someone a bad developer, but I think I'd like to be in an engineering culture where the frontend devs don't need it to be in React. I write a bit more on it here, but generally, I like "reach for the ceiling" instead of "avoid the floor" strategies. All that said, if you're looking for bodies to serviceably fill a role and ship code, React developers are in plenty supply, and interview processes around "can they contribute to a React codebase" are probably more straightforward to design and run than "does this person know HTML/CSS/JS/BOM/DOM + the networking stack".
I also question how transferable all these React devs really are. If you hire
someone from a shop that used create-react-app
+ Redux and built it with
Makefiles using Flow (this shop was thriving in 2016), will they really be able
to drop into a Next.js with SSR built with webpack and TypeScript? It's like
when I was at ClassPass we had Java microservices using Dropwizard, but for
value objects some people used Immutables, some people used
AutoValue, and some used Project Lombok. To say React is a "boring"
choice and this is all saving you developer headache, actually, is hard for me
to accept.
The "using a framework makes things easier the majority of the time for most
projects, actually" position reminds me of a favorite tef
joke, from the
Devil's Dictionary of Programming:
framework — A product with the business logic removed, but all of the assumptions left in.
"React saves developer time"
Like I said before, I believe it saves them "a fixed amount of learning time." If you don't want to actually learn much and want to learn something "good enough" one time, yes, React is great. But you'll probably overkill most of your projects.
Because another funny thing (emphasis mine):
This is sometimes described as "developer experience" but from an economic standpoint, money doesn't care how the developer experiences anything, money cares how fast they work. Any framework obviously takes more time to get started than a simple static site, but I think it's uncontroversial to claim that over time, a framework like React is going to save your developers time: that's what frameworks are invented to do. Let's be clear why that is, though.
I actually think this is controversial! As an example, as a primarily backend
developer, his graph is frequently in reverse! If I want to get something fast,
today, I'll use a fully-featured framework like Rails or Phoenix. But these
frameworks, as they scale, start to suffer, then cost you time later on. Think
of all the 10,000 line routes.rb
files out there. How many companies had to
stop shipping features to fix Django's admin interface since it broke at a
certain size. How many projects to split a codebase up from the "framework
directory structure" (usually views/
and controllers/
) into something more
business-logic based?
"The solution is more frameworks, better frameworks"
idk, I can't argue positions like "incremental improvement is bad," or "we're already at local maxima," so I won't. But if we can explore non-locally we might find higher maxima.
Again If you sub out another institution, if I say "American Healthcare can be fixed: we just need more efficient underwriting for insurance (maybe we can use ChatGPT?!), more efficiency in the courts for malpractice, and more innovation like Precision Medicine" whatever part of your brain that's going "technically true but shut the fuck up and give me socialized healthcare already (or at least a public option for insurance)", listen to it and apply that empathy to folks like Alex or me.
Another fun paragraph of theirs to sub out for "pretend they're an Aetna exec, talking about providing care" or "a landlord talking about housing":
Which brings us to the reality. Developers are expensive. Their salaries are paid, ultimately, by customers. But not all customers are equally valuable. The less money a customer is likely to pay, the more likely it is to be worth to sacrifice their experience in favor of quickly shipping some feature that will, at the margins, attract or retain some other, wealthier customer.
The brutal truth is that the status quo reflects the economics of the developer market: expensive developers mean cutting off poorer customers. The observed reality is that modern web development sacrifices the experience of poorer people, and the model we've laid out here explains why that is: X > Y, where X is "cost of developer time" and Y is "cost of customers lost".
To be absolutely clear, I don't think using React means you're denying people life-saving care or housing. But some people feel very strongly about accessibility, the loss of potential that comes with everyone using the same sledgehammer even when it's wildly inappropriate, and the downstream impacts of poor performance (energy use, battery power…). Simply knowing How Markets And Capitalism work doesn't mean you're not part of the Bad Things machine, or that Bad Things are Okay, Actually.
You're doing just fine
I want to end with the point that we totally agree: everyone's making rational choices, like I did when I took certain jobs. Great systems we love, like beloved infrastructure or the James Webb telescope, aren't Scolded into existence. I don't know you but you're probably great.
1. ^ I don't know Laurie's pronouns, so consider this a gender-neutral "bro," like you'd say about anyone who (like me) works and opines in tech.
Thanks for the read! Disagreed? Violent agreement!? Feel free to join my mailing list, drop me a line at , or leave a comment below! I'd love to hear from you 😄