Of all the tools in the Agile developer’s toolbox, the most often misunderstood is the Story Point. Some people will tell you a story point is a measure of time, others will emphatically argue that a Story Point measures complexity, difficulty or effort (anything except time!). I’ll tackle that particular can of worms in a future post, first I want to outline what Story Points are, and why they are useful.
Let’s imagine a scenario where you had to quickly estimate the weight of the following animals: a cat, a rabbit, a dog, and a horse. Unless you have in your mind what 1kg of animal looks like, this is actually quite tricky. Go ahead and give it a shot – there are answers at the end of this post.
Instead we’ll try and solve this problem another way. Let’s define a new unit of weight called ‘Points’, we don’t really care how many kilograms are in a Point, but we arbitrarily choose a starting point, we’ll say that a cat weighs 3 Points. Also, on our new scales we only have the following numbers: 1, 2, 3, 5, 8, 13, 20, 40 & 100.
So let’s now take our second animal, a rabbit. Picturing the two animals side by side, I see that the rabbit is smaller than a cat, so I already know that the rabbit can only be one of two numbers – it’s 1 or 2 points. My gut feeling is that a rabbit would be about 2 points, as 1 point feels more like something smaller, like a squirrel.
I’m already able to build up a mental picture for the smaller end of my scale, so next time an animal comes along that’s comparable to one of these, I can bucket them together. Instead of trying to precisely pin down the weight of something, I’m just trying to make sure similar things are grouped together, which simplifies the problem considerably.
Now let’s estimate a dog. In my mental picture of these two side by side, the dog is maybe 3 or 4 times bigger than the cat. So if a cat is a 3, that would mean a dog is about 13 points. However when I ask my friend Jim the same question, he thinks a dog is a 5. One of us must be wrong!
Sort of, dog breeds can vary considerably in size though. At this point we’re forced to have a discussion, it turns out his mother breeds miniature Poodles, so that’s what he thinks of as a dog. I grew up with a couple of labradors though, so my dog is a lot bigger. Neither of us is wrong, but by surfacing questions like this early on, we avoid a lot of pain later. Let’s assume we decide that a ‘more typical’ dog is somewhere in between, and we call our dog 8 points.
I can now continue mentally filling in the blanks on my scale:
- 1 – Squirrel
- 2 – Rabbit
- 3 – Cat
- 5 – Fox/Small Dog
- 8 – Dog
- 13 – Big Dog/Pig
We’ve only estimated 2 animals (the cat was defined as 3 remember), but already we have a very good picture across a spectrum of weights which allows us to estimate future animals very rapidly.
Our last animal to estimate is a horse. Even a small horse like a pony is considerably larger than anything we currently have on our scale. Even being conservative, an average horse is at least 10 times heavier than what we have for as a 13. It’s bigger than 100 so it doesn’t fit on our scale. We’d say this is too big to estimate and if it were a user story we’d look to break it down into smaller more estimatable chunks. I will spare our hypothetical horse from such butchery however.
Here at Made we’re often faced with a long list of features, which we need to estimate in order to figure out how long project will take. Instead of animals we have User Stories, and instead of weight our points are a measure of how long we think something will take to build. The purpose of estimating is then clear:
- Instead of focussing on exactly how long something is going to take to build, we instead try and group similarly sized features – we will gain on some and lose on others, but overall the number of points in a project should be about right.
- The conversation around a feature, in particular working with a customer to figure out what they mean by ‘Feature X’ is ultimately more important than the number of points we assign it.
- We aim to identify features that are too big too estimate, so that they can be refined into smaller deliverable chunks. So we can ensure we are delivering features to our users at a regular pace.