At the end of each week, I assess how it went and whether things are moving quickly enough to hit my targets on time. Last week I reached a shocking conclusion that I may be behind. Not one to panic, I made some adjustments to my iron triangle, and now things are back on track. Creating software is a mental game, and I feel like a genius, solving problems with only my mind.
In fact, solving problems usually requires work. In this case, the work was all in my head because the choices are completely up to me, a matter of shifting my mindset. That is a luxury for now while no one is depending on me. In the real world, people set up meetings and find fancy words to rationalize what they wanted to do anyway. I suppose that’s true for me, too, although I only have myself to convince.
In project management, the iron triangle is the notion that a certain level of quality is obtained through a balance of scope, schedule and cost. In theory, a change in the amount one of the inputs implies an inverse change to the amount of one or more of the others to maintain the same level of quality.
Let’s take the next release of StoryTime as an example. The quality I am looking for is expressed in a list of working features.
- Players can identify themselves by logging in using either their Facebook or Google account.
- Logging in for the first time creates a player account automatically.
- A player who is logged in can see her account information: email address, nickname, communication preferences.
- A player can change some account information: nickname and whether to receive email communication.
- A player can sign up for “members-only” features.
- A player can log out.
- A player can delete his own account and be forgotten (say, for sake of privacy).
With these features, or scope, the theme of the release would be player identity, which is an important quality for games (knowing who the players are).
A few weeks ago, I estimated that I could have all of that working by January 25th, which is Thursday of this week. So I set a schedule, with a rough breakdown of the tasks to complete and a guess as to how long each task would take.
The cost is my time, which is capped at about 4 productive coding hours per day.
On Saturday, I realized that I am still working on feature #2. #1 and #6 are done. That leaves too much work to finish by Thursday. So, I had to resort to some quick work on the iron triangle.
First, I considered my deadline. Is it necessary to release on the 25th? What makes that date so special? I have two compelling reasons for keeping the date. First, having a fixed deadline is important for reasons of grit; it helps me to push myself, and no one else is going to push me. Second, releasing on a regular schedule establishes momentum with the outside world. The first release of StoryTime happened almost a month ago, and it is about time for another. Good things are happening here.
Given a fixed schedule, what else could I do? I could increase cost by spending more. However, it is far too late and not in my budget to add people to the project. And I cannot buy a read-made solution. The whole point of doing this work myself is to learn and to establish a code base to build from. The only practical way to increase cost is to work more hours, though with diminishing returns the longer I spend at the keyboard as fatigue sets in each day. So let’s say I increase the cost (my time) by 25% this week — or about 4 extra hours between now and Thursday. Done.
That’s still not sufficient to reach the target, so I have to look at the third side of the triangle, scope. What is the minimum amount of new stuff that still results in a meaningful release about player identity? Logging in is done. Creating an account is not optional. Modifying account preferences is sort of the point of having an account. It gives players a modicum of control, and it establishes essential pathways in the code, being able to display and update database records. Logging out is also done.
Feature #5, signing up for members-only features, is nice to have, which means it can wait. There are no members-only features at the moment, so it is too early to sign up for one anyway. Also, feature #7, deleting the account, is not required yet. Someday, some player will lose a game, throw a fit, and demand to delete his account immediately. For now, if anyone is super fussed about me knowing their email address or nickname, I can delete their record by hand.
So, with a bare minimum scope and a few extra hours at my disposal, I head for Thursday. What happens if I don’t make it? Easy, the schedule will slip. At that point, it has to. Or I could release a product of insufficient quality: broken and incomplete, full of bugs, prone to crashing, causing grief and suffering, maybe triggering riots, a zombie apocalypse and the end of days.
A delay of a week or two is no big deal.