Stack-Ranked Lists and You

March 24, 2014 at 9:25 am (Computer Science, Game Development, Programming, Rant, Teaching) (, , , , , )

If you are a professional software developer, you may be familiar with development methodologies. You may have encountered such beasts as “Agile”, “Waterfall”, or if you own a time machine, “Extreme Programming”. These are all just different ways of organizing your work. They let you decide on what to build and give you an idea of when to build it. They’re handy things to utilize and if done right, they’ll make you look younger*.

      *May not actually make you look younger.

So why am I writing this? Well, it isn’t to evangelize the way you should change your life and use what I suggest. It’s more to talk about one specific technique that’s pretty low cost and can help your cluttered development life, even for small side projects. Furthermore, I’ve found that it can help with motivation issues and help you force yourself to finish what you start. You’ve always finished your side projects haven’t you??

What I use now for my projects is a stack-ranked list. This is a list of all of the individual features that I want to implement in my software put in order of importance. Again, if you are a professional developer, you will probably begin to smell the Agile backlog here, but this is just a small slice that can offer a lot of value. First I will talk about the list itself and what that should look like and then I will discuss the idea of importance.

The feature list should be kept fairly granular in order to be things that you can achieve in a relatively short period of work time. You definitely shouldn’t go into such details as “change while-loops to for-loops”, but you should also try to break up tasks as big as “write rendering engine from scratch”. The idea here is that you can track what you need to do in an orderly fashion, but also when you’ve completed them, you get to check them off your list! Don’t sneer at this concept. Having something tangible (I mean, other than working code) that says you’ve completed something is a big deal. It’s a way to trick your brain into thinking it’s being rewarded. I go as far as to not even delete the task from my list, but I mark it in a different colour.

Lets switch gears and talk about importance. It isn’t a difficult subject, but it is ambiguous enough that it should be defined a bit better for this situation. To clear things up, “importance” is whatever you want it to be. I mean it. I choose importance to be not just how important the feature is to my final project, but what order it should be done so that other tasks can be completed. If you give each tasks a proper importance value (or “stack-rank”), then you can even do such exciting things as picking milestones to release demos for.

Now, how do we do this all? What does it actually look like? I use a Google Docs spreadsheet for my feature list. It has auto-save and it is accessible on any computer. I typically use different computers, sometimes in different places, so it makes sense to me to have access and not have to worry that my version is the most up to date one. In my spreadsheet, I have the following columns: Stack Rank, Task Name, Task Status, and Additional Notes.

For the stack rank, I’ve made it be just a number. 1 Is the most urgent, and 50 is the least. The range doesn’t actually matter; it’s just a way to sequence your features. The task name is a short description of what the feature is. Easy. The task status is a column that I’ve written conditional formatting for. When a task is complete, I write in the text “Completed” and the cell turns green to show how awesome I am. If I want to keep track of what I’m currently working on, I write “In-Progress” and it turns orange. I sometimes use a “Bug” status that turns red if I’ve broken something and I want to specify that it’s a regression to previous code, but that’s getting a bit too in-depth. Lastly, I have an “Additional Notes” column for quick ideas on how to complete my task.

Here’s some examples. I’ve been working on a game as a side project. It’s a zombie shooter/puzzle/adventure/overly complicated concept game. Here are some of the tasks I have had in my list:

2, Shootable Urn,  Player can shoot them and they shatter
6, Title screen,  Landing page and player goes here when they die
14, water dripping effect,  Use particle system
25, Melee attack,  Necessary for the game but not to get other things done

These are my tasks. Notice that melee attack seems like a pretty importance feature, but it’s at the bottom. Sometimes my importance value is more based on how fast I can get a feature completed. The idea is to make a complete game, and some features can end up using an open-ended amount of time. The melee feature was an open-ended one in this case. I had to do new character art, I had to add in the game mechanic, I had to playtest it and make sure it made sense, I had to balance the damage, I had to find SFX for it, etc. Shooting an urn ended up being super easy. I subclassed a Billboard Game Object class I already had and whipped up some art for an urn and a broken urn.

To close this lengthy article, what we all want is to work on interesting things and see them in a completed state. It’s fun to make them and if your idea was good enough, it’s probably fun to play with it. Stack-ranked lists could be something that could help you. Keep in mind it’s an open concept, so make this technique yours. Customize it to work better with your workflow. Say you have a small team, perhaps you’d want a column to say what Type of task it is: “Art”, “Programming”, “Music”, etc. Maybe it’s better to just write a developer’s name next to the task for a group project. Whatever. If you struggle with getting things completed and staying motivated, at least give it a try.



Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: