Estimating story points may be a term you’ve come across in software development, as it is a common method used by teams to estimate the effort required to complete tasks. Unfortunately, without a deeper understanding of how or why it works, this method can be misused by teams and can even lead to unintended consequences and valuable time wasted.
This article will break down the fundamentals of what story points are and provide a step-by-step guide on how to use them to estimate tasks in software development teams.
Here’s what we’ll cover:
At the end, you will find additional resources that can help you deepen your understanding of story points more.
Also, read about: How we estimate project cost and the ultimate goals behind this process
Story points are an abstract unit of measurement to estimate the overall effort. Story points are a flexible and elegant method as they can take into account different factors based on your team’s needs such as time, complexity, amount of work, risks and uncertainties, etc.
The tasks are estimated in story points relative to each other. That’s why it’s important to have some baseline tasks that you have estimated together with your team and have discussed that estimation in detail. This will serve as a benchmark for everyone to estimate the other tasks.
Story points are usually assigned using a scale such as the Fibonacci sequence (1, 2, 3, 5, 8, 13, 21, etc.). It’s not a requirement to use this particular scale, you can use any scale that works for you. The advantage of the Fibonacci sequence is that it’s a non-linear sequence that brings the following properties:
Before using story points, you need to define what a story point represents. You need to think about which factors are the most important for your team and describe them in detail.
The factors can vary between teams and projects.
In this guide, we will be using the following factors:
Even though Time isn’t usually listed as a factor in other guides, I believe that it’s quite an important one for tasks that are clear (usually small tasks). Instead of trying to give a precise amount of time to implement a task, it’s better to use an approximate amount which improves the accuracy of estimations and makes it easier to estimate. If it’s too hard to predict, we give our estimate based on other factors. If other factors differ a lot from the time, then it can mean that you need to revisit your estimation.
Questions
Options
Complexity takes into account such things as a need for special knowledge, clarity of implementation, amount of edge cases, etc.
Questions
Options
Amount of work assesses the sheer volume of work required to complete a task. This factor is quite related to Time but answers different questions. It’s often the case when it’s hard to estimate time but it’s clear that you need to write a lot of code or you need to do some research before implementing a task.
Questions
Options
Risk and uncertainty take into account things you can’t know until starting a task. For example, you can’t envision what issues you will stumble across during an upgrade of some library to a major version even when it has clear release notes.
Questions
Options
In the Examples section, we will use those factors, commenting on a decision for each of them.
Your team needs to have a limited set of possible story points to make the estimation process more accurate and easier. It’s not that important the actual values of story points. It can be numbers or even letters (e.g. S, M, L, see T-shirt sizing). But the values should be relative to each other and easy to understand.
Some popular choices are:
It’s usually a good idea to have a small set of story points (~5 options) because as an estimate becomes bigger it becomes less accurate. When your estimate is big for a task, it’s a good sign that you need to break the task down into smaller tasks and estimate them separately.
In this guide, we will be using the Fibonacci sequence (1, 2, 3, 5, 8).
A story point matrix helps your team to estimate tasks by accumulating all the factors. It makes estimations more consistent, helps the team to be on the same page when it comes to estimations and to argue the estimation.
Points | Time | Complexity | Amount of work | Risk and uncertainty |
---|---|---|---|---|
1 | 0-2 hours | Lowest | Lowest | None |
2 | 3-8 hours | Lowest Low | Low | None Low |
3 | 9-16 hours Unknown | Low Medium | Medium | None Low Medium |
5 | 17-26 hours Unknown | Medium High | Medium High | Medium High |
8 | 27-40 hours Unknown | High Highest | High Highest | High Highest |
Once you set the definition of a story point, determined a sequence, and created a story point matrix, now it’s time to explain it to the team and show how to use it. It’s important that each team member understands the concept.
You need to select some tasks that will act as a reference/baseline for future estimates and estimate them in detail together with a team using the matrix. It will simplify the estimation process a lot in the future and will make story points and the matrix much clearer.
The more you use story points, the more accurate estimates become so feel free to change baseline tasks from time to time.
Ideally, you need to have at least one baseline task for each story point value you have.
Poker planning helps to organize the estimation process. The idea of poker planning is that each participant estimates a task in story points privately and the result isn’t shown until the voting is over. If the story points are the same, move on to the next task. If the story points differ much, it’s time to discuss it together and clarify why participants chose a certain amount of story points.
There are a lot of tools for this. In our team, we use Slack for communication and it has a good extension “Poker Planner for Slack”. It has all the configurations we need, it’s easy to use, and makes it possible to make the session asynchronous.
The beautiful side of estimation is that it allows us to measure a team’s velocity. The velocity is the measure of a team’s capacity to complete work during a sprint. Story points improve accuracy by having a limited amount of values and taking into account multiple factors. Knowing the team’s velocity helps to see potential issues, discuss them with the team, and set realistic goals for the next sprints.
To calculate the velocity, you just need to calculate the total amount of completed story points when a sprint ends. This number is the velocity of your team for the sprint.
After completing several sprints, it’s a good idea to measure an average velocity which will help you to understand how many story points you can plan for the next sprints.
Now, that we know what story points are and how to use them, we can summarize the benefits of story points. Understanding these benefits will shed light on why teams often choose story points over other methods for estimation and planning.
To better understand story points, let’s estimate some tasks together using the matrix from this guide.
Description
We need to update all instances in the UI where we use a noun with a dynamic number to use a function that automatically applies the appropriate pluralization rule. For example, “1 word”, “2 words”, etc.
Additional context
We’re going to use a library which we’ve used on other projects before. The codebase is of medium size and it’s not hard to search in it.
Estimation
Description
We have a feed of users’ posts with infinite scroll. We need to implement virtualization in the list to improve its performance when the list becomes large.
Additional context
We’re going to use some library for virtualization but we don’t know which one yet. The list has items with dynamic height. The code for the feed is readable and written quite well.
Estimation
Description
In the scope of this task, we need to add a new page `/sign-in` which contains a simple form with `email` and `password` fields and a submit button. We need to handle errors from API. We also need to establish architecture for protected/unprotected routes and make the login page available only for unauthenticated users.
Additional context
We’re going to use some library for managing forms. We have all the basic components like input, button, etc., in UI kit we use.
Estimation
Description
We need to implement a chart on a dashboard which shows some statistics. It’s a bar chart with a tooltip. The design for the chart is custom.
Additional context
We’re going to use some library for building charts but we don’t know which one yet. Let’s say, we don’t have any experience building charts. It should look the same as the design, so we need a library where we can customize the appearance of charts as we need. We need to think about the loading state, empty state. We need to communicate with API.
Estimation
If you want to understand better story points, then I highly recommend reading these articles:
Check out our newsletter