In this entry, I want to talk a little bit about a very simple thing that many people do when they first start out making a game. Specifically, I'm talking about a ToDo list. The thing is, when you start about a project either alone or with a few friends, the thing you need to keep on top of is motivation. When you aren't being paid, when the payoff to whatever you're working on is months if not years away, it gets to be extremely difficult to maintain consistent motivation on your project. I work full time, and I have a life outside of work. Finding time to work on my game is often hard, and when I do have some time with no specific responsibilities, its even harder to convince myself to word on code rather than, say play a game.
That said, I have been fighting this battle daily, and mostly I've been winning. What follows is several things that I have done to help myself stay motivated.
- Keep a TODO list: What I mean by this is keep and maintain a list of short term goals when it comes to developing your game. Some people use fancy programs, which are all fine and good. I have a simple TODO.txt file that I keep right in my code directory. There are several uses for it... specifically it keeps me focused on my immediate goals, and it helps me track progress. The most important part about it, for me, is marking things as **DONE**. What you see there is literally what I put down in my file. Marking things off is one of my greatest motivations, as is seeing a huge list of things I've already accomplished. See, its very easy, especially early on, to despair at how much you have left to do and how seemingly little you've done so far. It often seems like you aren't making any progress at all. Having that list of tasks manages that. This leads into my next point as well.
- Keep Moving Forward: Another way in which you should manage your progress is to make sure you are regularly improving your game outwardly. Now, there are absolutely times when you'll be working on some aspect of your game that's going to take 5 or 8 or 15 hours of work to finish. During that time you may not have much to show for yourself outwardly. Your game will look just like it did when you started... This leads to a feeling that again, you aren't making any progress. I would say the best way to combat this is to consistently give yourself small tasks you can do in the midst of the big ones. An example would be... I'm currently working on some basic enemy AI, which is something I've never done before. I'm proceeding slowly and not being overly ambitious. Even so, its taking time. So, that being said, I've been doing little things in my game. Today I put in some code to enable some new mouseover events to happen. Tomorrow, I intend to upgrade the camera functionality on my map just a bit. These are pretty simple and straightforward tasks, but they give me something to show for my work, and allows me to continuously feel that I'm making progress.
There are absolutely many other techniques for maintaining one's motivation, but I wanted to share a few of the things that work for me. It's very easy to get overwhelmed by the mountain of work that you have ahead of you. It's easy to feel like you'll never finish so why bother trying. The thing is, when you climb a mountain, you aren't constantly looking at the summit. Instead, you just focus on the next handhold, the next ledge, the next marker. It's the same with this. Keep your focus small, and keep on moving.
The TODO list has definitely been a boon for me. I'm not the most proficient, or prolific coder, but I've been keeping a personal ournal of my own for some time. It lets me keep thoughts i have on any project i am working on.
Many times I have finished a late night coding session a buzz with great ideas, only to find that i don't really remember them the next day/week/month. At the end of one of these marathon sessions I can quickly jot down "stream of conciousness" style before I retire for the evening, and then I have a record of what I was aiming for. These entries often include bugs, that I have found that I would hate to repeat, or dead end paths that I've arrived at before(Where maybe my choices previously where not the best ones i could have taken). I can always check the journal to see if perhaps I'm making the same mistake as I have previously, which helps me to identify and fix it much faster the second time. It also stops me from jumping off into the deep end, only to find myself in an area that I've flagged off with a "no diving" sign(sorry about the obtuse metaphore).
In addition to the overall journal, each individual project also contains it's own change history, which is where I keep the TODO lists. Often I'm working on a project that incorporates another library that I've created, and don't have time to implement/test changes too. I can quickly prototype the functionality I need in the project(many of which are throwaways), and leave a note to myself in the includeded library's TODO list. The next time I work specifically on that library, I have a nice list of functionality to implement, along with reference implementation to work from.
With the journal, I can see how often I'm actually working, or when I've been slacking. I can quite visibly see me growth as a programmer, and reading older entries is often quite humourous( How did I even end up with a usably math library, when the 3 year younger version of me was so hopelessly confused).
With the change log, I can see all the progress I've made in the past, and even if they are not visible in the end result, the record alone is proof that i've accomplished something.