Posted On: 2020-03-09
While reviewing my progress on my plan for this year, I noticed a mismatch between what I was working on and what I had planned. Such situations are unfortunately common while developing software, so I thought I should use today's post to explain what it is and how it happened - in the hopes this gives more of a window into some of the pitfalls of planning and executing on a software project of any kind.
While planning for this year, I enumerated 5 (what I call) "feature blobs"* and began working towards completing them. The blobs themselves were mostly used as a convenient short-hand to help simplify a larger list of individual features (about 10 or so - though it's a bit difficult to count as some overlap with each other.) As such, I mostly focused on completing the individual features - paying special attention to places where two or more overlapped**.
So far, things appear to be going well in this regard. Three of the five feature blobs have their related features completed. As such, I had thought this would be good time to reflect on my progress, and was preparing to document that progress in detail for this blog post. Yet, as I looked more closely, I discovered a mismatch between what I had planned and what I actually did.
The third feature blob is:
How do I keep NPC interactions from degenerating into "who has a new dialogue option?"This blob was made up of two individual features:
Using salient options allows one conversation to support many more options than a player might normally see; however, if a player can revisit a conversation and make different choices, they could repeatedly revisit the conversation until they exhaust all the available options - no matter how many there are. In fact, there is a real possibility that players may misconstrue that as the "right" way to play the game: some games gate content behind certain dialogue options, so players may be trained to "try everything" if they find themselves stuck. If I want to avoid players exhausting all the dialogue, I will need something to clearly communicate that to the player - and I expected that "something" would be implemented by the time this feature blob was completed.
As I reflected on my expectations, I realized that I had expected that players would have a limited number of opportunities to have a particular conversation. In fact, I had planned out a feature specifically focused on making the choice of what to talk about into a clearly communicated, meaningful choice. Despite what I had planned, I had nothing of the sort implemented - no limits on a conversation and nothing to tell the player to choose carefully (since they won't get another chance.)
Looking through my notes, I found the source of my problem: despite everything I had planned for that feature, I had not actually written any of it down. I had (completely accidentally) committed one of the most problematic project management mistakes: I expected the developer to create something that I never actually communicated. Humorously, even though the project manager and developer are literally the same person (myself) - I still managed to miss this undocumented feature*. So long as I relied on the feature list to keep me focused and on-track, I was too focused to remember anything that wasn't on the list.
When facing a seemingly endless stream of work, it is often tempting to keep one's head down and try to stay as productive as possible. Yet, occasionally taking the time to look at the bigger picture can save so much work, either by cutting something that is unneeded, or by finding things that would cause problems later if they aren't completed now.
Fortunately, writing status update blog posts provide opportunities for me to take a good, hard look at my project's progress and plan - not only breaking it down for myself, but actively documenting it for a wider audience. As I do so, I often find something beyond the plan - a common mistake or an interesting story - something to turn the blog post from a mere status update into something more informative and interesting. It is my sincere hope that you've enjoyed this particular tale.