I planned to do another technical post, but after discussing it with a few friends, I thought it would be also cool to discuss how I keep myself motivated and productive on my personal projects. It actually turned out a bit less coding oriented than I wished, but seeing as this gets me enough time to devote on coding oriented stuff (and writing in this blog) I guess it’s OK. I’d like to be quite clear that this is a 100% personal “system”, not backed by any studies, and might not work for others. Probably I just reinvented the wheel (wouldn’t be the first time), and there’s thousands of papers discussing “my” simple method, but I never looked it up. Works for me, and that’s enough :)
Let me explain, without going into much detail, my personal obligations day to day, as without proper context, some of the things I discuss later may sound a bit strange.
I work as a game developer, 40 hours a week (usually). At the moment, I live in a shared flat, that meaning that I’ve to do the usual house related tasks (washing clothes, keeping the house sort of clean, etc). That’s, more or less, my weekly obligations, as there’s “no way” around to avoid those (besides living in a dirty flat, wearing smelly clothes and getting fired from my job, that is). Also, going to work and back usually steals an hour or so of free time, so let’s count that too.
Now, to the stuff that I would like to do on the rest of my free time. I usually go jogging as much as I can (that means 3-4 times a week minimum), like to read (books/blogs/etc), play video-games, and work on my 3D engine. So, how I schedule my free time to get the most of it, while keeping myself motivated, and thus avoiding going from work to the sofa and back due to laziness?
My main problem (and I guess I’m not the only one), is losing time randomly checking websites, playing video-games 6 hours in a row, or just idling. Don’t get me wrong, I like doing some of that stuff, but in my opinion that shouldn’t eat all your free time. More importantly, I don’t want to stop checking random websites, neither playing video-games, so how do I keep those under control, and keep myself productive? Well, I just schedule my free time as tightly as I’d do at work.
I schedule all my free time out of work, that includes my obligations (for example, eating or ironing clothes), and my hobbies (implementing something new on my 3D engine, exercising or playing video-games). First, I just make a list of all the stuff that I want to get done, for example, taking from a list I made a few days ago:
- Try Bulletstorm demo
- Ironing clothes
So I just start with this, which is a simple enough list. The list is created the same day I do the tasks detailed in it, so it’s scope is pretty small. That helps me schedule things pretty tightly. If I’d have more items than what I think it’s doable in a day, I just defer those with less priority. I never write down the priorities, as they’re usually quite clear for me (for example, ironing clothes has more priority than coding, and coding has more than gaming). Then, with those written in a piece of paper, as it’s important for me to have something physical that reminds me what I’ve done and what I’ve left, I just give them time spans:
- 20:50 – 21:15: Try Bulletstorm demo
- 21:15 – 22:00: Jogging
- 22:00 – 22:45: Dinner
- 22:45 – 23:15: Ironing clothes
- 23:15 – XX:XX: Coding (fix texture loading in the openGL graphic driver)
I don’t include skimming through blogs or reading mails there. I usually do those after waking up (before getting to work), during breaks at work, or eventually between tasks on the list (but I tend to avoid that). Also, I try to keep all the items as simple as possible, that way I avoid tasks that could span several hours: I usually don’t have that much time in a single day to devote to a single task, so that would probably never get done.
Then it’s just a matter of getting everything on the list, done. That might sound like a bit difficult thing to do, but (for me) getting things tightly scheduled, knowing exactly what I’m going to do, and when, keeps me on track. It keeps me focused on what I should be doing at the moment, instead of switching tasks constantly and losing time more than else. I usually make a tick after each item when it’s done, so I can see in a glance what’s done and what not. I usually also use alarms on my mobile phone for tasks that aren’t time bound (like playing video-games or reading a book).
The other problem that I’ve to battle, is how to keep myself motivated on coding at home, reading technical stuff and just not laying on the sofa after working all day. I do apply several simple ideas here, some work better than others for me.
I never stop doing something because of laziness. An example of that is jogging: some days I’ll get home and I’ll just be tired, and would prefer just staring at a wall. But then I’ll just grab my running clothes, and go running. Why? Well, it’s good for my health (I guess I don’t have to discuss that) and cleans my head after +8 hours of coding. Of course I’m tired after a whole day of work, but laying down in the sofa won’t actually clear my mind or avoid having back problems, so I never let laziness get in the way.
More focused on coding, I tend to keep myself motivated by dividing big tasks, for example, implementing omni-directional shadow maps, into smaller ones, for example, getting the graphic driver to accept procedural cube-maps. This gives me small, very focused task to work on, and a sense of accomplishment after finishing this. Also, it fits quite nicely with my daily schedule. I try to avoid switching projects often (often meaning more than 2 projects a month, for example), as it kills my productivity, more than motivating me after working on the same thing for a while.
I keep always in mind that some of the stuff that I do at home might eventually feel like work, so whenever I have to code something I hate, or I’m tired and don’t want to go jogging, I still know it’s for a good reason (being more healthy or getting the engine ready for that really cool feature you’re developing). That’s even worse with projects that might have a deadline, as it’s with demoscene productions, but I guess it’s the price to pay if you’re really interested on doing stuff besides work.
Let some days slip
Even if I’m motivated to use all my free time as efficiently as possible, I also know that I shouldn’t schedule all my life so tightly, so I let some days slip from my schedule from time to time (1-2 days a week, not always on weekends). These days I just do stuff that I wouldn’t be able to schedule (for example, enjoying tea with friends), or just spending an evening going through a game (lately, Uncharted). It’s healthy for me, as then I get back to my tight schedule with renewed energy.
In perspective, you might think that I’m just discussing how a TODO list works. And you might be right, as it’s not more complex than that. But it works for me, and after getting asked how and why I push myself into doing so much stuff on my free time a few times, I thought it would be cool to think about it and write it down.
I’m also quite interested on how people keep themselves motivated on their personal projects, how do they organize their free time, as I have read a a lot about how to organize yourself at work, but not much about how to organize free time :)