A lot of our work as software engineers involves estimation. Whether it is for a one-off task during sprint planning, or setting expectations with stakeholders on time/cost expectations of new features, we are frequently asked to provide an estimate of how long something will take us to deliver. In short, estimation is a necessary part of being a good team member – and this includes the unsung heroes who don’t write code! However, I’ve found that there can be a bit of a learning curve when you first start estimating as a team –
So here are some tips that may help you avoid some pitfalls early on:
Estimation Is Not A Black Art
Many people think that estimation in kanban is all about “number-crunching” – using fancy mathematical formulae or arcane magical rituals to conjure up an answer to a question. If this is how your team views estimation, then I would strongly recommend taking some time out with them to explain that it is simply about learning to look at something from different angles.
Often, estimating tasks involves looking for certain types of information that will help you make a more accurate prediction of what lies ahead for the team. For example, if you want to know how much effort is involved in writing unit tests for a particular piece of functionality consider asking questions like:
What type of code are we modifying (i.e. legacy code vs new code)? What level of testing do we require (i.e. unit testing vs end-to-end)? How many of these units need to be tested?
Estimation is a process of learning, and one that every team member should be engaged in. It’s how good teams build trust with each other and ensures everyone is aware of the effort involved in completing upcoming work. In fact, estimation is probably more about communication than anything else – it’s just that an element of accuracy needs to be added into the mix too if you’re going to have any chance of hitting your deadlines!
In fact, there are some very well known techniques for estimating software development time which have been practiced by many agile software development teams around the world for a number of years now.
So, what are these techniques? And how can they benefit you and your software development teams? Well read on to find out.
The three main estimation methodologies used in agile software development are:
1) T-shirt sizing
2) Planning Poker
Let’s take a look at each of them:
T-shirt Sizing The “T-shirt sizing” approach is exactly what it sounds like – the team assigns “sizes” (such as small, medium or large) to indicate the relative effort involved in completing tasks and work items. By splitting up all your tasks into small, medium and large sizes you can easily get a feel for how much time something will take. It’s simple to use (e.g. small or medium) and easy for everyone to understand, but it lacks detail as it doesn’t give an estimate in hours or days – just simply “small”, “medium” or “large”.
Planning Poker Planning Poker is a way of estimating tasks by playing cards with numbers on them to guess the size of work items relative to other items that have already been sized. A suit represents an order of magnitude difference, so for example hearts are 10 times bigger than clubs which are 10 times bigger than diamonds which are 10 times bigger than spades. If you take all the face value cards you can see how much larger one item is than another by seeing what number card they play from their hand.
Gut feeling doesn’t really work with Planning Poker. I’ve also noticed some people might deliberately lie so instead of trying to guess how much is one item bigger or smaller than another, you might just want to prioritize the tasks by putting them in order of priority so any further planning can be made based on that. This can be done without playing Poker but let’s suppose you have a backlog which you have already prioritized and now need to estimate. You could compare cards from your hand with the ones on the board then discard them into different piles depending on whether they are medium, large or small items.
When everybody has performed this task for all their own stories then each pile will have an indication of how many items there are in it. There should be a pile containing the largest number of items which will help you estimate how long it will take to complete all the stories within that priority level. If there are other stories in a higher priority level then they can be estimated by adding an extra Poker chip for each one to indicate 1 day of work, 2 for two days and so on up to 5 days. These estimates can then be added together to give an indication of how much time is required.
The above method works well but it does have some disadvantages:
- Nobody has a physical representation of their backlog except themselves, therefore everybody’s input needs to be constantly updated as more work is done or added to reflect any changes.
- It requires everyone at the meeting to physically move the Poker chips and it can be very time consuming especially if there are a lot of stories.
- It doesn’t allow for the varying unit sizes of work to be taken into account, some people might have large tasks or bugs that require more than one Poker chip while others only have small tasks such as setting up tests which could be represented by just one Poker chip.