I Do Not Fix a Problem the First Time It Happens
I don't fix a problem the first time it happens. The first time is noise. You can't read a signal from a sample of one. First time I log it. Second time I investigate. Third time I build the fix.
Why I Do Not Fix a Problem the First Time It Happens: A Rule from My Operator to Builder Transition
The single most useful discipline I picked up in my operator to builder transition is also the one that looks most like negligence from the outside. When something breaks the first time, I do not fix it. I write it down, and I wait.
That sentence makes careful people uncomfortable. It made me uncomfortable for a long time. So let me explain what it actually means, why it took me years to learn, and how it changed the way I build.
The Old Frame: Every Failure Deserves a Fix
For most of my operating life I treated a failure as a debt to be closed immediately. A report went out wrong, so I added a check. A vendor was paid twice, so I added an approval. A handoff got dropped, so I added a step. Each fix felt like maturity. Each one felt like the responsible thing to do.
What I did not see was the compounding cost. Every fix is a permanent tax on the system. It adds a step, a rule, a branch of logic that every future person or process has to carry. I was closing single incidents by making the whole machine heavier.
This is founder psychology scaling in the worst direction. The same instinct that makes you good at firefighting, fast reaction, total ownership, zero tolerance for a repeat, is the instinct that clogs your system with special cases. You end up with a process that is 30 steps long because 30 things went wrong once, years ago, and nobody ever removed the scar tissue.
The Moment It Clicked
I run my business as a personal operating system, a set of AI agents and rules that handle real work, and I build it in public. That decision forced a change in how I treat failure, because now the failures are logged, timestamped, and visible.
A few weeks ago one of my agents produced a wrong output on a routine task. The old me would have stopped everything and written a new rule that night. Instead I did what the system is designed to do. I logged the incident and left the rule set untouched.
It never happened again. Not once in the weeks since. If I had written the guardrail, I would now be maintaining a rule that protects against something that occurred a single time and may never return. That rule would sit in my files forever, read by every future version of the agent, slowing every future decision, for nothing.
That is when the principle became concrete for me. You cannot separate signal from noise on a sample size of one.
The Rule of Three
Here is the actual framework I use now. It is deliberately boring, which is the point.
FIRST OCCURRENCE. Log it. Do nothing structural. Name what happened, when, and what it cost. No fix, no rule, no new step. You are collecting evidence, not acting on it.
SECOND OCCURRENCE. Investigate. Now you have a line, not a dot. Ask whether it failed the same way or a new way. A repeat of the exact failure is a signal. Two different failures that happen to look similar are still noise wearing a costume.
THIRD OCCURRENCE. Build the fix. Three of the same failure is a pattern, and a pattern has earned a permanent place in the system. Now the tax is worth paying, because you are buying down a cost that is real and recurring, not imagined.
The rule of three does one job. It stops me from designing for events that never come back.
Why This Is the Hard Part of the Operator to Builder Transition
An operator is paid to make the problem in front of them go away. Right now. That is the correct behaviour on the floor of a live business, and I spent 14 years getting good at it inside large operations. When the line stops, you do not run a three-occurrence study. You fix the line.
A builder is paid to design the system that decides which problems are worth solving at all. Those are different jobs with opposite reflexes. The operator reflex says act. The builder reflex says observe. The whole transition, for me, has been learning when to switch which reflex on.
The tell is discomfort. If sitting with a broken thing feels wrong, you are probably still wearing the operator hat. Learning to leave a first-time failure alone, on purpose, was the clearest marker that I had actually started to build rather than just execute faster.
What This Looks Like in Practice
A short checklist I run before I build any permanent fix:
- Count the occurrences. One is a dot. Two is a line. Three is a pattern.
- Check the shape. Same failure repeating, or different failures I am pattern-matching by mood?
- Weigh the tax. What does this fix cost every future run, forever, versus the cost of the failure recurring?
- Name the trigger. If I will not fix it now, what exact signal will tell me it is time?
That last one matters. Waiting is not the same as ignoring. Every logged incident carries a condition that would promote it to a fix. I am not hoping it goes away. I am watching to see if it earns my attention.
The Principle
Speed of reaction is an operator virtue. Restraint is a builder virtue. The move from one to the other is not about getting slower. It is about spending your fixes where they compound and refusing to spend them where they rot.
A business, like a codebase, is defined as much by what you refused to add as by what you built.
A system patched for every one-off becomes a museum of problems that only happened once. I would rather run a lean machine that occasionally repeats a small failure than a heavy one that has never made the same mistake twice and can barely move.
When something breaks in your business, how do you actually tell a pattern from a bad day, before you spend real effort fixing it?
The One Exception
There is a failure class I do fix on the first occurrence, and it is worth naming so the rule does not sound reckless. If a single failure is irreversible or unsafe, waiting is not discipline, it is negligence. A payment that cannot be clawed back. A data loss with no backup. Anything where the first occurrence is also the last thing you get to learn from. Those get fixed immediately, because the cost of one more instance is unbounded.
The rule of three is for reversible failures, the ones where a repeat is annoying but survivable. That covers the large majority of what actually breaks in a business day to day. The art is telling the two apart honestly, and not using the word irreversible as an excuse to keep firefighting everything.
What a Real Pattern Looked Like
The mirror image is just as instructive. Earlier this year a specific handoff between two of my subsystems failed. I logged it and waited. It failed again the same way a week later. I investigated and still held. The third time, the pattern was undeniable and identical, so I built the fix, a shared record both systems now read before they act.
That fix has paid for itself many times over, precisely because it solved a pattern and not an incident. Had I built it after the first failure, I would have guessed at the cause and probably designed for the wrong one. Two more occurrences told me exactly what to build. Waiting did not just save me a useless rule. It made the eventual fix correct.