I've completed a few side projects with a clear end-goal over the past few months and found an interesting thing about the projects I've worked on in my spare time.
The hard part about finishing side projects, or inded any sizeable project that has a clear "this is now finished" point for me is, by far, the end of the project. I'll use this post to explain my thoughts and reasons why.
For most people this is the easiest part of project work. It's easy to think up of a few awesome ideas when you have the image of the end-goal in your head. I personally have a few lifelong goals myself, such as "doing a minecraft" with a zombie survival-horror game, creating a first-person shooter game with online multiplayer, creating a hugely successful augmented reality game, creating an industry-standard web application, launching my own business and generaly becoming a very successful person. It's pretty easy to dream and even dip your toes in the water, but it can be quite difficult at times to keep going and develop your prototype into something more substantial. I get around this by only having one project that I'm actively working on at any one time. If you have more than one, you'll be completely unfocused and it'll be that much harder to complete any of your projects. It's also a good idea to establish a baseline or the minimum that you want your project to do. The lean startup touches on this idea and encourages creating function/feature/baseline A before moving on to B. I essentially did this with my android app Rotten Alive, which I'll discuss further in a minute.
This is the nice, productive part of the "side project life cycle". You've already got a decent amount of work done and have the motivation to keep yourself going. If you get to this point, the ease of which you can add new features should keep you going. If you're running out of steam already, then you can either come back to your current project later (bad) or slog through it (And get a good project under your belt, as opposed to essentially nothing). If worst comes to worst, you can scale back the scope of your project so that you can get something out the door and improve it later. This is what I did with my Android game in the beginning.
This is where things either start going wrong, or you find that you underestimated how something works. You're so close but can't quite manage to wrap up all the loose ends before another loose end rears its ugly, loose-endy head. An example of this would be both my android app and this blogsite. Rotten Alive actually had to be scaled back pretty far before I released it (It originally was meant to have an inventory feature that opened up more options, several chapters, and I planned on using more android features such as the microphone and the a kind of "passing of time" feature with android handlers). I was getting pretty sick of the project and had put so much effort into it that I just wanted to get a "version 1.0" out there so I could quickly get some feedback/downloads while I worked on another project, which ended up being this blogsite. This blogsite has, and is currently still giving me, a few minor issues with CSS and some security concerns, but for now it is something that I am quite happy with. The development of this blogsite was quite straight-forward and I knew I needed a blog to give me an outlet, as well as fulfilling a project idea I'd been having for a while. The difficult part with this blogsite was getting it hosted on digital ocean and sorting out/learning things you wouldn't expect in software development. For example, I didn't think I'd need to register my own domain for my digital ocean server space. I figured they'd just handle that for me. I also didn't know I'd need a google merchant account before I'd get any money, so it was a good learning experience for me.
In conclusion, know what you're getting yourself in for when it comes to side projects and pace yourself. As long as you have something FINISHED to show for it at the end of the day, you're golden.