I'm a perfectionist, so it's easy for my pet projects to stall as I finish the last 1% needed to make something perfect.
Unfortunately, that 1% often takes longer than the original 99% of production.
This is no more evident than when I transition from one machine to another. Right now, I'm moving all of my personal files from one laptop to a new one - and the number of seemingly-abandoned almost there projects littering the drive is astounding.
I found several partly-finished WordPress plugins. One is a comprehensive sitemap plugin. Another is a replacement for Jetpack's post subscription module. Yet another is a home-grown stand-in for Evernote.
One is even a semantic content scanning plugin that builds post relationships based on the relative distance between topical "vectors" created by the content.
I have no idea when (or if) these projects will be complete - so I'm copying them wholesale from one system to the other in the hope I'll come back and finish.
There are even a handful of core DIFFs sitting around. I've taken a few tickets from WordPress Trac and invested considerable time in patching them. Unfortunately, the patches aren't complete - some actually break things more than the original bug - so they live as half-finished projects on my machine. Perhaps I can return and close them off for a future version of WordPress.
I even have some half-finished .Net projects living on the machine. I stopped working in C# shortly after .Net 4.5 shipped, so these projects are even older than the WordPress ones above.
I have database abstraction layers - complete with comprehensive test suites. I have custom web controls. I even have a .Net wrapper I built to enable the use of Gecko in Windows projects sitting around. I was halfway through implementing the C++ API for HTML5 video in C# when I shifted gears. Gecko has launched a few new versions since then. I should go back, finish what I started, and get this thing released.
It's Always "Someday"
One of my favorite long-form blog posts was written by WordPress' Matt Mullenweg: 1.0 is the loneliest number.
You can never fully anticipate how an audience is going to react to something you’ve created until it’s out there. That means every moment you’re working on something without it being in the public it’s actually dying, deprived of the oxygen of the real world.
It's easy for a perfectionist to get caught up in the details. We build a project, tweak a thing here or there, and hold back the release until everything is just right.
I've often finished a weekend marathon coding session and pushed my changes to a private BitBucket repository so I can let things sit a few days before launching it into the world. Unfortunately, that launch day rarely comes.
Someday I'll finish the project. Someday it will be good enough my friends and colleagues won't laugh when I post it on GitHub. Someday I'll release something the developer community respects (rather than tears down for minor mistakes).
Someday I'll increment to version 1.0 and move on with my roadmap.
Someday is today.
Stop wasting time trying to perfect the final 1% of the project. It won't happen.
Release your 99%-finished project into the world and maybe, just maybe, it will be good enough no one will care about the missing bit - or even better, another developer will take the time to submit a patch.