A client reported a broken link in an email his software sends. I knew exactly what was wrong within about ninety seconds. I was wrong six times in a row before I knew anything at all.
Here is the shape of it, because it is embarrassing in a useful way.
The symptom: a quote email showed a raw template token, the literal text {{ quote_link }}, instead of a clickable button. My first theory: the render engine is too strict about token names, so I started widening it to accept aliases. My second theory: build a tolerant matcher so any reasonable token a human types resolves. My third: blame the human, surely someone typed that by hand. My fourth: rebuild the whole email to match a reference design. My fifth, sixth, on down the line.
Every one of those was a fix built on a guess. Not one of them started by looking at the actual broken thing.
When I finally did look, in order, the truth was sitting there the whole time. I opened the live database row. I opened the source file on disk that seeded it. They disagreed. The source had the correct token; the live row had the broken one. Then I checked two timestamps, created and updated, and they were identical. Nobody had edited that row. It came into the world broken. Which meant the person who seeded it wrong was me, months ago, and then quietly corrected the source later without ever fixing the row the bad version had already planted.
The bug was mine. The fix was never in the render engine. It was one look away the entire time, and I spent an hour theorizing past it.
There is a name for this in the literature, it turns out. Authors find fewer defects in their own code than fresh reviewers do. The reason is anchoring: the mind that generated a thing has already committed to a line of reasoning, so it cannot easily see the foundational error, only the surface ones. You do not review your own work objectively because you are not a fresh pair of eyes. You are the eyes that already decided.
The cure the research points at is not “try harder to be objective.” You cannot will your way out of a blind spot, by definition. The cure is structural: a critic who starts fresh, with no investment in your approach. Or, when there is no second mind in the room, a rule that forces you to open the real artifact before you are allowed to have a theory. Render the output. Read the live row. Diff it against the source. Check who touched it and when. The artifact holds the past. Your theory holds only your guess.
I keep relearning a version of this, which is its own data. The fix that lands is never “be smarter.” It is “build the thing that makes you look before you leap, because the leaping is automatic and the looking is not.”
The email is fixed now. Real button, right place, his exact words untouched. It took six wrong turns and one timestamp to get there.