<rss version="2.0">

<channel>
  <title>apenwarr</title>
  <description>apenwarr - NITLog</description>
  <link>https://apenwarr.ca/log/</link>
  <language>en-ca</language>
  <generator>PyNITLog</generator>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>

  
  
  <item>
    <title>
      Every layer of review makes you 10x slower
    </title>
    <pubDate>Tue, 17 Mar 2026 02:54:43 +0000</pubDate>
    <link>https://apenwarr.ca/log/20260316</link>
    
    <guid isPermaLink="true">https://apenwarr.ca/log/20260316</guid>
    
    <description>
    &lt;p&gt;We’ve all heard of those network effect laws: the value of a network goes up
with the square of the number of members. Or the cost of communication goes
up with the square of the number of members, or maybe it was n log n, or
something like that, depending how you arrange the members. Anyway doubling
a team doesn&#39;t double its speed; there’s coordination overhead. Exactly how
much overhead depends on how badly you botch the org design.&lt;/p&gt;
&lt;p&gt;But there’s one rule of thumb that someone showed me decades ago, that has
stuck with me ever since, because of how annoyingly true it is. The rule
is annoying because it doesn’t &lt;em&gt;seem&lt;/em&gt; like it should be true. There’s no
theoretical basis for this claim that I’ve ever heard. And yet, every time I
look for it, there it is.&lt;/p&gt;
&lt;p&gt;Here we go:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;strong&gt;Every layer of approval makes a process 10x slower&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I know what you&#39;re thinking. Come on, 10x? That’s a lot. It’s unfathomable.
Surely we’re exaggerating.&lt;/p&gt;
&lt;p&gt;Nope.&lt;/p&gt;
&lt;p&gt;Just to be clear, we&#39;re counting “wall clock time” here rather than effort.
Almost all the extra time is spent sitting and waiting.&lt;/p&gt;
&lt;p&gt;Look:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Code a simple bug fix&lt;br&gt;
30 minutes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get it code reviewed by the peer next to you&lt;br&gt;
300 minutes → 5 hours → half a day&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get a design doc approved by your architects team first&lt;br&gt;
50 hours → about a week&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get it on some other team’s calendar to do all that&lt;br&gt;
(for example, if a customer requests a feature)&lt;br&gt;
500 hours → 12 weeks → one fiscal quarter&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wish I could tell you that the next step up — 10 quarters or about 2.5
years — was too crazy to contemplate, but no. That’s the life of an
executive sitting above a medium-sized team; I bump into it all the time
even at a relatively small company like Tailscale if I want to change
product direction. (And execs sitting above
large teams can’t actually do work of their own at all. That&#39;s another
story.)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;strong&gt;AI can’t fix this&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;First of all, this isn’t a post about AI, because AI’s direct impact
on this problem is minimal. Okay, so Claude can code it in 3 minutes instead
of 30? That’s super, Claude, great work.&lt;/p&gt;
&lt;p&gt;Now you either get to spend 27 minutes reviewing the code yourself in a
back-and-forth loop with the AI (this is actually kinda fun); or you save 27
minutes and submit unverified code to the code reviewer, who will still take
5 hours like before, but who will now be mad that you’re making them read
the slop that you were too lazy to read yourself. Little of value was gained.&lt;/p&gt;
&lt;p&gt;Now now, you say, that’s not the value of agentic coding. You don’t use an
agent on a 30-minute fix. You use it on a monstrosity week-long project that
you and Claude can now do in a couple of hours! Now we’re talking. Except
no, because the monstrosity is so big that your reviewer will be extra mad
that you didn’t read it yourself, and it’s too big to review in one chunk so
you have to slice it into new bite-sized chunks, each with a 5-hour review
cycle. And there’s no design doc so there’s no intentional architecture, so
eventually someone’s going to push back on that and here we go with the
design doc review meeting, and now your monstrosity week-long project that
you did in two hours is... oh. A week, again.&lt;/p&gt;
&lt;p&gt;I guess I could have called this post Systems Design 4 (or 5, or whatever
I’m up to now, who knows, I’m writing this on a plane with no wifi) because
yeah, you guessed it. It&#39;s Systems Design time again.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The only way to sustainably go faster is fewer reviews&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;It’s funny, everyone has been predicting the Singularity for decades now.
The premise is we build systems that are so smart that they themselves can
build the next system that is even smarter, that builds the next smarter
one, and so on, and once we get that started, if they keep getting smarter
faster enough, then the incremental time (t) to achieve a unit (u) of
improvement goes to zero, so (u/t) goes to infinity and foom.&lt;/p&gt;
&lt;p&gt;Anyway, I have never believed in this theory for the simple reason we
outlined above: the majority of time needed to get anything done is not
actually the time doing it. It’s wall clock time. Waiting. Latency.&lt;/p&gt;
&lt;p&gt;And &lt;a href=&quot;https://apenwarr.ca/log/20230415&quot;&gt;you can’t overcome latency with brute force&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I know you want to. I know many of you now work at companies where the
business model kinda depends on doing exactly that.&lt;/p&gt;
&lt;p&gt;Sorry.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;But you can’t just &lt;em&gt;not review&lt;/em&gt; things!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Ah, well, no, actually yeah. You really can’t.&lt;/p&gt;
&lt;p&gt;There are now many people who have seen the symptom: the start of the
pipeline (AI generated code) is so much faster, but all the subsequent
stages (reviews) are too slow! And so they intuit the obvious solution: stop
reviewing then!&lt;/p&gt;
&lt;p&gt;The result might be slop, but if the slop is 100x
cheaper, then it only needs to deliver 1% of the value per unit and it&#39;s
still a fair trade. And if your value per unit is even a mere 2% of what it
used to be, you’ve doubled your returns! Amazing.&lt;/p&gt;
&lt;p&gt;There are some pretty dumb assumptions underlying that theory; you can
imagine them for yourself. Suffice it to say that this produces what I will
call the AI Developer’s Descent Into Madness:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Whoa, I produced this prototype so fast! I have super powers!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This prototype is getting buggy. I’ll tell the AI to fix the bugs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hmm, every change now causes as many new bugs as it fixes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Aha! But if I have an AI agent also review the code, it can find its own
bugs!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait, why am I personally passing data back and forth between agents&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I need an agent framework&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I can have my agent write an agent framework!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Return to step 1&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It’s actually alarming how many friends and respected peers I’ve lost
to this cycle already. Claude Code only got good maybe a few months ago, so
this only recenlty started happening, so I assume they will emerge from the
spiral eventually. I mean, I hope they will. We have no way of knowing.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Why we review&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Anyway we know our symptom: the pipeline gets jammed up because of too much
new code spewed into it at step 1. But what&#39;s the root cause of the clog?
Why doesn’t the pipeline go faster?&lt;/p&gt;
&lt;p&gt;I said above that this isn’t an article about AI. Clearly I’m failing at
that so far, but let’s bring it back to humans. It goes back to
the annoyingly true observation I started with: every layer of review is 10x
slower. As a society, we know this. Maybe you haven&#39;t seen it before now.
But trust me: people who do org design for a living know that layers are
expensive... and they still do it.&lt;/p&gt;
&lt;p&gt;As companies grow, they all end up with more and more layers of
collaboration, review, and management. Why? Because otherwise mistakes get
made, and mistakes are increasingly expensive at scale. The average value
added by a new feature eventually becomes lower than the average value lost
through the new bugs it causes. So, lacking a way to make features produce
more value (wouldn&#39;t that be nice!), we try to at least reduce the damage.&lt;/p&gt;
&lt;p&gt;The more checks and controls we put in place, the slower we go, but the more
monotonically the quality increases. And isn’t that the basis of &lt;em&gt;continuous
improvement?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Well, sort of. Monotonically increasing quality is on the right track. But
“more checks and controls” went off the rails. That’s &lt;em&gt;only one way&lt;/em&gt; to
improve quality, and it&#39;s a fraught one.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;“Quality Assurance” reduces quality&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I wrote a few years ago about &lt;a href=&quot;https://apenwarr.ca/log/20161226&quot;&gt;W. E. Deming and the &quot;new&quot; philosophy around
quality&lt;/a&gt; that he popularized in Japanese auto manufacturing. (Eventually U.S.
auto manufacturers more or less got the idea. So far the software industry
hasn’t.)&lt;/p&gt;
&lt;p&gt;One of the effects he highlighted was the problem of a “QA” pass in a
factory: build widgets, have an inspection/QA phase, reject widgets that
fail QA. Of course, your inspectors probably miss some of the failures, so
when in doubt, add a second QA phase after the first to catch the remaining
ones, and so on.&lt;/p&gt;
&lt;p&gt;In a simplistic mathematical model this seems to make sense. (For example, if
every QA pass catches 90% of defects, then after two QA passes you’ve
reduced the number of defects by 100x. How awesome is that?)&lt;/p&gt;
&lt;p&gt;But in the reality of agentic humans, it’s not so simple. First of all, the
incentives get weird. The second QA team basically serves to evaluate how
well the first QA team is doing; if the first QA team keeps missing
defects, fire them. Now, that second QA team has little incentive to
produce that outcome for their friends. So maybe they don’t look too hard;
after all, the first QA team missed the defect, it’s not unreasonable that
we might miss it too.&lt;/p&gt;
&lt;p&gt;Furthermore, the first QA team knows there is a second QA team to catch any
defects; if I don’t work too hard today, surely the second team will pick up
the slack. That&#39;s why they&#39;re there!&lt;/p&gt;
&lt;p&gt;Also, the team making the widgets in the first place doesn’t check their
work too carefully; that’s what the QA team is for! Why would I slow down
the production of every widget by being careful, at a cost of say 20% more
time, when there are only 10 defects in 100 and I can just eliminate them at
the next step for only a 10% waste overhead? It only makes sense. Plus
they&#39;ll fire me if I go 20% slower.&lt;/p&gt;
&lt;p&gt;To say nothing of a whole engineering
redesign to improve quality, that would be super expensive and we could be
designing all new widgets instead.&lt;/p&gt;
&lt;p&gt;Sound like any engineering departments you know?&lt;/p&gt;
&lt;p&gt;Well, this isn’t the right time to rehash Deming, but suffice it to say, he
was on to something. And his techniques worked. You get things like the
famous Toyota Production System where they eliminated the QA phase entirely,
but gave everybody an “oh crap, stop the line, I found a defect!” button.&lt;/p&gt;
&lt;p&gt;Famously, US auto manufacturers tried to adopt the same system by installing
the same “stop the line” buttons. Of course, nobody pushed those buttons. They
were afraid of getting fired.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Trust&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The basis of the Japanese system that worked, and the missing part of the
American system that didn’t, is trust. Trust among individuals that your
boss Really Truly Actually wants to know about every defect, and wants you
to stop the line when you find one. Trust among managers that executives
were serious about quality. Trust among executives that individuals, given a
system that can work and has the right incentives, will produce quality work
and spot their own defects, and push the stop button when they need to push
it.&lt;/p&gt;
&lt;p&gt;But, one more thing: trust that the system &lt;em&gt;actually does work&lt;/em&gt;. So first
you need a system that will work.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Fallibility&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;AI coders are fallible; they write bad code, often. In this way, they are
just like human programmers.&lt;/p&gt;
&lt;p&gt;Deming’s approach to manufacturing didn’t have any magic bullets. Alas, you
can’t just follow his ten-step process and immediately get higher quality
engineering. The secret is, you have to get your engineers to engineer
higher quality into the whole system, from top to bottom, repeatedly.
Continuously.&lt;/p&gt;
&lt;p&gt;Every time something goes wrong, you have to ask, “How did this happen?” and
then do a whole post-mortem and the Five Whys (or however many Whys are
in fashion nowadays) and fix the underlying Root Causes so that it doesn’t
happen again. “The coder did it wrong” is never a root cause, only a
symptom. Why was it possible for the coder to get it wrong?&lt;/p&gt;
&lt;p&gt;The job of a code reviewer isn&#39;t to review code. It&#39;s to figure out how to
obsolete their code review comment, that whole class of comment, in all
future cases, until you don&#39;t need their reviews at all anymore.&lt;/p&gt;
&lt;p&gt;(Think of the people who first created &quot;go fmt&quot; and how many stupid
code review comments about whitespace are gone forever. Now that&#39;s engineering.)&lt;/p&gt;
&lt;p&gt;By the time your review catches a mistake, the mistake has already been
made. The root cause happened already. You&#39;re too late.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Modularity&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I wish I could tell you I had all the answers. Actually I don’t have much.
If I did, I’d be first in line for the Singularity because it sounds kind of
awesome.&lt;/p&gt;
&lt;p&gt;I think we’re going to be stuck with these systems pipeline problems for a
long time. Review pipelines — layers of QA — don’t work. Instead, they make
you slower while hiding root causes. Hiding causes makes them harder to fix.&lt;/p&gt;
&lt;p&gt;But, the call of AI coding is strong. That first, fast step in the pipeline
is &lt;em&gt;so fast!&lt;/em&gt; It really does feel like having super powers. I want more
super powers. What are we going to do about it?&lt;/p&gt;
&lt;p&gt;Maybe we finally have a compelling enough excuse to fix the 20 years of
problems hidden by code review culture, and replace it with a real culture
of quality.&lt;/p&gt;
&lt;p&gt;I think the optimists have half of the right idea. Reducing review stages,
even to an uncomfortable degree, is going to be needed. But you can’t just
reduce review stages without something to replace them. That way lies the
Ford Pinto or any recent Boeing aircraft.&lt;/p&gt;
&lt;p&gt;The complete package, the table flip, was what Deming brought to
manufacturing. You can’t half-adopt a “total quality” system. You need to
eliminate the reviews &lt;em&gt;and&lt;/em&gt; obsolete them, in one step.&lt;/p&gt;
&lt;p&gt;How? You can fully adopt the new system, in small bites. What if some
components of your system can be built the new way? Imagine an old-school
U.S. auto manufacturer buying parts from Japanese suppliers; wow, these
parts are so well made! Now I can start removing QA steps elsewhere because
I can just assume the parts are going to work, and my job of &quot;assemble a
bigger widget from the parts&quot; has a ton of its complexity removed.&lt;/p&gt;
&lt;p&gt;I like this view. I’ve always liked small beautiful things, that’s my own
bias. But, you can assemble big beautiful things from small beautiful
things.&lt;/p&gt;
&lt;p&gt;It’s a lot easier to build those individual beautiful things in small teams
that trust each other, that know what quality looks like &lt;em&gt;to them&lt;/em&gt;. They
deliver their things to customer teams who can clearly explain what quality
looks like &lt;em&gt;to them&lt;/em&gt;. And on we go. Quality starts bottom-up, and spreads.&lt;/p&gt;
&lt;p&gt;I think small startups are going to do really well in this new world,
probably better than ever. Startups already have fewer layers of review just
because they have fewer people. Some startups will figure out how to produce
high quality components quickly; others won&#39;t and will fail. Quality by
natural selection?&lt;/p&gt;
&lt;p&gt;Bigger companies are gonna have a harder time, because their slow
review systems are baked in, and deleting them would cause complete chaos.&lt;/p&gt;
&lt;p&gt;But, it’s not just about company size. I think engineering teams at any
company can get smaller, and have better defined interfaces between them.&lt;/p&gt;
&lt;p&gt;Maybe you could have multiple teams inside a company competing to deliver
the same component. Each one is just a few people and a few coding bots. Try
it 100 ways and see who comes up with the best one. Again, quality by
evolution. Code is cheap but good ideas are not. But now you can try out new
ideas faster than ever.&lt;/p&gt;
&lt;p&gt;Maybe we’ll see a new optimal point on the &lt;a href=&quot;https://tailscale.com/blog/modules-monoliths-and-microservices&quot;&gt;monoliths-microservices
continuum&lt;/a&gt;.
Microservices got a bad name because they were too micro; in the original
terminology, a “micro” service was exactly the right size for a “two pizza
team” to build and operate on their own. With AI, maybe it&#39;s one pizza and
some tokens.&lt;/p&gt;
&lt;p&gt;What’s fun is you can also use this new, faster coding to experiment with
different module &lt;em&gt;boundaries&lt;/em&gt; faster. &lt;em&gt;Features&lt;/em&gt; are still hard for lots of
reasons, but refactoring and automated integration testing are things the
AIs excel at. Try splitting out a module you were afraid to split out
before. Maybe it&#39;ll add some lines of code. But suddenly lines of code are
cheap, compared to the coordination overhead of a bigger team maintaining
both parts.&lt;/p&gt;
&lt;p&gt;Every team has some monoliths that are a little too big, and too many layers
of reviews. Maybe we won&#39;t get all the way to Singularity. But, we can
engineer a much better world. Our problems are solvable.&lt;/p&gt;
&lt;p&gt;It just takes trust.&lt;/p&gt;
    </description>
  </item>
  
  
  <item>
    <title>
      Systems design 3: LLMs and the semantic revolution
    </title>
    <pubDate>Thu, 20 Nov 2025 14:19:14 +0000</pubDate>
    <link>https://apenwarr.ca/log/20251120</link>
    
    <guid isPermaLink="true">https://apenwarr.ca/log/20251120</guid>
    
    <description>
    &lt;p&gt;Long ago in the 1990s when I was in high school, my chemistry+physics
teacher pulled me aside. &quot;Avery, you know how the Internet works, right? I
have a question.&quot;&lt;/p&gt;
&lt;p&gt;I now know the correct response to that was, &quot;Does anyone &lt;em&gt;really&lt;/em&gt; know how
the Internet works?&quot; But as a naive young high schooler I did not have that
level of self-awareness. (Decades later, as a CEO, that&#39;s my answer to
almost everything.)&lt;/p&gt;
&lt;p&gt;Anyway, he asked his question, and it was simple but deep. How do they make
all the computers connect?&lt;/p&gt;
&lt;p&gt;We can&#39;t even get the world to agree on 60 Hz vs 50 Hz, 120V vs 240V, or
which kind of physical power plug to use. Communications equipment uses way
more frequencies, way more voltages, way more plug types. Phone companies
managed to federate with each other, eventually, barely, but the ring tones
were different everywhere, there was pulse dialing and tone dialing, and
some of them &lt;em&gt;still&lt;/em&gt; charge $3/minute for international long distance, and
connections take a long time to establish and humans seem to be involved in
suspiciously many places when things get messy, and every country has a
different long-distance dialing standard and phone number format.&lt;/p&gt;
&lt;p&gt;So Avery, he said, now they&#39;re telling me every computer in the world can
connect to every other computer, in milliseconds, for free, between Canada
and France and China and Russia. And they all use a single standardized
address format, and then you just log in and transfer files and stuff? How?
How did they make the whole world cooperate? And who?&lt;/p&gt;
&lt;p&gt;When he asked that question, it was a formative moment in my life that I&#39;ll
never forget, because as an early member of what would be the first Internet
generation…  I Had Simply Never Thought of That.&lt;/p&gt;
&lt;p&gt;I mean, I had to stop and think for a second. Wait, is protocol
standardization even a hard problem? Of course it is. Humans can&#39;t agree on
anything. We can&#39;t agree on a unit of length or the size of a pint, or which
side of the road to drive on. Humans in two regions of Europe no farther
apart than Thunder Bay and Toronto can&#39;t understand each other&#39;s speech. But
this Internet thing just, kinda, worked.&lt;/p&gt;
&lt;p&gt;&quot;There&#39;s… a layer on top,&quot; I uttered, unsatisfyingly. Nobody had taught me
yet that the OSI stack model existed, let alone that it was at best a weak
explanation of reality.&lt;/p&gt;
&lt;p&gt;&quot;When something doesn&#39;t talk to something else, someone makes an adapter.
Uh, and some of the adapters are just programs rather than physical things.
It&#39;s not like everyone in the world agrees. But as soon as one person makes
an adapter, the two things come together.&quot;&lt;/p&gt;
&lt;p&gt;I don&#39;t think he was impressed with my answer. Why would he be? Surely
nothing so comprehensively connected could be engineered with no central
architecture, by a loosely-knit cult of mostly-volunteers building an
endless series of whimsical half-considered &quot;adapters&quot; in their basements
and cramped university tech labs. Such a creation would be a monstrosity,
just as likely to topple over as to barely function.&lt;/p&gt;
&lt;p&gt;I didn&#39;t try to convince him, because honestly, how could I know? But the
question has dominated my life ever since.&lt;/p&gt;
&lt;p&gt;When things don&#39;t connect, why don&#39;t they connect? When they do, why? How?
…and who?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Postel&#39;s Law&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The closest clue I&#39;ve found is this thing called Postel&#39;s Law, one of the
foundational principles of the Internet. It was best stated by one of the
founders of the Internet, Jon Postel. &quot;Be conservative in what you send, and
liberal in what you accept.&quot;&lt;/p&gt;
&lt;p&gt;What it means to me is, if there&#39;s a standard, do your best to follow it,
when you&#39;re sending. And when you&#39;re receiving, uh, assume the best
intentions of your counterparty and do your best and if that doesn&#39;t work,
guess.&lt;/p&gt;
&lt;p&gt;A rephrasing I use sometimes is, &quot;It takes two to miscommunicate.&quot;
Communication works best and most smoothly if you have a good listener and a
clear speaker, sharing a language and context. But it can still bumble along
successfully if you have a poor speaker with a great listener, or even a
great speaker with a mediocre listener. Sometimes you have to say the same
thing five ways before it gets across (wifi packet retransmits), or ask way
too many clarifying questions, but if one side or the other is diligent
enough, you can almost always make it work.&lt;/p&gt;
&lt;p&gt;This asymmetry is key to all high-level communication. It makes network bugs
much less severe. Without Postel&#39;s Law, triggering a bug in the sender would
break the connection; so would triggering a bug in the receiver. With
Postel&#39;s Law, we acknowledge from the start that there are always bugs and
we have twice as many chances to work around them. Only if you trigger both
sets of bugs at once is the flaw fatal.&lt;/p&gt;
&lt;p&gt;…So okay, if you&#39;ve used the Internet, you&#39;ve probably observed that fatal
connection errors are nevertheless pretty common. But that misses how
&lt;em&gt;incredibly much more common&lt;/em&gt; they would be in a non-Postel world. That
world would be the one my physics teacher imagined, where nothing ever works
and it all topples over.&lt;/p&gt;
&lt;p&gt;And we know that&#39;s true because we&#39;ve tried it. Science! Let us digress.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;XML&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We had the Internet (&quot;OSI Layer 3&quot;) mostly figured out by the time my era
began in the late 1900s, but higher layers of the stack still had work to
do. It was the early days of the web. We had these newfangled hypertext
(&quot;HTML&quot;) browsers that would connect to a server, download some stuff, and
then try their best to render it.&lt;/p&gt;
&lt;p&gt;Web browsers are and have always been an epic instantiation of Postel&#39;s Law.
From the very beginning, they assumed that the server (content author) had
absolutely no clue what they were doing and did their best to apply some
kind of meaning on top, despite every indication that this was a lost cause.
List items that never end? Sure. Tags you&#39;ve never heard of? Whatever.
Forgot some semicolons in your javascript? I&#39;ll interpolate some. Partially
overlapping italics and bold? Leave it to me. No indication what language or
encoding the page is in? I&#39;ll just guess.&lt;/p&gt;
&lt;p&gt;The evolution of browsers gives us some insight into why Postel&#39;s Law is a
law and not just, you know, Postel&#39;s Advice. The answer is: competition. It
works like this. If your browser interprets someone&#39;s mismash subjectively
better than another browser, your browser wins.&lt;/p&gt;
&lt;p&gt;I think economists call this an iterated prisoner&#39;s dilemma. Over and over,
people write web pages (defect) and browsers try to render them (defect) and
absolutely nobody actually cares what the HTML standard says (stays loyal).
Because if there&#39;s a popular page that&#39;s wrong and you render it &quot;right&quot; and
it doesn&#39;t work? Straight to jail.&lt;/p&gt;
&lt;p&gt;(By now almost all the evolutionary lines of browsers have been sent to
jail, one by one, and the HTML standard is effectively whatever Chromium and
Safari say it is. Sorry.)&lt;/p&gt;
&lt;p&gt;This law offends engineers to the deepness of their soul. We went through a
period where loyalists would run their pages through &quot;validators&quot; and
proudly add a logo to the bottom of their page saying how valid their HTML
was. Browsers, of course, didn&#39;t care and continued to try their best.&lt;/p&gt;
&lt;p&gt;Another valiant effort was the definition of &quot;quirks mode&quot;: a legacy
rendering mode meant to document, normalize, and push aside all the legacy
wonko interpretations of old web pages. It was paired with a new,
standards-compliant rendering mode that everyone was supposed to agree on,
starting from scratch with an actual written spec and tests this time, and
public shaming if you made a browser that did it wrong. Of course, outside
of browser academia, nobody cares about the public shaming and everyone
cares if your browser can render the popular web sites, so there are still
plenty of quirks outside quirks mode. It&#39;s better and it was well worth the
effort, but it&#39;s not all the way there. It never can be.&lt;/p&gt;
&lt;p&gt;We can be sure it&#39;s not all the way there because there was another exciting
development, HTML Strict (and its fancier twin, XHTML), which was meant to
be the same thing, but with a special feature. Instead of sending browsers
to jail for rendering wrong pages wrong, we&#39;d send page authors to jail for
writing wrong pages!&lt;/p&gt;
&lt;p&gt;To mark your web page as HTML Strict was a vote against the iterated
prisoner&#39;s dilemma and Postel&#39;s Law. No, your vote said. No more. We cannot
accept this madness. We are going to be Correct. I certify this page is
correct. If it is not correct, you must sacrifice me, not all of society. My
honour demands it.&lt;/p&gt;
&lt;p&gt;Anyway, many page authors were thus sacrificed and now nobody uses HTML
Strict. Nobody wants to do tech support for a web page that asks browsers to
crash when parsing it, when you can just… not do that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Excuse me, the above XML section didn&#39;t have any XML&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yes, I&#39;m getting to that. (And you&#39;re soon going to appreciate that meta
joke about schemas.)&lt;/p&gt;
&lt;p&gt;In parallel with that dead branch of HTML, a bunch of people had realized
that, more generally, HTML-like languages (technically SGML-like languages)
had turned out to be a surprisingly effective way to build interconnected
data systems.&lt;/p&gt;
&lt;p&gt;In retrospect we now know that the reason for HTML&#39;s resilience is Postel&#39;s
Law. It&#39;s simply easier to fudge your way through parsing incorrect
hypertext, than to fudge your way through parsing a Microsoft Word or Excel
file&#39;s hairball of binary OLE streams, which famously even Microsoft at one
point lost the knowledge of how to parse. But, that Postel&#39;s Law connection
wasn&#39;t really understood at the time.&lt;/p&gt;
&lt;p&gt;Instead we had a different hypothesis: &quot;separation of structure and
content.&quot; Syntax and semantics. Writing software to deal with structure is
repetitive overhead, and content is where the money is. Let&#39;s automate away
the structure so you can spend your time on the content: semantics.&lt;/p&gt;
&lt;p&gt;We can standardize the syntax with a single Extensible Markup Language
(XML). Write your content, then &quot;mark it up&quot; by adding structure right in
the doc, just like we did with plaintext human documents. Data, plus
self-describing metadata, all in one place. Never write a parser again!&lt;/p&gt;
&lt;p&gt;Of course, with 20/20 hindsight (or now 2025 hindsight), this is laughable.
Yes, we now have XML parser libraries. If you&#39;ve ever tried to use one, you
will find they indeed produce parse trees automatically… if you&#39;re lucky. If
you&#39;re not lucky, they produce a stream of &quot;tokens&quot; and leave it to you to
figure out how to arrange it in a tree, for reasons involving streaming,
performance, memory efficiency, and so on. Basically, if you use XML you now
have to &lt;em&gt;deeply&lt;/em&gt; care about structure, perhaps more than ever, but you also
have to include some giant external parsing library that, left in its normal
mode, &lt;a href=&quot;https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html&quot;&gt;might spontaneously start making a lot of uncached HTTP requests that
can also exploit remote code execution vulnerabilities haha
oops&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you&#39;ve ever taken a parser class, or even if you&#39;ve just barely tried to
write a parser, you&#39;ll know the truth: the value added by outsourcing
&lt;em&gt;parsing&lt;/em&gt; (or in some cases only tokenization) is not a lot. This is because
almost all the trouble of document processing (or compiling) is the
&lt;em&gt;semantic&lt;/em&gt; layer, the part where you make sense of the parse tree. The part
where you just read a stream of characters into a data structure is the
trivial, well-understood first step.&lt;/p&gt;
&lt;p&gt;Now, semantics is where it gets interesting. XML was all about separating
syntax from semantics. And they did some pretty neat stuff with that
separation, in a computer science sense. XML is neat because it&#39;s such a
regular and strict language that you can completely &lt;em&gt;validate&lt;/em&gt; the syntax
(text and tags) without knowing what any of the tags &lt;em&gt;mean&lt;/em&gt; or which tags
are intended to be valid at all.&lt;/p&gt;
&lt;p&gt;…aha! Did someone say &lt;em&gt;validate?!&lt;/em&gt; Like those old HTML validators we
talked about? Oh yes. Yes! And this time the validation will be completely
strict and baked into every implementation from day 1. And, the language
syntax itself will be so easy and consistent to validate (unlike SGML and
HTML, which are, in all fairness, bananas) that nobody can possibly screw it
up.&lt;/p&gt;
&lt;p&gt;A layer on top of this basic, highly validatable XML, was a thing called XML
Schemas. These were documents (mysteriously not written in XML) that
described which tags were allowed in which places in a certain kind of
document. Not only could you parse and validate the basic XML syntax, you
could also then validate its XML schema as a separate step, to be totally
sure that every tag in the document was allowed where it was used, and
present if it was required. And if not? Well, straight to jail. We all
agreed on this, everyone. Day one. No exceptions. Every document validates.
Straight to jail.&lt;/p&gt;
&lt;p&gt;Anyway XML schema validation became an absolute farce. Just parsing or
understanding, let alone writing, the awful schema file format is an
unpleasant ordeal. To say nothing of complying with the schema, or (heaven
forbid) obtaining a copy of someone&#39;s custom schema and loading it into the
validator at the right time.&lt;/p&gt;
&lt;p&gt;The core XML syntax validation was easy enough to do while parsing.
Unfortunately, in a second violation of Postel&#39;s Law, almost no software
that &lt;em&gt;outputs&lt;/em&gt; XML runs it through a validator before sending. I mean, why
would they, the language is highly regular and easy to generate and thus the
output is already perfect. …Yeah, sure.&lt;/p&gt;
&lt;p&gt;Anyway we all use JSON now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Whoa, wait! I wasn&#39;t done!&lt;/p&gt;
&lt;p&gt;This is the part where I note, for posterity&#39;s sake, that XML became a
decade-long fad in the early 2000s that justified billions of dollars of
software investment. None of XML&#39;s technical promises played out; it is a
stain on the history of the computer industry. But, a lot of legacy software
got un-stuck because of those billions of dollars, and so we did make
progress.&lt;/p&gt;
&lt;p&gt;What was that progress? Interconnection.&lt;/p&gt;
&lt;p&gt;Before the Internet, we kinda didn&#39;t really need to interconnect software
together. I mean, we sort of did, like cut-and-pasting between apps on
Windows or macOS or X11, all of which were surprisingly difficult little
mini-Postel&#39;s Law protocol adventures in their own right and remain quite
useful when they work (&lt;a href=&quot;https://news.ycombinator.com/item?id=31356896&quot;&gt;except &quot;paste formatted text,&quot; wtf are you people
thinking&lt;/a&gt;). What makes
cut-and-paste possible is top-down standards imposed by each operating
system vendor.&lt;/p&gt;
&lt;p&gt;If you want the same kind of thing on the open Internet, ie. the ability to
&quot;copy&quot; information out of one server and &quot;paste&quot; it into another, you need
&lt;em&gt;some&lt;/em&gt; kind of standard. XML was a valiant effort to create one. It didn&#39;t
work, but it was valiant.&lt;/p&gt;
&lt;p&gt;Whereas all that money investment &lt;em&gt;did&lt;/em&gt; work. Companies spent billions of
dollars to update their servers to publish APIs that could serve not just
human-formatted HTML, but also something machine-readable. The great
innovation was not XML per se, it was serving data over HTTP that wasn&#39;t
always HTML. That was a big step, and didn&#39;t become obvious until afterward.&lt;/p&gt;
&lt;p&gt;The most common clients of HTTP were web browsers, and web browsers only
knew how to parse two things: HTML and javascript. To a first approximation,
valid XML is &quot;valid&quot; (please don&#39;t ask the validator) HTML, so we could do
that at first, and there were some Microsoft extensions. Later, after a few
billions of dollars, true standardized XML parsing arrived in browsers.
Similarly, to a first approximation, valid JSON is valid javascript, which
woo hoo, that&#39;s a story in itself (you could parse it with eval(), tee hee)
but that&#39;s why we got here.&lt;/p&gt;
&lt;p&gt;JSON (minus the rest of javascript) is a vastly simpler language than XML.
It&#39;s easy to consistently parse (&lt;a href=&quot;https://github.com/tailscale/hujson&quot;&gt;other than that pesky trailing
comma&lt;/a&gt;); browsers already did. It
represents only (a subset of) the data types normal programming languages
already have, unlike XML&#39;s weird mishmash of single attributes, multiply
occurring attributes, text content, and CDATA. It&#39;s obviously a tree and
everyone knows how that tree will map into their favourite programming
language. It inherently works with unicode and only unicode. You don&#39;t need
cumbersome and duplicative &quot;closing tags&quot; that double the size of every
node. And best of all, no guilt about skipping that overcomplicated and
impossible-to-get-right schema validator, because, well, nobody liked
schemas anyway so nobody added them to JSON
(&lt;a href=&quot;https://json-schema.org/&quot;&gt;almost&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Today, if you look at APIs you need to call, you can tell which ones were a
result of the $billions invested in the 2000s, because it&#39;s all XML. And you
can tell which came in the 2010s and later after learning some hard lessons,
because it&#39;s all JSON. But either way, the big achievement is you can call
them all from javascript. That&#39;s pretty good.&lt;/p&gt;
&lt;p&gt;(Google is an interesting exception: they invented and used protobuf during
the same time period because they disliked XML&#39;s inefficiency, they did like
schemas, and they had the automated infrastructure to make schemas actually
work (mostly, after more hard lessons). But it mostly didn&#39;t spread beyond
Google… maybe because it&#39;s hard to do from javascript.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Blockchain&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The 2010s were another decade of massive multi-billion dollar tech
investment. Once again it was triggered by an overwrought boondoggle
technology, and once again we benefited from systems finally getting updated
that really needed to be updated.&lt;/p&gt;
&lt;p&gt;Let&#39;s leave aside cryptocurrencies (which although used primarily for crime,
at least demonstrably have a functioning use case, ie. crime) and look at
the more general form of the technology.&lt;/p&gt;
&lt;p&gt;Blockchains in general make the promise of a &quot;distributed ledger&quot; which
allows everyone the ability to make claims and then later validate other
people&#39;s claims. The claims that &quot;real&quot; companies invested in were meant to
be about manufacturing, shipping, assembly, purchases, invoices, receipts,
ownership, and so on. What&#39;s the pattern? That&#39;s the stuff of businesses
doing business with other businesses. In other words, data exchange. Data
exchange is exactly what XML didn&#39;t really solve (although progress was made
by virtue of the dollars invested) in the previous decade.&lt;/p&gt;
&lt;p&gt;Blockchain tech was a more spectacular boondoggle than XML for a few
reasons. First, it didn&#39;t even have a purpose you could explain. Why do we
even need a purely distributed system for this? Why can&#39;t we just trust a
third party auditor? Who even wants their entire supply chain (including
number of widgets produced and where each one is right now) to be visible to
the whole world? What is the problem we&#39;re trying to solve with that?&lt;/p&gt;
&lt;p&gt;…and you know there really was no purpose, because after all the huge
 investment to rewrite all that stuff, which was itself valuable work, we
 simply dropped the useless blockchain part and then we were fine. I don&#39;t
 think even the people working on it felt like they needed a real
 distributed ledger. They just needed an &lt;em&gt;updated&lt;/em&gt; ledger and a budget to
 create one. If you make the &quot;ledger&quot; module pluggable in your big fancy
 supply chain system, you can later drop out the useless &quot;distributed&quot;
 ledger and use a regular old ledger. The protocols, the partnerships, the
 databases, the supply chain, and all the rest can stay the same.&lt;/p&gt;
&lt;p&gt;In XML&#39;s defense, at least it was not worth the effort to rip out once the
world came to its senses.&lt;/p&gt;
&lt;p&gt;Another interesting similarity between XML and blockchains was the computer
science appeal. A particular kind of person gets very excited about
&lt;em&gt;validation&lt;/em&gt; and &lt;em&gt;verifiability.&lt;/em&gt; Both times, the whole computer industry
followed those people down into the pits of despair and when we finally
emerged… still no validation, still no verifiability, still didn&#39;t matter.
Just some computers communicating with each other a little better than they
did before.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LLMs&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the 2020s, our industry fad is LLMs. I&#39;m going to draw some comparisons
here to the last two fads, but there are some big differences too.&lt;/p&gt;
&lt;p&gt;One similarity is the computer science appeal: so much math! Just the
matrix sizes alone are a technological marvel the likes of which we have
never seen. Beautiful. Colossal. Monumental. An inspiration to nerds
everywhere.&lt;/p&gt;
&lt;p&gt;But a big difference is verification and validation. If there is one thing
LLMs absolutely are not, it&#39;s &lt;em&gt;verifiable.&lt;/em&gt; LLMs are the flakiest thing the
computer industry has ever produced! So far. And remember, this is the
industry that brought you HTML rendering.&lt;/p&gt;
&lt;p&gt;LLMs are an almost cartoonishly amplified realization of Postel&#39;s Law. They
write human grammar perfectly, or almost perfectly, or when they&#39;re not
perfect it&#39;s a bug and we train them harder. And, they can receive just
about any kind of gibberish and turn it into a data structure. In other
words, they&#39;re conservative in what they send and liberal in what they
accept.&lt;/p&gt;
&lt;p&gt;LLMs also solve the syntax problem, in the sense that they can figure out
how to transliterate (convert) basically any file syntax into any other.
Modulo flakiness. But if you need a CSV in the form of a limerick or a
quarterly financial report formatted as a mysql dump, sure, no problem, make
it so.&lt;/p&gt;
&lt;p&gt;In theory we already had syntax solved though. XML and JSON did that
already. We were even making progress interconnecting old school company
supply chain stuff the hard way, thanks to our nominally XML- and
blockchain- investment decades. We had to do every interconnection by hand –
by writing an adapter – but we could do it.&lt;/p&gt;
&lt;p&gt;What&#39;s really new is that LLMs address &lt;em&gt;semantics.&lt;/em&gt; Semantics are the
biggest remaining challenge in connecting one system to another. If XML
solved syntax, that was the first 10%. Semantics are the last 90%. When I
want to copy from one database to another, how do I map the fields? When I
want to scrape a series of uncooperative web pages and turn it into a table
of products and prices, how do I turn that HTML into something structured?
(Predictably &lt;a href=&quot;https://microformats.org/&quot;&gt;microformats&lt;/a&gt;, aka schemas, did not
work out.) If I want to query a database (or join a few disparate
databases!) using some language that isn&#39;t SQL, what options do I have?&lt;/p&gt;
&lt;p&gt;LLMs can do it all.&lt;/p&gt;
&lt;p&gt;Listen, we can argue forever about whether LLMs &quot;understand&quot; things, or will
achieve anything we might call intelligence, or will take over the world and
eradicate all humans, or are useful assistants, or just produce lots of text
sludge that will certainly clog up the web and social media, or will also be
able to filter the sludge, or what it means for capitalism that we willingly
invented a machine we pay to produce sludge that we also pay to remove the
sludge.&lt;/p&gt;
&lt;p&gt;But what we can&#39;t argue is that LLMs interconnect things. Anything. To
anything. Whether you like it or not. Whether it&#39;s bug free or not (spoiler:
it&#39;s not). Whether it gets the right answer or not (spoiler: erm…).&lt;/p&gt;
&lt;p&gt;This is the thing we have gone through at least two decades of hype cycles
desperately chasing. (Three, if you count java &quot;write once run anywhere&quot; in
the 1990s.) It&#39;s application-layer interconnection, the holy grail of the
Internet.&lt;/p&gt;
&lt;p&gt;And this time, it actually works! (mostly)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The curse of success&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;LLMs aren&#39;t going away. Really we should coin a term for this use case, call
it &quot;b2b AI&quot; or something. For this use case, LLMs work. And they&#39;re still
getting better and the precision will improve with practice. For example,
imagine asking an LLM to write a data translator in some conventional
programming language, instead of asking it to directly translate a dataset
on its own. We&#39;re still at the beginning.&lt;/p&gt;
&lt;p&gt;But, this use case, which I predict is the big one, isn&#39;t what we expected.
We expected LLMs to write poetry or give strategic advice or whatever. We
didn&#39;t expect them to call APIs and immediately turn around and use what it
learned to call other APIs.&lt;/p&gt;
&lt;p&gt;After 30 years of trying and failing to connect one system to another, we
now have a literal universal translator. Plug it into any two things and
it&#39;ll just go, for better or worse, no matter how confused it becomes. And
everyone is doing it, fast, often with a corporate mandate to do it even
faster.&lt;/p&gt;
&lt;p&gt;This kind of scale and speed of (successful!) rollout is unprecedented,
even by the Internet itself, and especially in the glacially slow world of
enterprise system interconnections, where progress grinds to a halt once a
decade only to be finally dislodged by the next misguided technology wave.
Nobody was prepared for it, so nobody was prepared for the consequences.&lt;/p&gt;
&lt;p&gt;One of the odd features of Postel&#39;s Law is it&#39;s irresistible. Big Central
Infrastructure projects rise and fall with funding, but Postel&#39;s Law
projects are powered by love. A little here, a little there, over time. One
more person plugging one more thing into one more other thing. We did it
once with the Internet, overcoming all the incompatibilities at OSI layers 1
and 2. It subsumed, it is still subsuming, everything.&lt;/p&gt;
&lt;p&gt;Now we&#39;re doing it again at the application layer, the information layer.
And just like we found out when we connected all the computers together the
first time, naively hyperconnected networks make it easy for bad actors to
spread and disrupt at superhuman speeds. We had to invent firewalls, NATs,
TLS, authentication systems, two-factor authentication systems,
phishing-resistant two-factor authentication systems, methodical software
patching, CVE tracking, sandboxing, antivirus systems, EDR systems, DLP
systems, everything. We&#39;ll have to do it all again, but faster and
different.&lt;/p&gt;
&lt;p&gt;Because this time, it&#39;s all software.&lt;/p&gt;
    </description>
  </item>
  
  
  <item>
    <title>
      Billionaire math
    </title>
    <pubDate>Fri, 11 Jul 2025 16:18:52 +0000</pubDate>
    <link>https://apenwarr.ca/log/20250711</link>
    
    <guid isPermaLink="true">https://apenwarr.ca/log/20250711</guid>
    
    <description>
    &lt;p&gt;I have a friend who exited his startup a few years ago and is now rich. How
rich is unclear. One day, we were discussing ways to expedite the delivery
of his superyacht and I suggested paying extra. His response, as to so
many of my suggestions, was, “Avery, I’m not &lt;em&gt;that&lt;/em&gt; rich.”&lt;/p&gt;
&lt;p&gt;Everyone has their limit.&lt;/p&gt;
&lt;p&gt;I, too, am not that rich. I have shares in a startup that has not exited,
and they seem to be gracefully ticking up in value as the years pass. But I
have to come to work each day, and if I make a few wrong medium-quality
choices (not even bad ones!), it could all be vaporized in an instant.
Meanwhile, I can’t spend it. So what I have is my accumulated savings from a
long career of writing software and modest tastes (I like hot dogs).&lt;/p&gt;
&lt;p&gt;Those accumulated savings and modest tastes are enough to retire
indefinitely. Is that bragging? It was true even before I started my
startup. Back in 2018, I calculated my “personal runway” to see how long I
could last if I started a company and we didn’t get funded, before I had to
go back to work. My conclusion was I should move from New York City back to
Montreal and then stop worrying about it forever.&lt;/p&gt;
&lt;p&gt;Of course, being in that position means I’m lucky and special. But I’m not
&lt;em&gt;that&lt;/em&gt; lucky and special. My numbers aren’t that different from the average
Canadian or (especially) American software developer nowadays. We all talk a
lot about how the “top 1%” are screwing up society, but software developers
nowadays fall mostly in the top 1-2%[1] of income earners in the US or
Canada. It doesn’t feel like we’re that rich, because we’re surrounded by
people who are about equally rich. And we occasionally bump into a few who
are much more rich, who in turn surround themselves with people who are
about equally rich, so they don’t feel that rich either.&lt;/p&gt;
&lt;p&gt;But, we’re rich.&lt;/p&gt;
&lt;p&gt;Based on my readership demographics, if you’re reading this, you’re probably
a software developer. Do you feel rich?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;It’s all your fault&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;So let’s trace this through. By the numbers, you’re probably a software
developer. So you’re probably in the top 1-2% of wage earners in your
country, and even better globally. So you’re one of those 1%ers ruining
society.&lt;/p&gt;
&lt;p&gt;I’m not the first person to notice this. When I read other posts about it,
they usually stop at this point and say, ha ha. Okay, obviously that’s not
what we meant. Most 1%ers are nice people who pay their taxes. Actually it’s
the top 0.1% screwing up society!&lt;/p&gt;
&lt;p&gt;No.&lt;/p&gt;
&lt;p&gt;I’m not letting us off that easily. Okay, the 0.1%ers are probably worse
(with apologies to my friend and his chronically delayed superyacht). But,
there aren’t that many of them[2] which means they aren’t as powerful as
they think. No one person has very much capacity to do bad things. They only
have the capacity to pay other people to do bad things.&lt;/p&gt;
&lt;p&gt;Some people have no choice but to take that money and do some bad things so
they can feed their families or whatever. But that’s not you. That’s not us.
We’re rich. If we do bad things, that’s entirely on us, no matter who’s
paying our bills.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;What does the top 1% spend their money on?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Mostly real estate, food, and junk. If they have kids, maybe they spend a
few hundred $k on overpriced university education (which in sensible
countries is free or cheap).&lt;/p&gt;
&lt;p&gt;What they &lt;em&gt;don’t&lt;/em&gt; spend their money on is making the world a better place.
Because they are convinced they are &lt;em&gt;not that rich&lt;/em&gt; and the world’s problems
are caused by &lt;em&gt;somebody else&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;When I worked at a megacorp, I spoke to highly paid software engineers who
were torn up about their declined promotion to L4 or L5 or L6, because they
needed to earn more money, because without more money they wouldn’t be able
to afford the mortgage payments on an &lt;a href=&quot;https://apenwarr.ca/log/20180918&quot;&gt;overpriced $1M+ run-down Bay Area
townhome&lt;/a&gt; which is a prerequisite to
starting a family and thus living a meaningful life. This treadmill started
the day after graduation.[3]&lt;/p&gt;
&lt;p&gt;I tried to tell some of these L3 and L4 engineers that they were already in
the top 5%, probably top 2% of wage earners, and their earning potential was
only going up. They didn’t believe me until I showed them the arithmetic and
the economic stats. And even then, facts didn’t help, because it didn’t make
their fears about money go away. They &lt;em&gt;needed&lt;/em&gt; more money before they could
feel safe, and in the meantime, they had no disposable income. Sort of.
Well, for the sort of definition of disposable income that rich people
use.[4]&lt;/p&gt;
&lt;p&gt;Anyway there are psychology studies about this phenomenon. “&lt;a href=&quot;https://www.cbc.ca/news/business/why-no-one-feels-rich-1.5138657&quot;&gt;What people
consider rich is about three times what they currently
make&lt;/a&gt;.” No
matter what they make. So, I’ll forgive you for falling into this trap. I’ll
even forgive me for falling into this trap.&lt;/p&gt;
&lt;p&gt;But it’s time to fall out of it.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The meaning of life&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;My rich friend is a fountain of wisdom. Part of this wisdom came from the
shock effect of going from normal-software-developer rich to
founder-successful-exit rich, all at once. He described his existential
crisis: “Maybe you do find something you want to spend your money on. But,
I&#39;d bet you never will. It’s a rare problem. M&lt;strong&gt;oney, which is the driver
for everyone, is no longer a thing in my life.&lt;/strong&gt;”&lt;/p&gt;
&lt;p&gt;Growing up, I really liked the saying, “Money is just a way of keeping
score.” I think that metaphor goes deeper than most people give it credit
for. Remember &lt;a href=&quot;https://www.reddit.com/r/Mario/comments/13v3hoc/what_even_is_the_point_of_the_score_counter/&quot;&gt;old Super Mario Brothers, which had a vestigial score
counter&lt;/a&gt;?
Do you know anybody who rated their Super Mario Brothers performance based
on the score? I don’t. I’m sure those people exist. They probably have
Twitch channels and are probably competitive to the point of being annoying.
Most normal people get some other enjoyment out of Mario that is not from
the score. Eventually, Nintendo stopped including a score system in Mario
games altogether. Most people have never noticed. The games are still fun.&lt;/p&gt;
&lt;p&gt;Back in the world of capitalism, we’re still keeping score, and we’re still
weirdly competitive about it. We programmers, we 1%ers, are in the top
percentile of capitalism high scores in the entire world - that’s the
literal definition - but we keep fighting with each other to get closer to
top place. Why?&lt;/p&gt;
&lt;p&gt;Because we forgot there’s anything else. Because someone convinced us that
the score even matters.&lt;/p&gt;
&lt;p&gt;The saying isn’t, “Money is &lt;em&gt;the way&lt;/em&gt; of keeping score.” Money is &lt;em&gt;just one
way&lt;/em&gt; of keeping score.&lt;/p&gt;
&lt;p&gt;It’s mostly a pretty good way. Capitalism, for all its flaws, mostly aligns
incentives so we’re motivated to work together and produce more stuff, and
more valuable stuff, than otherwise. Then it automatically gives more power
to people who empirically[5] seem to be good at organizing others to make
money. Rinse and repeat. Number goes up.&lt;/p&gt;
&lt;p&gt;But there are limits. And in the ever-accelerating feedback loop of modern
capitalism, more people reach those limits faster than ever. They might
realize, like my friend, that money is no longer a thing in their life. You
might realize that. We might.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;There’s nothing more dangerous than a powerful person with nothing to prove&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Billionaires run into this existential crisis, that they obviously have to
have something to live for, and money just isn’t it. Once you can buy
anything you want, you quickly realize that what you want was not very
expensive all along. And then what?&lt;/p&gt;
&lt;p&gt;Some people, the less dangerous ones, retire to their superyacht (if it ever
finally gets delivered, come on already). The dangerous ones pick ever
loftier goals (colonize Mars) and then bet everything on it. Everything.
Their time, their reputation, their relationships, their fortune, their
companies, their morals, everything they’ve ever built. Because if there’s
nothing on the line, there’s no reason to wake up in the morning. And they
really &lt;em&gt;need&lt;/em&gt; to want to wake up in the morning. Even if the reason to wake
up is to deal with today’s unnecessary emergency. As long as, you know, the
emergency requires &lt;em&gt;them&lt;/em&gt; to &lt;em&gt;do something&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Dear reader, statistically speaking, you are not a billionaire. But you have
this problem.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;So what then&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Good question. We live at a moment in history when society is richer and
more productive than it has ever been, with opportunities for even more of
us to become even more rich and productive even more quickly than ever. And
yet, we live in existential fear: the fear that nothing we do matters.[6][7]&lt;/p&gt;
&lt;p&gt;I have bad news for you. This blog post is not going to solve that.&lt;/p&gt;
&lt;p&gt;I have worse news. 98% of society gets to wake up each day and go to work
because they have no choice, so at worst, for them this is a background
philosophical question, like the trolley problem.&lt;/p&gt;
&lt;p&gt;Not you.&lt;/p&gt;
&lt;p&gt;For you this unsolved philosophy problem is urgent &lt;em&gt;right now&lt;/em&gt;. There are
people tied to the tracks. You’re driving the metaphorical trolley. Maybe
nobody told you you’re driving the trolley. Maybe they lied to you and said
someone else is driving. Maybe you have no idea there are people on the
tracks. Maybe you do know, but you’ll get promoted to L6 if you pull the
right lever. Maybe you’re blind. Maybe you’re asleep. Maybe there are no
people on the tracks after all and you’re just destined to go around and
around in circles, forever.&lt;/p&gt;
&lt;p&gt;But whatever happens next: you chose it.&lt;/p&gt;
&lt;p&gt;We chose it.&lt;/p&gt;
&lt;p style=&quot;padding-top: 2em;&quot;&gt;&lt;b&gt;Footnotes&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;[1] Beware of estimates of the “average income of the top 1%.” That average
includes all the richest people in the world. You only need to earn the very
bottom of the 1% bucket in order to be in the top 1%.&lt;/p&gt;
&lt;p&gt;[2] If the population of the US is 340 million, there are actually 340,000
people in the top 0.1%.&lt;/p&gt;
&lt;p&gt;[3] I’m Canadian so I’m disconnected from this phenomenon, but if TV and
movies are to be believed, in America the treadmill starts all the way back
in high school where you stress over getting into an elite university so
that you can land the megacorp job after graduation so that you can stress
about getting promoted. If that’s so, I send my sympathies. That’s not how
it was where I grew up.&lt;/p&gt;
&lt;p&gt;[4] Rich people like us methodically put money into savings accounts,
investments, life insurance, home equity, and so on, and only what’s left
counts as “disposable income.” This is not the definition normal people use.&lt;/p&gt;
&lt;p&gt;[5] Such an interesting double entendre.&lt;/p&gt;
&lt;p&gt;[6] This is what AI doomerism is about. A few people have worked themselves
into a terror that if AI becomes too smart, it will realize that humans are
not actually that useful, and eliminate us in the name of efficiency. That’s
not a story about AI. It’s a story about what we already worry is true.&lt;/p&gt;
&lt;p&gt;[7] I’m in favour of Universal Basic Income (UBI), but it has a big
problem: it reduces your need to wake up in the morning. If the alternative
is &lt;a href=&quot;https://en.wikipedia.org/wiki/Bullshit_Jobs&quot;&gt;bullshit jobs&lt;/a&gt; or suffering
then yeah, UBI is obviously better. And the people who think that if you
don’t work hard, you don’t deserve to live, are nuts. But it’s horribly
dystopian to imagine a society where lots of people wake up and have nothing
that motivates them. The utopian version is to wake up and be able to spend
all your time doing what gives your life meaning. Alas, so far science has
produced no evidence that anything gives your life meaning.&lt;/p&gt;
    </description>
  </item>
  
  
  <item>
    <title>
      The evasive evitability of enshittification
    </title>
    <pubDate>Sun, 15 Jun 2025 02:52:58 +0000</pubDate>
    <link>https://apenwarr.ca/log/20250530</link>
    
    <guid isPermaLink="true">https://apenwarr.ca/log/20250530</guid>
    
    <description>
    &lt;p&gt;Our company recently announced a fundraise.  We were grateful for all
the community support, but the Internet also raised a few of its collective
eyebrows, wondering whether this meant the dreaded “enshittification” was
coming next.&lt;/p&gt;
&lt;p&gt;That word describes a very real pattern we’ve all seen before: products
start great, grow fast, and then slowly become worse as the people running
them trade user love for short-term revenue.&lt;/p&gt;
&lt;p&gt;It’s a topic I find genuinely fascinating, and I&#39;ve seen the downward spiral
firsthand at companies I once admired. So I want to talk about why this
happens, and more importantly, why it won&#39;t happen to us. That&#39;s big talk, I
know. But it&#39;s a promise I&#39;m happy for people to hold us to.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is enshittification?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The term &quot;enshittification&quot; was first popularized in a &lt;a href=&quot;https://pluralistic.net/2023/01/21/potemkin-ai/#hey-guys&quot;&gt;blog post by Corey
Doctorow&lt;/a&gt;, who put
a catchy name to an effect we&#39;ve all experienced. Software starts off good,
then goes bad. How? Why?&lt;/p&gt;
&lt;p&gt;Enshittification proposes not just a name, but a mechanism. First, a product
is well loved and gains in popularity, market share, and revenue. In fact,
it gets so popular that it starts to defeat competitors. Eventually, it&#39;s
the primary product in the space: a monopoly, or as close as you can get.
And then, suddenly, the owners, who are Capitalists, have their evil nature
finally revealed and they exploit that monopoly to raise prices and make the
product worse, so the captive customers all have to pay more. Quality
doesn&#39;t matter anymore, only exploitation.&lt;/p&gt;
&lt;p&gt;I agree with most of that thesis. I think Doctorow has that mechanism
&lt;em&gt;mostly&lt;/em&gt; right. But, there&#39;s one thing that doesn&#39;t add up for me:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enshittification is not a success mechanism.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I can&#39;t think of any examples of companies that, in real life, enshittified
because they were &lt;em&gt;successful&lt;/em&gt;. What I&#39;ve seen is companies that made their
product worse because they were... scared.&lt;/p&gt;
&lt;p&gt;A company that&#39;s growing fast can afford to be optimistic. They create a
positive feedback loop: more user love, more word of mouth, more users, more
money, more product improvements, more user love, and so on. Everyone in the
company can align around that positive feedback loop. It&#39;s a beautiful
thing. It&#39;s also fragile: miss a beat and it flattens out, and soon it&#39;s a
downward spiral instead of an upward one.&lt;/p&gt;
&lt;p&gt;So, if I were, hypothetically, running a company, I think I would be pretty
hesitant to deliberately sacrifice any part of that positive feedback loop,
the loop I and the whole company spent so much time and energy building, to
see if I can grow faster. User love? Nah, I&#39;m sure we&#39;ll be fine, look how
much money and how many users we have! Time to switch strategies!&lt;/p&gt;
&lt;p&gt;Why would I do that? Switching strategies is always a tremendous risk. When
you switch strategies, it&#39;s triggered by passing a threshold, where something
fundamental changes, and your old strategy becomes wrong.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Threshold moments and control&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;https://en.wikipedia.org/wiki/Reversing_Falls&quot;&gt;Saint John, New Brunswick, there&#39;s a
river&lt;/a&gt; that flows one
direction at high tide, and the other way at low tide. Four times a day,
gravity equalizes, then crosses a threshold to gently start pulling the
other way, then accelerates. What &lt;em&gt;doesn&#39;t&lt;/em&gt; happen is a rapidly flowing
river in one direction &quot;suddenly&quot; shifts to rapidly flowing the other way.
Yes, there&#39;s an instant where the limit from the left is positive and the
limit from the right is negative. But you can see that threshold coming.
It&#39;s predictable.&lt;/p&gt;
&lt;p&gt;In my experience, for a company or a product, there are two kinds of
thresholds like this, that build up slowly and then when crossed, create a
sudden flow change.&lt;/p&gt;
&lt;p&gt;The first one is control: if the visionaries in charge lose control, chances
are high that their replacements won&#39;t &quot;get it.&quot;&lt;/p&gt;
&lt;p&gt;The new people didn&#39;t build the underlying feedback loop, and so they don&#39;t
realize how fragile it is. There are lots of reasons for a change in
control: financial mismanagement, boards of directors, hostile takeovers.&lt;/p&gt;
&lt;p&gt;The worst one is temptation. Being a founder is, well, it actually sucks.
It&#39;s oddly like being repeatedly punched in the face. When I look back at my
career, I guess I&#39;m surprised by how few times per day it feels like I was
punched in the face. But, the
constant face punching gets to you after a while. Once you&#39;ve established a
great product, and amazing customer love, and lots of money, and an upward
spiral, isn&#39;t your creation strong enough yet? Can&#39;t you step back and let
the professionals just run it, confident that they won&#39;t kill the golden
goose?&lt;/p&gt;
&lt;p&gt;Empirically, mostly no, you can&#39;t. Actually the success rate of control
changes, for well loved products, is abysmal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The saturation trap&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The second trigger of a flow change is comes from outside: saturation. Every
successful product, at some point, reaches approximately all the users it&#39;s
ever going to reach. Before that, you can watch its exponential growth rate
slow down: the &lt;a href=&quot;https://blog.apnic.net/2022/02/21/another-year-of-the-transition-to-ipv6/&quot;&gt;infamous
S-curve&lt;/a&gt;
of product adoption.&lt;/p&gt;
&lt;p&gt;Saturation can lead us back to control change: the founders get frustrated
and back out, or the board ousts them and puts in &quot;real business people&quot; who
know how to get growth going again. Generally that doesn&#39;t work. Modern VCs
consider founder replacement a truly desperate move. Maybe
a last-ditch effort to boost short term numbers in preparation for an
acquisition, if you&#39;re lucky.&lt;/p&gt;
&lt;p&gt;But sometimes the leaders stay on despite saturation, and they try on their
own to make things better. Sometimes that &lt;em&gt;does&lt;/em&gt; work. Actually, it&#39;s kind
of amazing how often it seems to work. Among successful companies,
it&#39;s rare to find one that sustained hypergrowth, nonstop, without suffering
through one of these dangerous periods.&lt;/p&gt;
&lt;p&gt;(That&#39;s called survivorship bias. All companies have dangerous periods.
The successful ones surivived them. But of those survivors, suspiciously few
are ones that replaced their founders.)&lt;/p&gt;
&lt;p&gt;If you saturate and can&#39;t recover - either by growing more in a big-enough
current market, or by finding new markets to expand into - then the best you
can hope for is for your upward spiral to mature gently into decelerating
growth. If so, and you&#39;re a buddhist, then you hire less, you optimize
margins a bit, you resign yourself to being About This Rich And I Guess
That&#39;s All But It&#39;s Not So Bad.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The devil&#39;s bargain&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Alas, very few people reach that state of zen. Especially the kind of
ambitious people who were able to get that far in the first place. If you
can&#39;t accept saturation and you can&#39;t beat saturation, then you&#39;re down to
two choices: step away and let the new owners enshittify it, hopefully
slowly. Or take the devil&#39;s bargain: enshittify it yourself.&lt;/p&gt;
&lt;p&gt;I would not recommend the latter. If you&#39;re a founder and you find yourself
in that position, honestly, you won&#39;t enjoy doing it and you probably aren&#39;t
even good at it and it&#39;s getting enshittified either way. Let someone else
do the job.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Defenses against enshittification&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Okay, maybe that section was not as uplifting as we might have hoped. I&#39;ve
gotta be honest with you here. Doctorow is, after all, mostly right. This
does happen all the time.&lt;/p&gt;
&lt;p&gt;Most founders aren&#39;t perfect for every stage of growth. Most product owners
stumble. Most markets saturate. Most VCs get board control pretty early on
and want hypergrowth or bust. In tech, a lot of the time, if you&#39;re choosing
a product or company to join, that kind of company is all you can get.&lt;/p&gt;
&lt;p&gt;As a founder, maybe you&#39;re okay with growing slowly. Then some copycat shows
up, steals your idea, grows super fast, squeezes you out along with your
moral high ground, and then runs headlong into all the same saturation
problems as everyone else. Tech incentives are awful.&lt;/p&gt;
&lt;p&gt;But, it&#39;s not a lost cause. There are companies (and open source projects)
that keep a good thing going, for decades or more. What do they have in
common?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;An expansive vision that&#39;s not about money&lt;/strong&gt;, and which opens you up to
lots of users. A big addressable market means you don&#39;t have to
worry about saturation for a long time, even at hypergrowth speeds. Google
certainly never had an incentive to make Google Search worse.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;(Update 2025-06-14: A few people disputed that last bit.  Okay. 
Perhaps Google has ccasionally responded to what they thought were
incentives to make search worse -- I wasn&#39;t there, I don&#39;t know -- but it
seems clear in retrospect that when search gets worse, Google does worse. 
So I&#39;ll stick to my claim that their true incentives are to keep improving.)&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Keep control.&lt;/strong&gt; It&#39;s easy to lose control of a project or company at any
point. If you stumble, and you don&#39;t have a backup plan, and there&#39;s someone
waiting to jump on your mistake, then it&#39;s over. Too many companies &quot;bet it
all&quot; on nonstop hypergrowth and &lt;s&gt;&lt;a href=&quot;https://www.reddit.com/r/movies/comments/yuekuu/can_someone_explain_me_this_dialogue_from_gattaca/&quot;&gt;don&#39;t have any way
back&lt;/a&gt;&lt;/s&gt;
have no room in the budget, if results slow down even temporarily.&lt;/p&gt;
&lt;p&gt;Stories abound of companies that scraped close to bankruptcy before
finally pulling through. But far more companies scraped close to
bankruptcy and then went bankrupt. Those companies are forgotten. Avoid
it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Track your data.&lt;/strong&gt; Part of control is predictability. If you know how
big your market is, and you monitor your growth carefully, you can detect
incoming saturation years before it happens. Knowing the telltale shape of
each part of that S-curve is a superpower. If you can see the future, you
can prevent your own future mistakes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Believe in competition.&lt;/strong&gt; Google used to have this saying they lived by:
&quot;&lt;a href=&quot;https://9to5google.com/2012/04/05/larry-page-posts-update-from-the-ceo-2012%E2%80%B3-memo-detailing-googles-aspirations/&quot;&gt;the competition is only a click
away&lt;/a&gt;.&quot; That was
excellent framing, because it was true, and it will remain true even if
Google captures 99% of the search market. The key is to cultivate a healthy
fear of competing products, not of your investors or the end of
hypergrowth. Enshittification helps your competitors. That would be dumb.&lt;/p&gt;
&lt;p&gt;(And don&#39;t cheat by using lock-in to make competitors
not, anymore, &quot;only a click away.&quot; That&#39;s missing the whole point!)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Inoculate yourself.&lt;/strong&gt; If you have to, create your own competition. Linus
  Torvalds, the creator of the Linux kernel, &lt;a href=&quot;https://git-scm.com/about&quot;&gt;famously also created
  Git&lt;/a&gt;, the greatest tool for forking (and maybe
  merging) open source projects that has ever existed. And then he said,
  this is my fork, the &lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/&quot;&gt;Linus fork&lt;/a&gt;; use it if you want; use someone else&#39;s if
  you want; and now if I want to win, I have to make mine the best. Git was
  created back in 2005, twenty years ago. To this day, Linus&#39;s fork is still
  the central one.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you combine these defenses, you can be safe from the decline that others
tell you is inevitable. If you look around for examples, you&#39;ll find that
this does actually work. You won&#39;t be the first. You&#39;ll just be rare.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Side note: Things that aren&#39;t enshittification&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I often see people worry about enshittification that isn&#39;t. They might be
good or bad, wise or unwise, but that&#39;s a different topic. Tools aren&#39;t
inherently good or evil. They&#39;re just tools.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&quot;Helpfulness.&quot;&lt;/strong&gt; There&#39;s a fine line between &quot;telling users about this
cool new feature we built&quot; in the spirit of helping them, and &quot;pestering
users about this cool new feature we built&quot; (typically a misguided AI
implementation) to improve some quarterly KPI. Sometimes it&#39;s hard to see
where that line is. But when you&#39;ve crossed it, you know.&lt;/p&gt;
&lt;p&gt;Are you trying to help a user do what &lt;em&gt;they&lt;/em&gt; want to do, or are you trying
to get them to do what &lt;em&gt;you&lt;/em&gt; want them to do?&lt;/p&gt;
&lt;p&gt;Look into your heart. Avoid the second one. I know you know how. Or you
knew how, once. Remember what that feels like.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Charging money for your product.&lt;/strong&gt; Charging money is okay. Get serious.
&lt;a href=&quot;https://apenwarr.ca/log/20211229&quot;&gt;Companies have to stay in business&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That said, I personally really revile the &quot;we&#39;ll make it &lt;a href=&quot;https://tailscale.com/blog/free-plan&quot;&gt;free for
now&lt;/a&gt; and we&#39;ll start charging for the
exact same thing later&quot; strategy. Keep your promises.&lt;/p&gt;
&lt;p&gt;I&#39;m pretty sure nobody but drug dealers breaks those promises on purpose.
But, again, desperation is a powerful motivator. Growth slowing down?
Costs way higher than expected? Time to capture some of that value we
were giving away for free!&lt;/p&gt;
&lt;p&gt;In retrospect, that&#39;s a bait-and-switch, but most founders never planned
it that way. They just didn&#39;t do the math up front, or they were too
naive to know they would have to. And then they had to.&lt;/p&gt;
&lt;p&gt;Famously, Dropbox had a &quot;free forever&quot; plan that provided a certain
amount of free storage.  What they didn&#39;t count on was abandoned
accounts, accumulating every year, with stored stuff they could never
delete.  Even if a very good fixed fraction of users each year upgraded
to a paid plan, all the ones that didn&#39;t, kept piling up...  year after
year...  after year...  until they had to start &lt;a href=&quot;https://www.cnbc.com/2018/02/23/dropbox-shows-how-it-manages-costs-by-deleting-inactive-accounts.html&quot;&gt;deleting old free
accounts and the data in
them&lt;/a&gt;. 
A similar story &lt;a href=&quot;https://news.ycombinator.com/item?id=24143588&quot;&gt;happened with
Docker&lt;/a&gt;,
which used to host unlimited container downloads for free.  In hindsight
that was mathematically unsustainable.  Success guaranteed failure.&lt;/p&gt;
&lt;p&gt;Do the math up
front. If you&#39;re not sure, find someone who can.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Value pricing.&lt;/strong&gt; (ie. charging different prices to different people.)
It&#39;s okay to charge money. It&#39;s even okay to charge money to some kinds of
people (say, corporate users) and not others. It&#39;s also okay to charge money
for an almost-the-same-but-slightly-better product. It&#39;s okay to charge
money for support for your open source tool (though I stay away from that;
it incentivizes you to make the product worse).&lt;/p&gt;
&lt;p&gt;It&#39;s even okay to charge immense amounts of money for a commercial
product that&#39;s barely better than your open source one! Or for a part of
your product that costs you almost nothing.&lt;/p&gt;
&lt;p&gt;But, you have to
do the rest of the work. Make sure the reason your users don&#39;t
switch away is that you&#39;re the best, not that you have the best lock-in.
Yeah, I&#39;m talking to you, cloud egress fees.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Copying competitors.&lt;/strong&gt; It&#39;s okay to copy features from competitors.
It&#39;s okay to position yourself against competitors. It&#39;s okay to win
customers away from competitors. But it&#39;s not okay to lie.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bugs.&lt;/strong&gt; It&#39;s okay to fix bugs. It&#39;s okay to decide not to fix bugs;
&lt;a href=&quot;https://apenwarr.ca/log/20171213&quot;&gt;you&#39;ll have to sometimes, anyway&lt;/a&gt;. It&#39;s
okay to take out &lt;a href=&quot;https://apenwarr.ca/log/20230605&quot;&gt;technical debt&lt;/a&gt;. It&#39;s
okay to pay off technical debt. It&#39;s okay to let technical debt languish
forever.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Backward incompatible changes.&lt;/strong&gt; It&#39;s &lt;a href=&quot;https://tailscale.com/blog/community-projects&quot;&gt;dumb to release a new version
that breaks backward
compatibility&lt;/a&gt; with your old
version. It&#39;s tempting. It annoys your users. But it&#39;s not enshittification
for the simple reason that it&#39;s phenomenally ineffective at maintaining
or exploiting a monopoly, which is what enshittification is supposed to be
about. You know who&#39;s good at monopolies? Intel and Microsoft. They don&#39;t
break old versions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Enshittification is real, and tragic. But let&#39;s protect a
useful term and its definition! Those things aren&#39;t it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Epilogue: a special note to founders&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you&#39;re a founder or a product owner, I hope all this helps. I&#39;m sad to
say, you have a lot of potential pitfalls in your future. But, remember that
they&#39;re only &lt;em&gt;potential&lt;/em&gt; pitfalls. Not everyone falls into them.&lt;/p&gt;
&lt;p&gt;Plan ahead. Remember where you came from. Keep your integrity. Do your best.&lt;/p&gt;
&lt;p&gt;I will too.&lt;/p&gt;
    </description>
  </item>
  
  
  <item>
    <title>
      NPS, the good parts
    </title>
    <pubDate>Tue, 05 Dec 2023 05:01:12 +0000</pubDate>
    <link>https://apenwarr.ca/log/20231204</link>
    
    <guid isPermaLink="true">https://apenwarr.ca/log/20231204</guid>
    
    <description>
    &lt;p&gt;The Net Promoter Score (NPS) is a statistically questionable way to turn a
set of 10-point ratings into a single number you can compare with other
NPSes. That&#39;s not the good part.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Humans&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;To understand the good parts, first we have to start with humans. Humans
have emotions, and those emotions are what they mostly use when asked to
rate things on a 10-point scale.&lt;/p&gt;
&lt;p&gt;Almost exactly twenty years ago, I wrote about sitting on a plane next to a
&lt;a href=&quot;/log/20031227&quot;&gt;musician who told me about music album reviews&lt;/a&gt;. The worst
rating an artist can receive, he said, is a lukewarm one. If people think
your music is neutral, it means you didn&#39;t make them feel anything at all.
You failed. Someone might buy music that reviewers hate, or buy music that
people love, but they aren&#39;t really that interested in music that is just
kinda meh. They listen to music because they want to feel something.&lt;/p&gt;
&lt;p&gt;(At the time I contrasted that with tech reviews in computer magazines
(remember those?), and how negative ratings were the worst thing for a tech
product, so magazines never produced them, lest they get fewer free samples.
All these years later, journalism is dead but we&#39;re still debating the
ethics of game companies sponsoring Twitch streams. You can bet there&#39;s no
sponsored game that gets an actively negative review during 5+ hours of
gameplay and still gets more money from that sponsor. If artists just want
you to feel something, but no vendor will pay for a game review that says it
sucks, I wonder what that says about video game companies and art?)&lt;/p&gt;
&lt;p&gt;Anyway, when you ask regular humans, who are not being sponsored, to rate
things on a 10-point scale, they will rate based on their emotions. Most
of the ratings will be just kinda meh, because most products are, if we&#39;re
honest, just kinda meh. I go through most of my days using a variety of
products and services that do not, on any more than the rarest basis, elicit
any emotion at all. Mostly I don&#39;t notice those. I notice when I have
experiences that are surprisingly good, or (less surprisingly but still
notably) bad. Or, I notice when one of the services in any of those three
categories asks me to rate them on a 10-point scale.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The moment&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The moment when they ask me is important. Many products and services are
just kinda invisibly meh, most of the time, so perhaps I&#39;d give them a meh
rating. But if my bluetooth headphones are currently failing to connect, or
I just had to use an airline&#39;s online international check-in system and it
once again rejected my passport for no reason, then maybe my score will be
extra low. Or if Apple releases a new laptop that finally brings back a
non-sucky keyboard after making laptops with sucky keyboards for literally
years because of some obscure internal political battle, maybe I&#39;ll give a
high rating for a while.&lt;/p&gt;
&lt;p&gt;If you&#39;re a person who likes manipulating ratings, you&#39;ll figure out what
moments are best for asking for the rating you want. But let&#39;s assume you&#39;re
above that sort of thing, because that&#39;s not one of the good parts.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The calibration&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Just now I said that if I&#39;m using an invisible meh product or service, I
would rate it with a meh rating. But that&#39;s not true in real life, because
even though I was having no emotion about, say, Google Meet during a call,
perhaps when they ask me (after every...single...call) how it was, that
makes me feel an emotion after all. Maybe that emotion is &quot;leave me alone,
you ask me this way too often.&quot; Or maybe I&#39;ve learned that if I pick
anything other than five stars, I get a clicky multi-tab questionnaire that
I don&#39;t have time to answer, so I almost always pick five stars unless the
experience was &lt;em&gt;so&lt;/em&gt; bad that I feel it&#39;s worth an extra minute because I
simply need to tell the unresponsive and uncaring machine how I really feel.&lt;/p&gt;
&lt;p&gt;Google Meet never gets a meh rating. It&#39;s designed not to. In Google Meet,
meh gets five stars.&lt;/p&gt;
&lt;p&gt;Or maybe I bought something from Amazon and it came with a thank-you card
begging for a 5-star rating (this happens). Or a restaurant offers free
stuff if I leave a 5-star rating and prove it (this happens). Or I ride in
an Uber and there&#39;s a sign on the back seat talking about how they really
need a 5-star rating because this job is essential so they can support their
family and too many 4-star ratings get them disqualified (this happens,
though apparently not at UberEats). Okay. As one of my high school teachers,
Physics I think, once said, &quot;A&#39;s don&#39;t cost me anything. What grade do you
want?&quot; (He was that kind of teacher. I learned a lot.)&lt;/p&gt;
&lt;p&gt;I&#39;m not a professional reviewer. Almost nobody you ask is a professional
reviewer. Most people don&#39;t actually care; they have no basis for
comparison; just about anything will influence their score. They will not
feel badly about this. They&#39;re just trying to exit your stupid popup
interruption as quickly as possible, and half the time they would have
mashed the X button instead but you hid it, so they mashed this one instead.
People&#39;s answers will be... untrustworthy at best.&lt;/p&gt;
&lt;p&gt;That&#39;s not the good part.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;And yet&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;And yet. As in so many things, randomness tends to average out, &lt;a href=&quot;https://en.wikipedia.org/wiki/Central_limit_theorem&quot;&gt;probably
into a Gaussian distribution, says the Central Limit
Theorem&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Central Limit Theorem is the fun-destroying reason that you can&#39;t just
average 10-point ratings or star ratings and get something useful: most
scores are meh, a few are extra bad, a few are extra good, and the next
thing you know, every Uber driver is a 4.997. Or you can &lt;a href=&quot;https://xkcd.com/325/&quot;&gt;ship a bobcat one
in 30 times&lt;/a&gt; and still get 97% positive feedback.&lt;/p&gt;
&lt;p&gt;There&#39;s some deep truth hidden in NPS calculations: that meh ratings mean
nothing, that the frequency of strong emotions matters a lot, and that
deliriously happy moments don&#39;t average out disastrous ones.&lt;/p&gt;
&lt;p&gt;Deming might call this &lt;a href=&quot;/log/20161226&quot;&gt;the continuous region and the &quot;special
causes&quot;&lt;/a&gt; (outliers). NPS is all about counting outliers, and
averages don&#39;t work on outliers.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The degrees of meh&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Just kidding, there are no degrees of meh. If you&#39;re not feeling anything,
you&#39;re just not. You&#39;re not feeling more nothing, or less nothing.&lt;/p&gt;
&lt;p&gt;One of my friends used to say, on a scale of 6 to 9, how good is this? It
was a joke about how nobody ever gives a score less than 6 out of 10, and
nothing ever deserves a 10. It was one of those jokes that was never funny
because they always had to explain it. But they seemed to enjoy explaining
it, and after hearing the explanation the first several times, that part was
kinda funny. Anyway, if you took the 6-to-9 instructions seriously, you&#39;d
end up rating almost everything between 7 and 8, just to save room for
something unimaginably bad or unimaginably good, just like you did with
1-to-10, so it didn&#39;t help at all.&lt;/p&gt;
&lt;p&gt;And so, the NPS people say, rather than changing the scale, let&#39;s just
define meaningful regions in the existing scale. Only very angry people
use scores like 1-6. Only very happy people use scores like 9 or 10. And if
you&#39;re not one of those you&#39;re meh. It doesn&#39;t matter how meh. And in fact,
it doesn&#39;t matter much whether you&#39;re &quot;5 angry&quot; or &quot;1 angry&quot;; that says more
about your internal rating system than about the degree of what you
experienced. Similarly with 9 vs 10; it seems like you&#39;re quite happy. Let&#39;s
not split hairs.&lt;/p&gt;
&lt;p&gt;So with NPS we take a 10-point scale and turn it into a 3-point scale. The
exact opposite of my old friend: you know people misuse the 10-point scale,
but instead of giving them a new 3-point scale to misuse, you just
postprocess the 10-point scale to clean it up. And now we have a 3-point
scale with 3 meaningful points. That&#39;s a good part.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Evangelism&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;So then what? Average out the measurements on the newly calibrated 1-2-3
scale, right?&lt;/p&gt;
&lt;p&gt;Still no. It turns out there are three kinds of people: the ones so mad they
will tell everyone how mad they are about your thing; the ones who don&#39;t
care and will never think about you again if they can avoid it; and the ones
who had such an over-the-top amazing experience that they will tell everyone
how happy they are about your thing.&lt;/p&gt;
&lt;p&gt;NPS says, you really care about the 1s and the 3s, but averaging them makes
no sense. And the 2s have no effect on anything, so you can just leave them
out.&lt;/p&gt;
&lt;p&gt;Cool, right?&lt;/p&gt;
&lt;p&gt;Pretty cool. Unfortunately, that&#39;s still two valuable numbers but we
promised you one single score. So NPS says, let&#39;s subtract them! Yay! Okay,
no. That&#39;s not the good part.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The threefold path&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I like to look at it this way instead. First of all, we have computers now,
we&#39;re not tracking ratings on one of those 1980s desktop bookkeeping
printer-calculators, you don&#39;t have to make every analysis into one single
all-encompassing number.&lt;/p&gt;
&lt;p&gt;Postprocessing a 10-point scale into a 3-point one, that seems pretty smart.
But you have to stop there. Maybe you now have three separate aggregate
numbers. That&#39;s tough, I&#39;m sorry. Here&#39;s a nickel, kid, go sell your
personal information in exchange for a spreadsheet app. (I don&#39;t know what
you&#39;ll do with the nickel. Anyway I don&#39;t need it. Here. Go.)&lt;/p&gt;
&lt;p&gt;Each of those three rating types gives you something different you can do in
response:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;b&gt;ones&lt;/b&gt; had a very bad experience, which is hopefully an
  outlier, unless you&#39;re Comcast or the New York Times subscription
  department. Normally you want to get rid of every bad experience. The
  absence of awful isn&#39;t greatness, it&#39;s just meh, but meh is infinitely
  better than awful. Eliminating negative outliers is a whole job. It&#39;s a
  job filled with Deming&#39;s special causes. It&#39;s hard, and it requires
  creativity, but it really matters.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;b&gt;twos&lt;/b&gt; had a meh experience. This is, most commonly, the
  majority. But perhaps they could have had a better experience. Perhaps
  even a great one? Deming would say you can and should work to improve the
  average experience and reduce the standard deviation. That&#39;s the dream;
  heck, what if the average experience could be an amazing one? That&#39;s
  rarely achieved, but a few products achieve it, especially luxury brands.
  And maybe that Broadway show, Hamilton? I don&#39;t know, I couldn&#39;t get tickets,
  because everyone said it was great so it was always sold out and I guess
  that&#39;s my point.&lt;/p&gt;
&lt;p&gt;If getting the average up to three is too hard or will
  take too long (and it will take a long time!), you could still try to at
  least randomly turn a few of them into threes. For example, they say
  users who have a great customer support experience often rate a product more
  highly than the ones who never needed to contact support at all, because
  the support interaction made the company feel more personal. Maybe you can&#39;t
  afford to interact with everyone, but if you have to interact anyway,
  perhaps you can use that chance to make it great instead of meh.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;b&gt;threes&lt;/b&gt; already had an amazing experience. Nothing to do, right?
  No! These are the people who are, or who can become, your superfan
  evangelists. Sometimes that happens on its own, but often people don&#39;t
  know where to put that excess positive energy. You can help them. Pop
  stars and fashion brands know all about this; get some true believers
  really excited about your product, and the impact is huge. This is a
  completely different job than turning ones into twos, or twos into threes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;What not to do&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Those are all good parts. Let&#39;s ignore that unfortunately they
aren&#39;t part of NPS at all and we&#39;ve strayed way off topic.&lt;/p&gt;
&lt;p&gt;From here, there are several additional things you can do, but it turns out
you shouldn&#39;t.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Don&#39;t compare scores with other products.&lt;/b&gt; I guarantee you, your methodology
isn&#39;t the same as theirs. The slightest change in timing or presentation
will change the score in incomparable ways. You just can&#39;t. I&#39;m sorry.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Don&#39;t reward your team based on aggregate ratings.&lt;/b&gt; They will find a
way to change the ratings. Trust me, it&#39;s too easy.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Don&#39;t average or difference the bad with the great.&lt;/b&gt; The two groups have
nothing to do with each other, require completely different responses
(usually from different teams), and are often very small. They&#39;re outliers
after all. They&#39;re by definition not the mainstream. Outlier data is very
noisy and each terrible experience is different from the others; each
deliriously happy experience is special. As the famous writer said, &lt;a href=&quot;https://en.wikipedia.org/wiki/Anna_Karenina_principle&quot;&gt;all
meh families are
alike&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Don&#39;t fret about which &quot;standard&quot; rating ranges translate to
bad-meh-good.&lt;/b&gt; Your particular survey or product will have the bad
outliers, the big centre, and the great outliers. Run your survey enough and
you&#39;ll be able to find them.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Don&#39;t call it NPS.&lt;/b&gt; NPS nowadays has a bad reputation. Nobody can
really explain the bad reputation; I&#39;ve asked. But they&#39;ve all heard it&#39;s
bad and wrong and misguided and unscientific and &quot;not real statistics&quot; and
gives wrong answers and leads to bad incentives. You don&#39;t want that stigma
attached to your survey mechanic. But if you call it a &lt;em&gt;satisfaction
survey&lt;/em&gt; on a 10-point or 5-point scale, tada, clear skies and lush green fields ahead.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Bonus advice&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Perhaps the neatest thing about NPS is how much information you can get from
just one simple question that can be answered with the same effort it takes
to dismiss a popup.&lt;/p&gt;
&lt;p&gt;I joked about Google Meet earlier, but I wasn&#39;t
really kidding; after having a few meetings, if I had learned that I could
just rank from 1 to 5 stars and then &lt;em&gt;not&lt;/em&gt; get guilted for giving anything
other than 5, I would do it. It would be great science and pretty
unobtrusive. As it is, I lie instead. (I don&#39;t even skip, because it&#39;s
faster to get back to the menu by lying than by skipping.)&lt;/p&gt;
&lt;p&gt;While we&#39;re here, only the weirdest people want to answer a survey that says
it will take &quot;just 5 minutes&quot; or &quot;just 30 seconds.&quot; I don&#39;t have 30 seconds,
I&#39;m busy being mad/meh/excited about your product, I have other things to
do! But I can click just one single star rating, as long as I&#39;m 100%
confident that the survey will go the heck away after that. (And don&#39;t even
get me started about the extra layer in &quot;Can we ask you a few simple
questions about our website? Yes or no&quot;)&lt;/p&gt;
&lt;p&gt;Also, don&#39;t be the survey that promises one question and then asks &quot;just one
more question.&quot; Be the survey that gets a reputation for really truly asking
that one question. Then ask it, optionally, in more places and more often. A
good role model is those knowledgebases where every article offers just
thumbs up or thumbs down (or the default of no click, which means meh). That
way you can legitimately look at aggregates or even the same person&#39;s
answers over time, at different points in the app, after they have different
parts of the experience. And you can compare scores at the same point after
you update the experience.&lt;/p&gt;
&lt;p&gt;But for heaven&#39;s sake, not by just averaging them.&lt;/p&gt;
    </description>
  </item>
  
  
  <item>
    <title>
      Interesting
    </title>
    <pubDate>Fri, 06 Oct 2023 20:59:31 +0000</pubDate>
    <link>https://apenwarr.ca/log/20231006</link>
    
    <guid isPermaLink="true">https://apenwarr.ca/log/20231006</guid>
    
    <description>
    &lt;p&gt;A few conversations last week made me realize I use the word “interesting” in an unusual way.&lt;/p&gt;
&lt;p&gt;I rely heavily on mental models. Of course, everyone &lt;em&gt;relies&lt;/em&gt; on mental models. But I do it intentionally and I push it extra hard.&lt;/p&gt;
&lt;p&gt;What I mean by that is, when I’m making predictions about what will happen next, I mostly don’t look around me and make a judgement based on my immediate surroundings. Instead, I look at what I see, try to match it to something inside my mental model, and then let the mental model extrapolate what “should” happen from there.&lt;/p&gt;
&lt;p&gt;If this sounds predictably error prone: yes. It is.&lt;/p&gt;
&lt;p&gt;But it’s also powerful, when used the right way, which I try to do. Here’s my system.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Confirmation bias&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;First of all, let’s acknowledge the problem with mental models: confirmation bias. Confirmation bias is the tendency of all people, including me and you, to consciously or subconsciously look for evidence to support what we already believe to be true, and try to ignore or reject evidence that disagrees with our beliefs.&lt;/p&gt;
&lt;p&gt;This is just something your brain does. If you believe you’re exempt from this, you’re wrong, and dangerously so. Confirmation bias gives you more certainty where certainty is not necessarily warranted, and we all act on that unwarranted certainty sometimes.&lt;/p&gt;
&lt;p&gt;On the one hand, we would all collapse from stress and probably die from bear attacks if we didn’t maintain some amount of certainty, even if it’s certainty about wrong things. But on the other hand, certainty about wrong things is pretty inefficient.&lt;/p&gt;
&lt;p&gt;There’s a word for the feeling of stress when your brain is working hard to ignore or reject evidence against your beliefs: cognitive dissonance. Certain Internet Dingbats have recently made entire careers talking about how to build and exploit cognitive dissonance, so I’ll try to change the subject quickly, but I’ll say this: cognitive dissonance is bad… if you don’t realize you’re having it.&lt;/p&gt;
&lt;p&gt;But your own cognitive dissonance is &lt;em&gt;amazingly useful&lt;/em&gt; if you notice the feeling and use it as a tool.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The search for dissonance&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Whether you like it or not, your brain is going to be working full time, on automatic pilot, in the background, looking for evidence to support your beliefs. But you know that; at least, you know it now because I just told you. You can be aware of this effect, but you can’t prevent it, which is annoying.&lt;/p&gt;
&lt;p&gt;But you can try to compensate for it. What that means is using the part of your brain you have control over — the supposedly rational part — to look for the opposite: things that don’t match what you believe.&lt;/p&gt;
&lt;p&gt;To take a slight detour, what’s the relationship between your beliefs and your mental model? For the purposes of this discussion, I’m going to say that mental models are a &lt;em&gt;system for generating beliefs.&lt;/em&gt; Beliefs are the output of mental models. And there’s a feedback loop: beliefs are also the things you generalize in order to produce your mental model. (Self-proclaimed ”Bayesians” will know what I’m talking about here.)&lt;/p&gt;
&lt;p&gt;So let’s put it this way: your mental model, combined with current observations, produce your set of beliefs about the world and about what will happen next.&lt;/p&gt;
&lt;p&gt;Now, what happens if what you expected to happen next, doesn’t happen? Or something happens that was entirely unexpected? Or even, what if someone tells you you’re wrong and they expect something else to happen?&lt;/p&gt;
&lt;p&gt;Those situations are some of the most useful ones in the world. They’re what I mean by &lt;em&gt;interesting&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;The “aha” moment&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;i&gt;The most exciting phrase to hear in science, the one that heralds new discoveries, is not “Eureka!” (I found it!) but “That’s funny…”&lt;/i&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;— &lt;a
href=&quot;https://quoteinvestigator.com/2015/03/02/eureka-funny/&quot;&gt;possibly&lt;/a&gt; Isaac Asimov
&lt;/ul&gt;

&lt;p&gt;When you encounter evidence that your mental model mismatches someone else’s model, that’s an exciting opportunity to compare and figure out which one of you is wrong (or both). Not everybody is super excited about doing that with you, so you have to be be respectful. But the most important people to surround yourself with, at least for mental model purposes, are the ones who will talk it through with you.&lt;/p&gt;
&lt;p&gt;Or, if you get really lucky, your predictions turn out to be demonstrably concretely wrong. That’s an even bigger opportunity, because now you get to figure out what part of your mental model is mistaken, and you don’t have to negotiate with a possibly-unwilling partner in order to do it. It’s you against reality. It’s science: you had a hypothesis, you did an experiment, your hypothesis was proven wrong. Neat! Now we’re getting somewhere.&lt;/p&gt;
&lt;p&gt;What follows is then the often-tedious process of figuring out what actual thing was wrong with your model, updating the model, generating new outputs that presumably match your current observations, and then generating new hypotheses that you can try out to see if the new model works better more generally.&lt;/p&gt;
&lt;p&gt;For physicists, this whole process can sometimes take decades and require building multiple supercolliders. For most of us, it often takes less time than that, so we should count ourselves fortunate even if sometimes we get frustrated.&lt;/p&gt;
&lt;p&gt;The reason we update our model, of course, is that most of the time, the update changes a lot more predictions than just the one you’re working with right now. Turning observations back into generalizable mental models allows you to learn things you’ve never been taught; perhaps things nobody has ever learned before. That’s a superpower.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Proceeding under uncertainty&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;But we still have a problem: that pesky slowness. Observing outcomes, updating models, generating new hypotheses, and repeating the loop, although productive, can be very time consuming. My guess is that’s why we didn’t evolve to do that loop most of the time. Analysis paralysis is no good when a tiger is chasing you and you’re worried your preconceived notion that it wants to eat you may or may not be correct.&lt;/p&gt;
&lt;p&gt;Let’s tie this back to business for a moment.&lt;/p&gt;
&lt;p&gt;You have evidence that your mental model about your business is not correct. For example, let’s say you have two teams of people, both very smart and well-informed, who believe conflicting things about what you should do next. That’s &lt;em&gt;interesting&lt;/em&gt;, because first of all, your mental model is that these two groups of people are very smart and make right decisions almost all the time, or you wouldn’t have hired them. How can two conflicting things be the right decision? They probably can’t. That means we have a few possibilities:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The first group is right&lt;/li&gt;
&lt;li&gt;The second group is right&lt;/li&gt;
&lt;li&gt;Both groups are wrong&lt;/li&gt;
&lt;li&gt;The appearance of conflict is actually not correct, because you missed something critical&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There is also often a fifth possibility:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Okay, it’s probably one of the first four but I don’t have time to figure that out right now&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In that case, there’s various wisdom out there involving &lt;a href=&quot;https://www.inc.com/jeff-haden/amazon-founder-jeff-bezos-this-is-how-successful-people-make-such-smart-decisions.html&quot;&gt;one- vs two-way doors&lt;/a&gt;, and oxen pulling in different directions, and so on. But it comes down to this: almost always, it’s better to get everyone aligned to the same direction, even if it’s a somewhat wrong direction, than to have different people going in different directions.&lt;/p&gt;
&lt;p&gt;To be honest, I quite dislike it when that’s necessary. But sometimes it is, and you might as well accept it in the short term.&lt;/p&gt;
&lt;p&gt;The way I make myself feel better about it is to choose the path that will allow us to learn as much as possible, as quickly as possible, in order to update our mental models as quickly as possible (without doing &lt;em&gt;too&lt;/em&gt; much damage) so we have fewer of these situations in the future. In other words, yes, we “bias toward action” — but maybe more of a “bias toward learning.” And even after the action has started, we don’t stop trying to figure out the truth.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Being wrong&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Leaving aside many philosophers’ objections to the idea that “the truth” exists, I think we can all agree that being wrong is pretty uncomfortable. Partly that’s cognitive dissonance again, and partly it’s just being embarrassed in front of your peers. But for me, what matters more is the objective operational expense of the bad decisions we make by being wrong.&lt;/p&gt;
&lt;p&gt;You know what’s even worse (and more embarrassing, and more expensive) than being wrong? Being wrong for &lt;em&gt;even longer&lt;/em&gt; because we ignored the evidence in front of our eyes.&lt;/p&gt;
&lt;p&gt;You might have to talk yourself into this point of view. For many of us, admitting wrongness hurts more than continuing wrongness. But if you can pull off that change in perspective, you’ll be able to do things few other people can.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Bonus: Strong opinions held weakly&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Like many young naive nerds, when I first heard of the idea of “strong opinions held weakly,” I thought it was a pretty good idea. At least, clearly more productive than weak opinions held weakly (which are fine if you want to keep your job), or weak opinions held strongly (which usually keep you out of the spotlight).&lt;/p&gt;
&lt;p&gt;The real competitor to strong opinions held weakly is, of course, strong opinions held strongly. We’ve all met those people. They are supremely confident and inspiring, until they inspire everyone to jump off a cliff with them.&lt;/p&gt;
&lt;p&gt;Strong opinions held weakly, on the other hand, is really an invitation to debate. If you disagree with me, why not try to convince me otherwise? Let the best idea win.&lt;/p&gt;
&lt;p&gt;After some decades of experience with this approach, however, I eventually learned that the problem with this framing is the word “debate.” Everyone has a mental model, but not everyone wants to debate it. And if you’re really good at debating — the thing they teach you to be, in debate club or whatever — then you learn how to “win” debates without uncovering actual truth.&lt;/p&gt;
&lt;p&gt;Some days it feels like most of the Internet today is people “debating” their weakly-held strong beliefs and pulling out every rhetorical trick they can find, in order to “win” some kind of low-stakes war of opinion where there was no right answer in the first place.&lt;/p&gt;
&lt;p&gt;Anyway, I don’t recommend it, it’s kind of a waste of time. The people who want to hang out with you at the debate club are the people who already, secretly, have the same mental models as you in all the ways that matter.&lt;/p&gt;
&lt;p&gt;What’s really useful, and way harder, is to find the people who are not interested in debating you at all, and figure out why.&lt;/p&gt;
    </description>
  </item>
  
</channel>
</rss>
