Writing as a Debugging Tool
When a system will not yield, I stop typing code and start typing sentences. The bug is often a story we have not finished.
By Julian Hale · Portland, Oregon

There is a moment in a hard bug when more logging makes you less sane. The traces multiply. Everyone has a theory. The room fills with “maybe.” That is when I open a blank page and write as if I were sending a letter to a future teammate who is allowed to be annoyed.
I write what we think happens. I write what we observed. I write the gap in ordinary English. I am not allowed to use the words “race,” “weird,” or “sometimes” without an example. Half the time the gap is the bug: we never actually agreed on the order of events.
Why sentences work
Code will accept an unfinished story. It will compile a contradiction if you put it in two files. Prose is ruder. A paragraph that says “the job starts after the row exists” cannot also say “the row is written by the job” without sounding drunk. That embarrassment is a feature.
I keep these letters. Some of them become postmortems. Some become the first paragraph of a design. A few become essays on this site. The point is not documentation. The point is to make the system hold still long enough to see it.
Letters on this piece
Ada Voss · April 8, 2026
We now require a one-page “letter” before any incident review. It cut the myth-making down a lot.
Continue
writing
The Calendar Is a Lie
A week of meetings can look like a week of work. It is often a week of avoiding the one page that would have moved the project.
writing
The Thursday Reading Group
For two years we read one paper or essay a week, out loud, with a hard stop. It changed how the team argued more than any offsite.
agents
The Agent Is a Loop, Not a Person
An agent is not a colleague. It is a loop with tools, memory, and a stopping rule. Treat it like a person and you will design the wrong system.