Late in a project’s development cycle, ‘what to do next?’ is a very easy question to answer. It’s whatever is next on the list of bugs or missing features.
But for a substantial portion of the development process, the answer to ‘what to do next?’ is very fuzzy. You have a nearly infinite number of missing features, and a bunch of bugs you’re not sure if you care about yet. So what do you work on? When do you draw a line and say ‘it’s time to make some levels now’ or ‘it’s time to overhaul the physics system’?
I have four main goals in mind when trying to make this decision:
- I want to enjoy the whole development project, spread the nasty tasks evenly with the fun ones, so I don’t get bogged down with any one job
- I want to tackle any potential road blocks early on, make sure that everything I am aiming for is technically possible
- I want to create a good, clean code base on which to build and expand on later
- I want solid prototypes continually so I can get a good feel for what the end result will be, and easily change the direction before the code base gets prohibitively large
Every one of these goals conflicts with all of the others. So when deciding between 100+ different things I could do next – each achieving some part of one or two of these goals, while usually negating the rest… It’s a difficult decision.
How a developer decides what to work on next has to be the single biggest factor separating success from failure. A developer who spends forever deciding on the best path to take will waste time, and still not necessarily pick the right route. Randomly picking a task will just continuously create more tasks, with no direction. Focusing too much on one particular goal will suck time away until all that is left is a beautifully coded piece of nothing.
I’m hoping that experience has taught me how to solve this impossible problem. There isn’t an answer to it written down anywhere, and there never will be. But when faced with hundreds of options and many goals, the human mind can do amazing things. With practice, your ‘what to do next?’ solution must get more and more correct.
I’m not really sure what my point is. Perhaps that software projects are hard, and that the decisions that need to be made are impossibly difficult. Maybe that is what makes it so fun.