Strong types
I don't need to argue for types anymore. I need to argue that, with LLMs writing code, types are the contract that tells you whether the work is safe.
I am current migrating old writings and blog posts to a single place. More will be backfilled soon.
I don't need to argue for types anymore. I need to argue that, with LLMs writing code, types are the contract that tells you whether the work is safe.
The question I ask before I ship is really a premortem. What could go wrong, and could I live with it? Most of the time the answer lets me ship faster, not slower.
A bug report tells you what broke. Using your own product tells you what's wrong. What running the production build of Lotl every day, on more than one machine, taught me about that.
A shared team glossary used to be a nice-to-have. Agents read your words literally—so ambiguous vocabulary now ships as confidently wrong code, and a glossary became the cheapest way to stop it.
Dissecting the structural engineering conversations that led to bent steel poles.
Have you stayed anywhere for a while? An interviewer asked me that once. It stung—because I knew what they were really asking.
Two years ago I started treating documentation as cognitive RAM for a stateless AI. The core insight held — but everything around it evolved.
An honest postmortem about debugging a Kafka pipeline nobody fully understood, and the gap between stabilization and cure.
ChatGPT has no memory. That's not a bug — it's the engineering constraint you design around. Here's what I started doing about it.
The AI productivity gap isn't primarily a prompting problem. It's a code review problem.
I asked ChatGPT to help me engineer a backyard ninja course. It gave me six different answers to the same question — from 44 lbs to 51,857 lbs. I picked the wrong ones. The poles bent.
Eight goals a company should aspire towards to unlock their engineering team.