Tuesday, 26 August 2008

Story Card Matrix

In this article I'm going to introduce the Story Card Matrix which I've been using with great success on a number of Agile projects for two years. However, first I need to highlight some problems with using Planning Poker on its own and the important points to keep in mind when estimating story cards. Before I get into that here's a picture of a completed story card matrix.

Story Card Matrix

The Problem with Planning Poker Alone

The most widely accepted and practiced method of story card estimation in an Agile project is Planning Poker. However, there is a lot more that we can do to create more accurate estimations using a faster process. Planning Poker has the following problems;
  • Planning Poker doesn't help you when you're planning your first release with no story cards to compare against.
  • Unless you've got all of the story cards in front of you it relies on developers remembering previous story card estimates.
  • Cards are generally only compared to one or two other story cards of a similar complexity.
  • Planning Poker can take a long time as developers delve into details and very infrequently change their initial gut feeling of the estimate of a story card.
In order to address these problems I developed and have been using a Story Card Matrix estimation process for a number of years to estimate story cards for each release. As a result our estimation sessions are much shorter and we have greater confidence in the accuracy of the estimated story cards. I've found in more than two projects using the Story Card Matrix estimation that estimates are as accurate as we need them to be and we don't need to use Planning Poker which makes the process much faster.

When Estimating Story CardsI'd like to remind you of the most important points when estimating story cards.
  • All story cards must be estimated relative to each other.
  • The whole point of a story card is that a conversation has happened and a common understanding has been reached.
  • Look at the story cards from more than one perspective when estimating them.
  • Estimation is not an exact science, you can easily spend too much time estimating story cards.
Mike Griffiths has also compiled a list of the top 10 agile estimation guidelines.

Story Card Matrix Estimation Process
Start with an empty table and the deck of story cards you want to estimate. This usually means all the story cards for your next release. Note that this assumes that all cards have been written out beforehand. When I describe a story card as bigger, I mean that it is more complex, will take more time or have more unknowns than the another smaller card.

Building the Story Card Matrix
  1. Take the top card from the deck of story cards and place it in the middle of the table.
  2. Take the next story card from the deck, read the card and discuss briefly.
  3. Ask everyone. "Compared to the card(s) on the table, is this card bigger, smaller or a similar size?"
  4. Discussion takes place until all are agreed. Planning Poker can be used here if necessary.
  5. If the card is bigger it is placed to the right of the card on the table, if it's smaller it is placed to the left and if it is a similar size it is placed below the card on the table to form a column.
  6. Repeat steps 2-5 until there are no more story cards in the deck. When placing cards, place them below cards of a similar size, or create a new column in the appropriate place according to the story cards relative size compared to all other cards on the table.
You should now be left with a matrix of story cards where each column consists of story cards that are of a similar size.

Review Similar Sized Story Cards
  1. Point everyone to the cards in the first column.
  2. Ask the question. "For all the story cards in this column, do any of them look like they are going to be more complex, take more time or have more unknowns than the others? Do any of them look out of place?"
  3. If any story card in the column is bigger than others in the current column move it one column to the right.
  4. If any story card in the column is smaller than the rest in this column move it one column to the left.
  5. If any story card doesn't fit into it's current column or one of the columns next to it, then create a new column in between for this card.
  6. Repeat steps 1-5 for all story card columns and until everyone is happy that all columns represent story cards that are of a similar size.
Estimate Velocity

You now have a story card matrix where each card and column are placed in positions that represent their relative sizes. In order to estimate velocity, especially for a first release you can do the following;
  1. Choose a specific column of cards and ask the question "Do you think it would be possible to finish any one of the cards in this column within one sprint?"
  2. If everyone agrees that the answer is yes, move to the next column to the right and ask the same question.
  3. If anyone thinks the answer is no, then ask the same question of the column to the left.
  4. Repeat steps 1-3 until you've settled on a right most column where all agree that any one card from that column can be completed within one sprint. This will be your estimated velocity.
  5. If the answer is yes for all but one story card, it could be an indication that that card is in the wrong column and should be moved.
  6. If every card on it's own in the right most column is achievable within a single sprint then repeat steps 1-3 with this question. "Do you think it would be possible to finish any two of the cards in this column within one sprint?"
You should now know which of the columns is representative of an estimated velocity. Note at this point we still don't have estimated numbers and story points on the cards or anywhere in sight because we don't need them!

Assigning Story Points to Cards
Assigning story card points to the cards is then a very simple process and because it's been left to the end it has forced everyone to compare cards relative to each other and removed the complication of having to think about what points mean.
  1. Choose a scale for your story points. I prefer the fibonacci sequence.
  2. Write the numbers from your scale on the story cards associated with each column. For example. I would assign all story cards in the first column a 1, then each column after that would be 2, 3, 5, 8, 13, etc..
  3. The column and cards that were representative of your estimated velocity will now have a number of story points associated with them that also represents your estimated velocity.
Once the story points are written on the cards the end result will look something like the photo at the start of this article.


This is proving to be a very successful estimation technique for our Agile projects. It's extremely easy and fast once you get the idea and know how to use it and the accuracy has proven to be great as well. We've been using this approach across a number of our projects because of its simplicity and as a result I've decided to write this blog entry in order to help its adoption and understanding.

If you have any questions, or some parts of this post are unclear please leave a comment or get in touch with me so that I can improve this description.

P.S. Those of you have have played Magic The Gathering will recognise this technique as being similar to deck building.