It seems to be a common story with almost every software dev I meet; they have a laptop full of side projects that were started many months or years ago but, sadly, never saw the light of day. Many of my projects have met the same fate. Why is this so common?
I think the answer is that it's easy to start something, it's very hard to finish it.
There are at least a couple of stumbling blocks that get in the way of our ability to finish projects. First, if you're mostly an "idea guy" or are very good at prototyping (most entrepreneurs are) there can be a false sense of progress early on in the project's life. It's probably a safe bet that it falls under the 80/20 rule. You can quickly get a working prototype up that has most of the features you've been dreaming about for this project and all of the sudden it feels like you are about 80% of the way there! But as you dig into that last 20% you realize there's a lot hidden when you start considering things like security, scalability, production-level exception handling, deployment, software updates, etc. Taking care of all that "boring" but necessary stuff starts to add up quickly and can feel like such a burden that it causes a lot of developers to tap out too early; myself included. Sometimes you start to discover ugly little details at the end of the project that make you start to doubt if you'll be able to finish it at all! And to make matters worse, if you're working on this project with a business partner, they may start to feel like you've fallen off the pace, maybe even accuse you of slacking a little. But the real problem is that they don't understand all that goes on behind the scenes in order to truly finish a project.
Another problem with finishing projects is knowing when to call it finished. Is it really finished or are you just making it as good as you can before a deadline? It's a tough thing to balance. I strongly believe that self-imposed deadlines are actually a great productivity booster. If we aimlessly set out to work on a project until we deem it "finished", it's very likely that we will get lost and the motivation to finish the project will take a fast nose dive to zero.
I've found that if you get into the discipline of telling yourself to stop at predefined intervals, the project moves faster overall. What does that look like - maybe it's just picking two features or pieces of functionality this week and finishing them completely. I've also found it helpful to start mixing in the no-so-fun tasks early on in the project lifecycle so that you don't get stuck with all the tasks you hate to do at the very end of the project. So if you're going to pick two features or functions this week, for example, pick one thing you love working on and pick another that you know you don't like but has to get done.
There's a great application point for us here to - if you're able to find a developer who is good/passionate about finishing, hold on to him with all your might! It is so rare to find developers who can finish! Having a good finisher is more valuable than having three good creators/starters on your team. You don't have a product until it ships!