Perfection vs Iteration

I incubate a lot of project ideas all the time. I have a seemingly infinite list of new apps, websites, games I want to code. With these ideas, I try to filter all of them and focus working on the ideas I think are worthwhile. The side projects I actually work on, however, often inevitably get stuck in a limbo phase.

Usually, the things I work on never see the light of day, not necessarily because I get bored or procrastinate (although I admit personal recreation often overlaps my productive free time). For things I'm really passionate about, I never really stop working on them. In fact, I always think about how I could improve said projects. I always find a piece of code to refactor, or a new feature idea to implement, or a bug that suddenly pops up and looks critical to be fixed.

And this is a problem, because all these ideas inflate my expectation of the final output of whatever it is I'm working on. I can't exactly put my finger on it. It's as if I'm stuck in a state of formulating new ideas, but never getting around to executing them, let alone finishing or polishing them. Sometimes it feels like a state of "analysis paralysis", in that I overthink the best way to solve a problem or move forward with the idea in progress. Maybe, I wonder, it's the uncertainty whether my solution is optimal, and constantly trying to find a better solution than the last one I thought of. I guess having the propensity to list all the possibilities in working on something gives me anxiety and doubt. "Did I follow the right solution? What if the other one was better? Maybe I should spend more time thinking about this problem. Oh hey another idea to explore!"

My current process of work is basically a loop of: start new project; work on some ideas; suddenly get new ideas to improve project; never actually finish because there are too many ideas started and not a lot completed. The problem is that I never actually get feedback on what I've progressed on so far, which keeps projects stuck in the "endless idea" part of the loop. I'm too focused on perfecting every aspect of the project in progress, instead of settling in an overall, "less than perfect", but releasable state for every project. I agree with how Nick Craver puts it (although in the concept of programming projects, I think the quote can be stretched to any project in general; emphasis mine):

There is no perfect app. There is no perfect architecture. There is no perfect code. You can kill yourself chasing any of the above. Never aim for perfect. Perfect is a never ending long tail of time and effort far better spent on improving other things. Aim for great.

That tweet was what actually triggered an epiphany with my mentality about working on projects. Granted, throwing away the mentality of pursuing impossible perfection is not something that is doable overnight. My personal solution on how I plan to wean myself out of the "perfectionist" mindset is this: scope out ideas and partition them into stages (in the case of software projects, releases or versions for example, e.g. v1.0, 2.0 and so on); focus on the scope of the first phase/iteration/release/whatever in the list; as soon as the list of ideas for that iteration is complete, put it out immediately so others can see and give feedback as soon as possible. For software developers, this is basically applying the Scrum framework in your side projects. 😉 The bottom line is focusing on iterating as much as you can, instead of trying to perfect the entire project in one big try. At least, with incremental outputs, people see your work sooner, and you get to figure out where to improve right away, instead of finding out the idea is a flop after you've invested so much time and effort in one swoop.

At the end of day, it's a matter of managing personal expectations, and reminding yourself that it's okay to make mistakes. No project or idea is perfect the first time around, so it's simply better to put your work out in the wild earlier, and ask for feedback sooner. Aim for great.