Leading Agile Project Estimation with PlanITPoker
Before we cover Planning Poker and the PlanITPoker application, let’s first recap how a sprint planning meeting works in a typical development team.
In an Agile project, a sprint planning meeting is held to discuss backlog items that have been prioritized by the business. The backlog can have just about anything in it, such as bugs reported by application users or new features that are queued to be developed.
The team has a Scrum Master — or moderator — who introduces each user story to the group, providing a high-level summary of the requirements. This is an opportunity for the group to raise any questions they might have. The moderator confirms the acceptance criteria, updating them when required.
Everybody needs to estimate the effort required for each user story in terms of story points. Rather than allocating days and weeks to each user story, we can instead select a number from a scale, comparing the difficulty of one user story with another. Complex user stories — particularly those with any added uncertainty, such as working with a 3rd-party library for the first time — will have more points compared to a simple config change.
The default scale used in PlanITPoker is the Scrum points scale, which is:
0 1/2 1 2 3 5 8 13 20 40 100
Alternatively, another widely used scale is the first few Fibonacci numbers. A favorite of mine is the T-Shirt Size scale:
XS S M L XL XXL
The Planning Poker technique is used in sprint planning meetings to get team members to come to a consensus on how many points to assign to a user story.
Once a user story is discussed, and there are no more questions, each person is asked to vote to estimate the effort required. Each person’s vote is given equal weight in the calculation of the average story points — there is no weighting of votes based on experience, seniority, or anything like that.
Each person’s estimation is kept secret until all votes are in. This encourages everybody to stay engaged in the discussion beforehand and think for themselves as they won’t have the opportunity to copy other peoples’ votes.
Finally, the moderator reveals the votes. If everybody voted roughly the same, the average vote is taken for that user story. But if there’s a big spread in the story points each person believes is required, further discussion is needed. In this event, the moderator prompts those people with the lowest and highest votes to defend their decisions. It might be that the requirements were not properly understood and more talking is needed to agree on the story points.
Estimation with PlanITPoker
PlanITPoker is one such tool to facilitate a Planning Poker session. Once signed up, click the + Create Room button to create a room to hold our user stories.
Let’s give our room a name, say, the Logistics Team. We’ll keep all default options untouched and come back to it later in this article.
As soon as we click the Create button, PlanITPoker prompts us to add some user stories for the current sprint. We can add multiple user stories by entering the title of each story on a new line, or upload them from a spreadsheet or JIRA XML file.
We’ll enter two stories for now: Dispatch API and Barcode API. More stories can be added later.
We’ve arrived in our Logistics Team room. The left-hand-side shows cards that we can use to cast our points for each user story. On the right-hand-side, PlanITPoker lists all the users engaged in the estimation process.
Before we move on, you might be wondering what the Coffee (cup) card choice is all about. PlanITPoker’s FAQs section says this is a way to indicate when a team member needs to take a break from voting. However, it could also be used by a moderator who’s driving the meeting but not involved in the voting process, meaning that their vote will not be counted when the average score is calculated.
Let’s now invite some users into our Logistics Team room.
We can either specify email addresses, as I’ve done below, and click the Send Invitation button. Or, we could just copy and paste the link into a team channel e.g. Slack / MS Teams.
Each team member then clicks on the link provided and enters their name, which will appear on the right-hand side of our Logistics Room panel.
Users Pauline and Sharon have just joined our estimation session and appear as users on the right-hand side of our screen.
Once we’ve discussed the first user story — the Dispatch API — and the moderator has confirmed everybody understands the acceptance criteria, we open the voting session by clicking the Start button.
I’m first to cast my vote, choosing card 8, since this sounds similar to a previous story to build an Order API, which also got 8 story points:
Votes come in any order as soon as each person has made their mind up.
Sharon happens to be next to vote, choosing card 13. She feels that this story has added complexities, requiring more effort than the Order API story from the previous sprint.
PlanITPoker tells us that we’re Waiting for Pauline to vote. It also displays a checkmark next to each person who’s already voted.
Selecting card 3, Pauline predicts that this user story will be easy to implement. She thinks that the hard work she put into investigating and developing a previous API will now serve as a blueprint for the Logistics API story under consideration.
Everybody has finished voting, and we’re told that we’re ‘Waiting for moderator to finalize vote’. Notice that each person’s vote is kept private until everybody has cast a vote.
The session ends after the Finish Voting button is clicked.
PlanITPoker then displays a breakdown of the votes and calculates the average vote:
Given the spread in the numbers, the moderator would ask Pauline and Sharon to explain how they arrived at their votes, instead of simply accepting the average — 8 story points.
Once we’re done, we click the Next Story button to start the process over again with the next user story.
PlanITPoker Room options
The Create New Room modal, in the beginning, has a few options to further customize each room that we create.
When we select the type of cards for our room, we’re given the option to either Use All Cards or pick the ones we want:
Below the Customize card values section, we’re presented with more options to further tailor our rooms. Descriptions for some of these options are provided below, but I recommend simply creating rooms with different options to see what works best.
- Do you want to enter stories in this room?: Allows the moderator to choose whether or not to create stories, allowing us to informally vote on something as a team without having to define/import user stories.
- Request confirmation when skipping stories?: A warning pop-up appears when choosing to skip a story.
- Do you want observers to see other players voting in real time?: If this is checked, we’ll be able to see when other players have voted on the right-hand-side (and who’s holding us up 😂).
- Do you want to auto reveal votes when voting completed?
- Allow players to change vote after scores are shown?: We might want to allow teammates to amend their vote after a round of discussion.
- Do you want to use a countdown timer?
I hope you’ve enjoyed reading this article. If you have any feedback or suggestions, please let me know in the comments section below.