🤖 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.


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.

Wojack IQ meme. The low and high IQ character is saying "Just some CSS/JS/HTML" and the mid-IQ person who's disgruntled says "React configured like Next with Tailwind and CSS-in-JS and a giant webpack and tree-shaking…"
Wojack IQ meme. The low and high IQ character is saying "Learn and use React" and the mid-IQ person who's disgruntled says "Develop in-house expertise on all three JS/HTML/CSS then build and enforce company conventions based on the needs of your product and shape of your eng org, forever"


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:

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:

Chart showing that bespoke becomes harder as you add complexity but is eaiser at first, whereas framework is harder at first but easier later

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:

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.

Someone adding a comically large amount of olive oil to a salad. Olive oil is labeled JAVASCRIPT and the salad is WEBSITE

Basic sleights of hand

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 😄