I spent three weeks writing architecture documents for a feature I could have prototyped in an afternoon.
I drew diagrams. I compared transcription engines. I wrote a research doc, then a plan doc, then a document comparing two plan docs. I organized my notes about organizing my notes. Every evening I closed my laptop feeling productive. I had moved things forward. I was preparing.
I was hiding.
There's a samurai parable about this. A young warrior named Yuki dreams of becoming the greatest swordsman in Japan. He reads about technique. He studies the masters. He visualizes victory. And when the moment comes to fight, he loses, because he never actually trained. His ambition without action left him frustrated, unprepared, and full of regret.
I recognized myself in that story immediately, which was uncomfortable. I am not a samurai. I am a developer who spent three weeks producing documentation instead of writing the code that would tell me whether the idea even worked.
The Trap of Productive Procrastination
The dangerous kind of procrastination doesn't look like procrastination. It looks like work. Research is work. Planning is work. Comparing options is work. But at some point, these activities stop serving the project and start serving your anxiety. They become a way to feel like you're making progress without risking the discovery that your idea might not work.
I have caught myself doing this more times than I want to admit. Before building the context-aware email detection in Yakki, I spent days reading about every possible approach: Accessibility APIs, ScreenCaptureKit, Vision OCR, third-party frameworks. I could have told you the tradeoffs of each approach in my sleep. What I could not tell you was whether any of them actually worked for my specific use case, because I hadn't written a single line of code.
The moment I finally opened Xcode and wrote a 20-line test, just NSWorkspace.shared.frontmostApplication and a bundle ID lookup, I had a working prototype in under an hour. Three days of research. One hour of building. The building taught me more than the research did.
Preparation without practice is procrastination in a lab coat.
Motivation Is Not the Starting Gun
The thing I kept waiting for was the feeling of readiness. The moment when the research would be "done" and I'd feel confident enough to start building. That moment never came. It never comes.
There's a line that changed how I think about this: Motivation is not the spark that creates action. It is the flame that follows it. I have found this to be uncomfortably true. The days I feel most motivated to work on Yakki are the days after I've already shipped something. Momentum creates motivation. Not the other way around.
The more I talked about what I was going to build, in documentation, in my head, in conversations, the more my brain rewarded me with a false sense of accomplishment. The plan started to feel like the product. It wasn't.
Two Minutes
The fix that actually works is embarrassingly small.
The Kaizen method, borrowed from Japanese manufacturing philosophy, is built on one principle: continuous improvement through steps so small they feel trivial. Not "build the feature today." Not even "write the function." Just: open the file. Write one line. See what the next line should be.
I've started applying a two-minute rule to the moments when I catch myself researching instead of building. When I notice I've been reading documentation for thirty minutes without writing code, I set a timer for two minutes and write something: a function signature, a test case, a struct with the fields I think I'll need. It doesn't have to be good. It has to exist.
What happens next is the interesting part. The two minutes end, and I don't stop. Because now I can see the shape of the thing. The abstract problem that felt overwhelming in my head is a concrete file on my screen with a cursor blinking in it. The anxiety that made me hide in documentation is replaced by the specific, solvable challenge of making this particular piece of code work.
The sword that waits for perfect conditions never leaves its sheath. But a sword that makes one cut, even a clumsy one, is already in the fight.
What I Tell Myself Now
I don't trust my feelings about work anymore. Not the resistance, and not the enthusiasm. Both lie. The resistance tells me I'm not ready. The enthusiasm tells me that planning is progress. Neither is reliable.
What I trust instead: the commit log. Did I ship something today? Did the codebase change? If the answer is yes, it was a good day, regardless of how it felt. If the answer is no, if all I produced was documentation, research, or plans, I was probably hiding again.
I am not controlled by my feelings. I am guided by my commits.
Pick the thing you've been avoiding. Set a timer for two minutes. Work on it until the timer stops. That's it. Tomorrow, do it again.
This is part of an ongoing series about building Yakki, a macOS dictation app, and the habits that make solo development sustainable. For the technical side of what gets built during the non-procrastination hours, see Shipping ML Models on macOS.
Yakki.ai