Planning 2020: Part 2

Posted On: 2020-01-13

By Mark

Last week I wrote about my long-term goal for this year (to switch into production phase on my current project) and articulated what additional information was required before I could adequately plan for achieving that goal. Since then, I've had the opportunity to do additional planning and thought that I should share with you both the process and results of the planning.

Planning the Planning

Going into planning, I knew that I would not be able to accurately determine everything that needs to be done. Part of this is due to normal uncertainty about the future, but beyond that, biases and memory lapses would undoubtedly creep in, leading me to dig deep on some topics and more shallowly (or not at all) on others. To mitigate the effects of this, I chose to delay planning for about a week - during this time, I would instead note down any topics that seemed even remotely relevant - thereby aiming to keep all capturing shallow, in the hopes of getting a wider variety of topics. Once I acquired sufficient topics (or sufficient time had passed) I would try to flesh them out a bit more, digging deeper where appropriate. Additionally, I would try to give each one a rough priority rating (basically a MoSCoW score - though I am really only interested in the "Must" at this point.) Finally, once I had assessed each item individually, I would compare them, and prune the list further in an effort to make sure that I have no more than 5* items that are considered "top priority".

Executing Delayed Planning

Over the week, I managed to capture nearly 30 outstanding items - varying in complexity from simple cosmetic bugs to whole features that were missing. While some of these were items I recently considered (such as a desired feature for the Salience Engine) many were old items that came up months ago - only to be forgotten them in favor of addressing the deluge of short-term issues since then. While certainly not a complete list, this sample of both old and new seemed like enough to be worth prioritizing, so I started in on the next steps.

Digging into the details led some items to be collapsed together, while other new items were created. Along the way, I picked out a collection of "Must" items (around 10 or so) which I focused especially closely on. While 10 was clearly still too many, I began to notice connections between many of those items - places where fixing or implementing one item would simplify code for another. In response, I started grouping items together into "feature blobs": groups of items that were so inter-related that fixing one would significantly change the others. After a bit more refining and adjusting, I managed to fit this into 5 "feature blobs", each associated with a particular question:

  1. What happens when the player changes scenes?
  2. What happens when the player character dies?
  3. How do I keep NPC interactions from degenerating into "who has a new dialogue option?"
  4. Why isn't this code merged into the trunk yet?
  5. Is Audio going to "just work" the way I assume it will?

For each of these questions, there is a significant discrepancy between the desired answer and the current one*. Additionally, each one of these was selected not just due to the severity of that discrepancy, but also the impact it will have on adding content to the game. In particular, I expect that failing to address any one of these will lead to significant long-term delays**.

Moving Forward

Now that I have a sufficiently short list, I will begin working my way through each of the "feature blobs" that I identified. I may not follow the exact order specified (it's often helpful to be flexible about that kind of thing) but I do intend to bite off the first two in order. As such, I expect the next few months will be spent working through scene transitions and character death*.

From here on, I will use my normal task-planning approach: before starting work on a "feature blob", I will break it down into an unordered list of tasks which I will work through one at a time. The task list will be relatively organic, with new tasks emerging as I become more familiar with the relevant work, and existing tasks getting merged whenever it is convenient to tackle multiple at once. The ultimate goal is to get to a point where all tasks are either completed or cut - after that I do one final code review and merge it**.

Wrapping Up

This concludes my long-term planning for the first part of this year*. Hopefully you've enjoyed this walk-through of my (new) planning process. As always, if you have any thoughts or feedback, please let me know.