Last time the customer brought the first approach user stories to the rest of the team. By just looking at them, a few things about the design could be inferred, but the team has not created any architecture or design for the application yet. That doesn’t mean that it is not there. It’s simply not yet documented anywhere yet.
It is now time for the developers to begin estimating the user stories that are presented so far. There are several ways to do estimation. For this project we elect to assign points to each story. The number of points assigned to a user story is an indication of it’s size. A user story with 2 points is estimated to be twice as large as a user story with 1 point assigned to it.
Using the abstract notion of points has a few advantages over simply estimating the time it will to take implement a feature:
- How long something will take is dependent on who is doing it. A team’s ability to perform may change several times during the life of a project. Members come and go. Assignments outside of the project is competing for it’s resources. The size of the stories is supposedly not as susceptible to change however.
- It’s easier to estimate the relative size of one thing compared to another than to estimates its absolute size.
- Estimates, especially at the beginning of a project are just that - estimates. However, over time estimates have a way of being transformed into promises. By using the more abstract notion of points, it can be easier to distinguish between estimates of tasks and estimates of release dates.
Points have some disadvantages as well, the main one being that it is often a hard concept to describe to someone not used to them. “Traditional” estimation includes time rather directly, which is kind of intuitive. With points we only estimate the size of things and expect another concept, velocity, to help us get a time estimate. This may take some getting used to.
For a great exploration into the details of planning agile projects, read Agile Estimating and Planning by Mike Cohn.
Iteration Length
The team should be able to implement each user story within an iteration. This will ensure that the system contains a set of completed features that are of value to the customer at the end of each iteration. To be able to estimate the user stories that fit in an iteration, we need to determine our iteration length. For this project we choose an iteration length of one week. I’m doing this on my spare time, so I don’t expect my velocity to be very high. In a real world scenario the selection of an iteration length should be given more careful thought.
The Stories
Let’s review the user stories so far:
- A user can send text messages to another user
- A user can block another user
- A user can create a chat room and invite other users
- A user can use a display picture
- A user can send a file to another user
- A user can store conversations in a local file
- An administrator can ban a user
- An administrator can broadcast messages to everyone
Starting with the first story, let’s consider roughly what that would entail. We need a simple GUI where a user can enter text. We need to be able to discover other users in order to select to whom a message should be sent. We need to log on to a server. We need to be able to store information about users on a server. We need a protocol for discovery and message sending. Etc.
This story seems too big to fit inside an iteration, so we need to split it into smaller stories that can fit inside an iteration. Let’s imagine the team sat down and did just that. This is the result:
- A user can log on to the messaging server
- An administrator can add a user to the server
- A user can list the other users on a server
- A user can send a text message to another user
Now these seem a bit more manageable than the original story. Going through the rest of the stories, we estimate that they all have a decent size. In a real world scenario, we would probably find a couple of more stories that we have problems estimating. In addition to being difficult to estimate due to hiding too much functionality, as with the story earlier, stories may also be difficult to estimate because we don’t know enough about how to solve them. We might, for instance, not know enough about a certain technology. In these cases we might schedule a spike, a time-boxed investigation aimed to give us enough answers to give a good enough estimate.
After going through our stories so far, we end up with the following estimates:
| Story | Size |
|---|---|
| A user can log on to the messaging server | 5 |
| An administrator can add a user to the server | 5 |
| A user can list the other users on a server | 2 |
| A user can send a text message to another user | 5 |
| A user can block another user | 3 |
| A user can create a chat room and invite other users | 8 |
| A user can use a display picture | 3 |
| A user can send a file to another user | 3 |
| A user can store conversations in a local file | 2 |
| An administrator can ban a user | 3 |
| An administrator can broadcast messages to everyone | 5 |
Remember that these estimates only says that we think that story X is approximately twice as large as story Y, and that we believe roughly that we will fit at least one story in each iteration. The story with size 8 might prove to be too large. Or any of the stories for that matter. We may have to revise this later.
With this we should have enough information to start planning our iterations.




Filed under:
Recent Blog Entries
