Skip to content

Writing

33 posts published so far, and the ones that landed hardest were the ones that admitted something. Everything here comes from work actually shipped.

Where a piece first appeared on dev.to it says so and links back. The version here is the canonical one.

Three correct fixes that all failed

The site was not ranking. Three engineers had each diagnosed it, each shipped the correct fix, and each verified their own change. Nothing improved for a year.

9 min
Read the output, not the source

When a bug has beaten several competent people, the shared assumption is the suspect rather than their competence. In my experience that assumption is almost always that the code says what the system does.

8 min
Why adding more workers made it slower

The queue was backing up, so I doubled the workers. Throughput went down. I assumed I had not added enough, doubled them again, and made it considerably worse.

12 min
When one number has four owners

A clerk quoted a balance to somebody standing at the counter. The customer opened the portal on their phone and saw a different number. Both had come from the same system, and both were defensible.

11 min
At least once is the only honest guarantee

Exactly once delivery is sold constantly and cannot be delivered across a network. The useful move is to stop wanting it, because the thing you actually need is achievable and much simpler.

10 min
Snapshot the approver, not the role

The approval record stored a role. Looking it up a year later returned whoever currently holds that role, which produced an answer that was confident, plausible, and wrong.

8 min
Measure the tail, not the average

Average response time is the most reassuring metric available and one of the least useful. It is dominated by the requests that were already fine.

9 min
Migrations while people are using it

The dangerous migration is never the complicated one. Complicated migrations get planned. It is the single line that looks obviously safe and gets run on a Tuesday afternoon.

10 min
The alias you forgot

Soft deletes work perfectly until the first time somebody drops to raw SQL for performance, and then they fail in the quietest and most embarrassing way available.

7 min
What I write down, and why

I write for a hypothetical successor who never arrives. The documents turn out to be almost entirely for me, six months later, having forgotten everything.

8 min
Dense screens are a different craft

I redesigned a screen used all day by staff with a queue in front of them. It looked considerably better and it made their job slower, which took me a while to accept.

9 min
The two minute rule that decides whether a site survives

A site that launches beautifully and lists last year's prices is worse than no site at all. That outcome is decided at build time, not by the client.

7 min

There is more, including the pieces that are opinion rather than engineering, on dev.to .