How do you get better at estimating required time for implementing a feature you have never coded before? How can a solo dev acquire that skill?
In my experience, I’ve found it easiest to break the big feature down into individual components that I feel confident building and estimating. For example, let’s say that we wanted to add a new feature to our game – item set bonuses for equipment. Let’s assume that we already have a system for what equipment items are (e.g. stats, 3D model, type, equipment slot, etc.), what individual bonuses are (from items, effects, character abilities, etc.), and for players to equip those items already in place (e.g. tracking total stats from items, tracking which item is in which slot, etc.). What would creating an item set bonus feature actually entail? Let’s start breaking it down.
What exactly makes up an item set? For purposes of our game, let’s say an item set is a collection of bonuses defined somewhere in data that are assigned to specific numbers that represent the number of items in that set currently equipped. This means each individual item set object needs to know how many items from the set are currently equipped and which bonuses to activate. The item set bonus object should probably have some externally accessible functions that get called whenever an item from that set is (un)equipped so it knows when to modify the bonuses it is applying to the player.
So how do we break these components down into tasks?
Let’s start with how the data gets into the game. We need some way for the item designers to designate an item set. They need to be able to specify in design data what the item set is. Each item set needs a unique ID, a name (that may need to be localized), a maximum number of equipped items, and individual bonus effects that are mapped to specific equipped item counts. Let’s say we use some spreadsheet stuff for this. We parse the design data from the spreadsheet and save it off. That’s the first task – the code needs the information from the design data.
Now that we have this information, what do we do with it? Well, we need set up our game variables within the object to track relevant data in the game. We need to know the maximum number of equipped items (from design data),
what the bonuses are (from design data), the current count of equipped items (from the player’s current loadout), and any currently applied bonuses from the item set. Once we have this, we can add the code needed to handle normal use cases like what to do when a set item is equipped or removed.
What do we expect to happen when the player makes an equipment adjustment? The set bonus should change the number of equipped items, then adjust the currently applied bonuses appropriately – applying new bonuses or removing old ones as needed to the player. Naturally, we would need to make sure that we don’t accidentally leave bonuses on the player if they remove an equipped item, otherwise it could lead to degenerate player behavior like equipping all of these items to get the set bonuses, then swapping them out for other items while retaining the bonuses from the set.
Obviously, there would be additional tasks that would need to be done as well. They would need to be identified, scoped, and get estimates too. However, Each of these tasks shouldn’t be seemingly-overwhelming in scope. If it is too big, it means you haven’t broken it down into small enough components and need to do that. Once you’ve gotten all of the tasks broken down such that you are confident you can do each one, you can add up the estimates for each task (and some additional cushion time for each just in case) and present that as your total estimate. Write it down. Then, provided you have a green light to go ahead, you do it and see how accurate your estimates were. Maybe this task took longer than you thought. Maybe that task was a lot easier than expected. You can then internalize how things worked out and try for more accuracy next time.
The FANTa Project is currently on hiatus while I am
crunching at work too busy.
Got a burning question you want answered?
- Short questions: Ask a Game Dev on Twitter
- Long questions: Ask a Game Dev on Tumblr
- Frequent Questions: The FAQ