As you may or may not know, I have a full time job developing games at QLOC and at the same time I try to develop indie games on the side. This is hard and seeing how much reaction my recent tweet on the subject received, I am not alone in this predicament. Let me clarify, 20 hours of work on a side project done in a week is a good week and I do not do this every single week. It has always been and still is very difficult for me to be motivated and persistent about my side projects, but I feel over the years I have got a bit better. I have learned that motivation and persistence is not about having some legendary willpower. It is rather about finding a set of tricks that work for you. For this reason allow me to share a few tips and tricks I have learned so far.
Tip #1 – There is no one tip to rule them all
The only 100% guaranteed rule about motivation is that there are no 100% guaranteed rules. Everybody’s psychic works differently and everybody has slightly different circumstances, so if some tip worked for one or even many people, it does not mean it will necessarily work for you. Even worse, a tip might work for you right now but will stop working when your circumstances change. The only thing you can do is search for various tips and tricks and try them out, until you find a set that suits you well. This applies to tips on this list as well, you should treat it as a good starting point on your journey rather then a complete solution to your problems
Tip #2 – Keep a detailed TODO list
Since you will be frequently working for short bursts of time, keep a detailed TODO list of stuff that needs to be done for you to finish the project. The list should be detailed enough that when you sit down to work, you will not need to waste time remembering what exactly you were supposed to do, you will just check your list and do it. This might not sound like much, but it actually is a huge time saver. Additionally, thanks to the list, you do not need to overburden your memory by remembering things that need to be done. When you notice that a certain piece of code might be a problem in certain circumstances, just add a task to the list about checking that thing later and keep working on your current task. As a bonus, crossing out a task on the list feels awesome. The list does not have to be super high tech – I usually use a piece of paper or Google Task lists and this is quite enough.
Tip #3 – Break down your tasks as much as you can
This is an extension of the TODO list idea that comes from the „Getting Things Done” methodology. Break down your current big task into many small ones that can be completed in 10 minutes or less each. This makes working in short bursts even easier, but most importantly it makes the huge task look less daunting, which will help you with motivation. Breaking the task down can be done in two ways. One is divide and conquer, this is the classical top-down method where you split the task into several smaller tasks, then split those tasks into even smaller and so on till you arrive at the desired size. The other way is chip away – this is a good method when you are unfamiliar with the task at hand, so you cannot predict how it can be split, but you can think of a few small things that certainly will have to be done before the big task is done – start working on these small things. You will gradually reduce the size of the big task, but also gain domain specific knowledge, that maybe, at some point, will allow you to split what remained of the task in a top down manner.
Tip #4 – Work in the morning
This one came as a surprise to me, I have been using it so far for just two weeks, but it works great. The logic behind this trick is pretty simple. Getting yourself to work in the evenings can be horrible – you have just worked for 8 hours and you need to wind down, not work more. So go to bed, then wake up a bit earlier and work in the morning, before you go to work. I know this may be very counterintuitive – I am a night owl myself and for my whole life I always preferred staying up late to waking early – but this totally works. When well rested not only do I find it easier to motivate myself but also I am better at what I do. I frequently find myself working both in the morning and in the evening, since the morning work session makes me so enthusiastic about the project that I jump back to it right after I come back from work.
Tip #5 – No zero days
This is something I have picked up on a bodybuilding forum. It is all about taking on this attitude: it is OK if today you have worked for an hour, it is OK if you have worked for 30 minutes, it is still OK if you have worked for just a minute. It is not OK if you have not worked at all. Try to have some work done every day. This way working on your project becomes a habit and what is perhaps more important, the details of your project stay fresh in your head. Note that I have learned that this rule has a dangerous downside – when you break the streak of working days, the feeling of guilt about it somehow makes the break even longer then it was necessary. Therefore if you have very irregular working days, this particular rule might not work for you.
Tip #6 – Plan your weeks
Working on your game every day is not always possible. Perhaps you have some other hobbies or obligations that you need to fulfill, or perhaps you need to split your attention to take care of things like marketing your game. This might make you feel like you are constantly jumping between tasks, always feeling like you are neglecting something that needs to be done. If it is so – make a rough plan of your week. Plan one thing you want to do on each weekday’s evening and one or two things to do on Saturday and Sunday. That way you can balance out how much time you will spend on various task and you will stop wasting time and energy wondering what you should be doing now or feeling guilty about neglecting your responsibilities.
Tip #7 – Keep the code runnable
This one comes from the agile development methodologies. Try your best to always keep the code runnable. If you do not, you can fall into the trap of having an unrunnable code that you do not want to work on, because making it runnable again is too much work. For that reason, in particular, always keep your refactorings local and simple and always opt for doing something with several smaller refactorings rather than one big. Big refactorings have derailed many professional projects, you cannot afford such risk.
Tip #8 – Optimize your workflow
This one is based a bit on the kaizen philosophy of management. Always look for ways to simplify and speed up your workflow. If something annoys you, look for a way to fix it. For example, when programming I usually need Unity 3D editor, MonoDevelop, Unity documentation in my browser and a file explorer window to handle the source control. So I have made a .bat file on my desktop that fires up all of these with one double click, saving me some start up time when starting to work. Similarly, when I notice that some piece of code has become cumbersome, I take time to refactor it into a more usable form. While such steps might not always pay off by saving your time, they will pay off by making it easier and more pleasant to work on your project, increasing the likelihood that you will want to work on it.
Tip #9 – Try yerba mate
If you still need to work at night and need caffeinated beverages to stay awake, try yerba mate instead of coffee. It tastes horrible, but at least for me it has a pleasant effect of not making me nervous and distracted, like the coffee does. Just be careful because it is really strong and can easily keep you awake for several hours longer than you would like to, if you drink too much of it.
Tip #10 – Some things can only be learned by failing
There are things in life for which there are no tutorials. You cannot learn them step by step. Perhaps because the steps cannot be separated, perhaps because no one really knows the steps. You just have to try to do them and fail, then try and fail again, and again, and keep doing that until at some point you will stop failing. This is something that can be learned from sports, unfortunately we programmers tend to avoid sports. But it can also be learned from multiplayer games. No matter how much you read about LoL, no matter how much you train with the bots, in your first match with actual people you will suck. You will also suck in the second and third match and so on until after a few days you will be a somewhat decent player. For me it seems that developing games is quite similar, only instead of days the process may take months or even years. So even if you fail on your current project, do not despair. It is not that you cannot be a game developer, it is just that you have not yet learned how to handle a project of such scale. Treat this failure as another step along the way and try again. Maybe try doing something smaller. Most important of all – keep trying.