All posts

Speed, Fidelity, and Thickness

Three related articles, with minimal commentary:

Florian Herrengt, “AI is removing the middle class of software engineering”:

Excerpts

AI removed the speed limit

AI makes projects with weak engineering culture fail much faster.

There used to be a time when people sat down and talked about how they'd do something. Now they can just prompt an agent for a few hours and open a PR.

The most tragic aspect of this way of working is that, to the untrained eye, it works.

If you pull the branch and test it, you'll probably get something somewhat functional. So what do they do? They keep going. Again and again. Until the project reaches a point where no one knows how anything works.

Just like someone buying a new luxury car on a credit card. You don't see the debt. You just see the car that looks great.

“Bad engineers always existed”

The difference is the speed.

It is the difference between crashing at 30 km/h and crashing at 200 km/h. Before AI, a bad engineer would struggle to produce code that even compiled. When they did produce something, it took them a long time and the blast radius was limited. The damage was bounded by how fast a human could type.

Now a bad engineer can produce 10,000 lines of working code before lunch. The damage we can do in an afternoon used to take them months. The speed at which bad decisions compound has changed completely while the speed at which you can fix them has not.

“Will anyone actually care?”

They will care when nothing works, nobody seems able to fix it, building new features takes forever and every change breaks something somewhere else.

This was already happening before AI. But now, a lot more companies that previously might have taken many years to reach an unmaintainable state can get there in just a few months.

Reminder: being good at software engineering isn't just about algorithms or systems design or whatever. Even pre-LLMs, it 100% definitely wasn't correlated with how fast you can put out new features.

It's about creating a system that's easy to reason about: easy to debug, easy to change, and hard to break—even when it's complicated.

Read more →


Simon Willison & John Gruber on Blogging

Simon Willison, “Simon Willison on Technical Blogging”:

My number one tip for blogging is to lower your standards! Aim to hit publish while you are still actively unhappy with what you have written, because the only alternative is a huge folder full of drafts and never publishing anything at all.

Nobody will ever know how perfect the thing you intended to write would have been. The flaws you see in your writing are invisible to everyone else.

John Gruber, “Simon Willison on Blogging”:

Me, I try to get into the mindset of playing live music, not recording a studio album. Except when I’m writing a piece where I really want it to be an album. Those aren’t rare, per se, but they’re occasional. If I tried to make every post a hall-of-famer I’d never get anything out.

I’m aiming for professionalism. I’m performing live in front of an audience — not just jamming in my garage or bedroom, fucking around. So I’m careful and concentrate. I want to hit every note, in time. But at my best I’m moving from song to song.

Read more →




Content before Bento

I tried Bento for a few slide decks.

Disclaimer: slides have never been my strong suit.

It's an interesting project. But when I had an agent one-shot a presentation, the slides flowed poorly and the content was shallow.

Read more →


The startup's Postgres survival guide

The startup's Postgres survival guide — recommended.

My TILs: descending indexes, sticking with simple joints to make life easier for the query planner, FOR UPDATE SKIP LOCK, autovaccum setting tuning.

+1 on migrations:

Getting really good at writing migrations is an important technical advantage: it helps you iterate much faster and increases your uptime. As a starting point, try to keep migrations additive (in other words, don't delete or remove columns) and run them in a transaction wherever possible; this will make rollbacks and partial migrations much easier to deal with. As you get more advanced, you can start looking into expand and contract migrations.

The simplest mental model for good migrations is: does this block all of my writes, or does it not? Creating an index without CONCURRENTLY blocks all your writes, so you might see downtime. Generally, operations which call ALTER TABLE should be worth a second look; for example, adding a new check constraint to a very large table can block your writes as well (unless you add it with the NOT VALID keyword).



Differentiating stochastic terrorism from normal criticism

Re: Against Stochastic Terrorism

What is stochastic terrorism?

As per Scott’s article:

Some other popular examples of the concept:

“Stochastic terrorism” is the idea that if you spread fear and mistrust against a target, then eventually people will commit violence against that target, and it will be your fault, even if you never specifically said the words “you should commit violence”.

Nativists spread fear and mistrust about Muslim immigrants, and then racists go on shooting sprees in mosques.

The #Resistance insists that Donald Trump would destroy democracy, and then various people try to assassinate Donald Trump.

Conservatives spread fear and mistrust about transgender people, and then bigots commit hate crimes against transgender people.

Woke people say the police are racist and brutal, and then other woke people murder police officers.

Socialists call health insurance companies greedy and accuse them of blocking life-saving treatment, and then Luigi Mangione murdered a health insurance CEO.

AI safety activists say that Sam Altman’s AI could destroy humanity, and then a guy threw a Molotov cocktail at Sam Altman’s house.

Liberals said that Charlie Kirk was a hatemonger who was driving Americans apart, and then an assassin murdered Charlie Kirk.

The pro-life movement describes abortion as murder, and then pro-life activists assassinated abortion doctors and pro-choice politicians.

A weak post, below Scott’s usual standards.

He begins by tainting the concept by association:

“Stochastic terrorism” mostly gets deployed opportunistically, by people who either are too blinkered to realize that the same argument could be leveraged against their own speech, or who hope you’re too blinkered to realize that.

True, but irrelevant to whether it’s a useful concept.

He then argues no consistent principle can separate normal criticism from stochastic terrorism. He proposes weak candidate principles, knocks each down, and overreaches to the “liberal solution”:

The liberal solution is none of these: it’s that it’s always legitimate to criticize any person or group however strongly, and never legitimate to use extra-state violence against them; if a violent act occurs, it’s 100% the fault of the perpetrator, and 0% the fault of other people who previously criticized the victim.

Read more →



Three patterns for substring and subarray questions

Coding-interview substring and subarray problems often reduce to one of three patterns.

1. Sliding window (two pointers)

Use a sliding window when the constraint changes monotonically as you expand or shrink the window.

  • Use it for: substrings with “at most K distinct characters,” all unique characters, or subarrays with sum constraints when all numbers are nonnegative.
  • Core idea: Expand right to include a new element. If the window becomes invalid, move left until it is valid again.

Read more →