I’m married with 2 boys, a 2½ year old and a 9 month old. As you can imagine this leaves very little time to do projects on the side if I also want to be a good father and husband (which to me is far higher priority). Whenever I do get a chance to work on my side projects, I have to be as effective as possible each time. Here are a few guidelines I use to help me complete my products.
- Strictly define your task
Each time I get to my computer for what is usually between 1 and 3 hour blocks I need to ensure I aim to complete a specific task in that time. Obviously not much can be done in such sort blocks, but even if you only get 20 minutes, try and define a task that can be completed in that time. It may be simply a single function. It may be outlining and estimating tasks for later.
- Make sure everything you are doing is on task
Everything you do, you need to ask yourself, “is this going to help me do my task right now?”. If the answer is no drop it. In such short blocks and when they come sporadically it is very difficult to keep multiple things going at once. It takes a longer time to pick up from where you left off and that leaves you less time to get things done. Sticking to just the task at hand and completing helps you see real progress on your project which helps with motivation.
- Do things once
You should always aim to do a task and move on. Do it quickly, and mostly correctly. This is a hard one, because every developer loves to mull over code and make sure it is perfect, optimized, generic, reusable and solve every problem you may encounter. This one requires a very good balance of ensuring progress while ensuring the really important aspects such as good architecture and well tested while ensuring you are coding for the problem at hand, not one that may be.
- Learn only what you need to know
Do not over analyse possible solutions or completely learn new frameworks that you might need. Certainly be diligent, but if you find something that works that is not obviously bad, go with it and stick with it until you learn otherwise. Even if you later learn that there is a better way to do that task, do not redo it unless it is causing an issue (see above Do things once).
- Set yourself Deadlines
Even if you have no one waiting on you, and your schedule is yours to decide (or worse, not decide), you still need to have reasonable targets and really aim to hit them. This helps you cut any tasks that aren’t going to get you to that goal. This will give you only the important tasks and help you progress faster. You do not want to feel you are stagnant on a never ending project.
- Get out version 1.0
1.0 is something to be proud of but by no means is it your complete vision for the product. Getting it out quickly helps you get vital feedback from you users and can help direct your tasks to what people want. This something need to be done carefully since if you have a big launch and get lots of people to try it out and version 1.0 is buggy and incomplete, they may be reluctant to try again. You should aim for minimal features to do the primary task and well tested. Be open with the users so that they can see more is coming and that you are open and responsive to feedback.