What I learned shipping nothing for six weeks
The project folder says otherwise. Forty-one commits, three rewrites, zero releases. That is the entry fee, and it was worth paying.
For six weeks I shipped nothing. The repository says otherwise: forty-one commits, three full rewrites, a migrations folder deleted twice. If you judged the work by its public surface, it did not exist. Judged by what it taught me, it was the densest stretch of the year.
The mistake I kept making was treating the release as the unit of progress. Release days are legible. You can point at them. But the actual work of the six weeks happened in the unreleased versions, and each one failed in a way that narrowed the next.
Version one had a database for a problem that was a folder of files. I spent nine days on schema design for a thing that needed a directory watcher and nothing else. The schema was good. That was the problem: it was good enough to keep, and every day I kept it, the project owed it another feature. Deleting it felt like losing nine days. Keeping it would have cost the next thirty.
Version two had a plugin system for a product with one plugin. Hooks, a registry, a manifest format, the works. I built it because the last project had needed one and this one might. “Might” is how a codebase gains weight: each speculative feature is defensible alone and indefensible as a pile. The plugin system survived four days before I noticed I had written 1,800 lines of infrastructure around a single call site.
Version three was honest enough to notice that the interesting part was not the machinery but the constraint: the thing had to work offline, in one file, owned by the reader. Once that was the spec, most of the code stopped being arguable. The storage layer became a folder. The plugin system became a function. The sync engine I had been dreading became a timestamp comparison that fit in eleven lines.
I wish I could say version three was designed. It was not. It was what remained after I ran out of things to justify. There is a real difference between a small thing you planned and a small thing that survived three honest attempts to make it bigger. The second one carries evidence the first cannot have: every deleted line was a hypothesis that failed in code instead of in a design review.
Each rewrite deleted more than it added. That is the tell I now watch for. When a project starts shedding code faster than it gains code, it is converging. When it gains code faster than it sheds, it is still shopping.
There is a second tell, subtler and harder to fake: the commit messages change shape. Early commits name machinery: “add migration runner”, “plugin registry scaffold”. Late commits name behavior: “file watches itself”, “reader owns the export”. When the messages start describing what the thing does instead of what it contains, the design has stopped performing and started working.
A third tell lives in the diff reviews nobody else sees. In the early weeks I could not explain most of my own commits in one sentence. By the last week each one compressed to a clause: “delete the sync engine”, “folder becomes the store”. Small diffs with confident descriptions are the paperwork of a design that has stopped hedging.
There is a cost ledger here that does not appear in the commit history. Six weeks of shipping nothing meant six weeks of having no artifact to point at when someone asked what I had been doing. The honest answer, “deleting things until the design confesses”, sounds like a euphemism for procrastination until you are the one who watched three full architectures collapse under their own imports. The quiet weeks were not empty. They were where every wrong version got a fair trial and lost.
Would six more quiet weeks have helped? Probably. The fourth version still has a settings panel nobody asked for and an import path that handles a format zero users produce. Knowing the tell does not make me immune to it; it just makes me faster at hearing it. The first rewrite took nineteen days to concede. The third took four.
The public version of this story ends with a launch. The real version ends with a folder that is 80 percent empty and finally load-bearing. Shipping nothing for six weeks was not the cost of getting here. It was the work itself, wearing a disguise.