The last commit of 2025, followed by fifty-two days of nothing:
e4ddb0f - “Add CLAUDE.md: Session setup guide for Windows cmd.exe”

CLAUDE.md is a file you write for an AI coding agent. It tells the agent how your environment is set up, what tools are available, how to behave in your codebase. It was a hand-off note.
I hadn’t been using an AI coding agent on this project. I’d decided, quietly, months earlier that I wouldn’t. Build it properly. Understand every part. Don’t shortcut it. If I couldn’t build it end to end on my own, did I really understand it?
There was ego in that. I can see it now. At the time it felt like rigour.
Writing the CLAUDE.md file was the first admission that the rigour wasn’t working. That I needed help, and I didn’t want to ask for it, and I’d found a way to ask that let me pretend I wasn’t asking.
Then I shut down the computer and flew to Australia.
Burning out in slow motion
I’d stopped being useful to the project weeks before the commit. I just hadn’t admitted it yet.
The symptoms weren’t dramatic. No crashes. No visible failures. I’d sit down to work and every change felt like it might be fixing the wrong thing. Every run produced outputs I couldn’t quite trust. Every subsystem looked correct in isolation and felt wrong in aggregate. Five months in, hundreds of commits, dozens of subsystems, a codebase that had grown beyond what I could hold in my head, and I couldn’t tell you, honestly, whether any of it was working.
You don’t notice burnout the way it happens in stories. You don’t collapse. You just get slower. The obvious next steps stop feeling obvious. You open the project and close it again without doing anything. You tell yourself you’ll look at it properly tomorrow.
By the time I wrote the CLAUDE.md commit, I’d been unproductive for weeks. The commit was the last thing I had left.
Writing it felt like failure. Not a crash or a systems failure. Just a slow loss of momentum, clarity, and motivation.
That is how projects usually die. They don’t fail. They just… stop.
Christmas was the excuse I needed. Family in Australia. A reason to leave the country that wasn’t ‘I can’t do this anymore’. I took it.
What I couldn’t do over Christmas
The project didn’t get better while I was away. Projects don’t heal themselves.
But it didn’t get worse, which was the first time that had been true in a while.
The distance mattered. Not the break from the project. I’d been effectively not working on it for weeks before the flight. What mattered was distance. Different continent. A different time zone, people who didn’t know or care about data pipelines. No computer quietly humming at me reminding me of what I wasn’t doing.
I didn’t think about the project much. When I did, it wasn’t useful. It was the kind of thinking where you circle the same problem and reach the same dead ends you’d already reached, except now you’re doing it on a beach.
What shifted, slowly, was the shape of the thing I was avoiding. At the start of the trip, the project felt like a thing I’d failed at. By the end, it felt like a thing I’d been wrong about in a specific way, the way I’d insisted on building it. And the specificity mattered. If the failure had a shape, maybe it could be fixed.
I flew home in January. I still didn’t want to turn on the computer. But I could.
The audit
When I sat back down, I didn’t start by writing code.
I’d been writing code for five months and it had produced a system I couldn’t trust. More code wasn’t the answer. The answer was to figure out what I’d actually built.
So I did the simplest, most boring thing I could think of. I traced the pipeline end to end.
Data collection. Ingestion. Preprocessing. Training.
On paper, everything was there. Five collectors, parallel orchestration, rate limiting, quality scoring. Weeks of work. I’d written most of it twice.
In reality, at runtime, zero of those collectors were being invoked.
Not at all. Like, they weren’t even there. The code was there. The configuration was there. The tests passed. The pipeline ran end to end without errors. They all ran and worked individually, perfectly. And yet, the critical path was never executing. The thing I thought was feeding the entire system wasn’t.
The system had been running on residual data. Whatever had been collected before the bug was introduced and the scattered successful test runs, was enough to keep training alive. Enough to produce metrics. Enough to make the loss curves move in the right direction.
Everything I’d been doing in the previous year: the cleaning, the deduplication, the augmentation, the carefully rebalanced classes, had been done on a dataset that wasn’t growing. I’d been polishing a corpse.
Why it fooled me
Nothing crashed. That’s the whole thing. That’s the class of failure.
A system that crashes tells you something is wrong. A system that runs, produces outputs, and updates metrics tells you everything is fine. From the outside, those signals are almost identical. The only difference is whether they’re true.
I had trusted the wrong signals. I’d assumed that if it runs, it’s working. That if metrics improve, it’s learning. That if outputs look plausible, the pipeline is correct.
None of those are true. A system can run without executing its critical path. Metrics can improve on stale data. Outputs can look convincing for the wrong reasons.
What I’d built wasn’t a functioning system. It was a convincing simulation of one.
And I couldn’t see it, for months, because I was the one who’d built it and I didn’t want it to be broken.
What actually ended
Fixing the collectors was a day’s work once I was looking in the right place. It’s not the interesting part of this chapter.
The interesting part is what the break actually did. It didn’t give me new skills or make me a better engineer. It didn’t solve anything.
What it did was separate me from the version of myself who’d insisted on building this alone. Far enough away that when I came back, I could look at the system without needing it to prove something about me.
The CLAUDE.md commit is still there in the repo. I haven’t deleted it. It was the first honest thing I’d written in weeks. An admission, in the only language I had left, that the rule I’d set for myself wasn’t working.
The goal had quietly changed too. It wasn’t to build something alone anymore. It was to ship something that worked. I’d set myself constraints. Do it all yourself. Understand every line. No shortcuts. They’d been the point of the project for five months. They weren’t anymore.
I didn’t hand the project over to an agent when I got back. I did the audit myself. I found the bug myself. But the rule had broken; I just didn’t need it.
That was the real fix.
The technical discovery was just what it looked like from the outside.
To be continued.