I recently discovered a gem of an app that can help your teams accurately and fairly estimate their product backlogs – that’s no easy thing! This open-source planning poker app created by Aditya Naag, Lead Developer Evangelist at Salesforce, is an agile estimating and planning tool that is consensus based.
In this article I will demonstrate how you can use this free Planning Poker app to gamify your user stories, encouraging team collaboration and reducing problematic estimates.
The problem with “guesstimates”
As an Agile Coach and Salesforce MVP, I spend most of my time helping organizations to become more agile while delivering Salesforce technology. That is an ever-changing and constant adaptation for all involved from the teams and the products, to the organizations and their ecosystem.
It’s easy to fall into the trap of wanting to create a new solution, when there are almost unlimited options and solutions already available.
“We are uncovering better ways of developing software by doing it and helping others do it.”The Agile Manifesto
The trap of wanting something new becomes obvious in a number of ways, one of them being infamous estimating. Quick estimates are drawn from previous experience, different contexts and strong opinions. An estimate is a rough calculation of the value, or extent of something. As such, it concerns me when organizations waste tremendous effort discussing estimates and the accuracy of them. The only thing certain about estimates is that estimates are ALWAYS wrong (mic drop).
The benefit of estimating or forecasting is not to know that you are right, but to detect when you are wrong. The value is not in the estimate itself; the value lies in the individuals and interactions that flourish from it.
Let’s be honest, teams have it tough, regardless of whether you’re managing projects traditionally through a so-called ‘hybrid’ model, or as an agile team. Whether you’ve been delivering for years or you’re just getting started, the business of estimating has never been more challenging than it is today.
What is Planning Poker?
Don’t get disheartened! One of the common practices to help teams improve their forecasting is planning poker. In brief, planning poker is an agile estimating and planning technique that is consensus-based, so you can move away from guesstimating.
A planning poker session starts with the product owner or customer reading a user story or describing a new feature that requires an estimate. The estimate could be for the number of story points, number of days required to build the feature or any other metric the team needs to estimate.
Following discussion of the requirements and any questions, each team member privately selects a number to represent their estimate. If everyone picks the same number this becomes the estimate. If not, further discussion and questions may be had before the team once again selects a number. The process can be repeated until everyone is in agreement.
How does the Planning Poker App work?
The Salesforce platform is both highly configurable and increasingly extendable, even more so since the release of Lightning Web Components Open Source (LWC OSS) and native integration with platforms like Heroku.
Speaking of Heroku, there were many announcements at Dreamforce ’19 that were of interest. Check out the video from minute 37 onwards to learn more about the Salesforce Evergreen announcement (you may also recognize a face there). The announcement proves why it’s definitely the time to get familiar with Heroku if you haven’t already.
There was also an announcement during TDX20 that really caught my attention, regarding the DevOps center. As the inquisitive Agile professional that I am, my eyes have been glued to this topic since this event earlier in the year. That’s how I found Planning Poker. The quiz app is actually two apps –– a Host App installed into a Salesforce org, and a Player App built with LWC OSS that runs on Node.js deployed on Heroku.
Let’s break this down a bit more. Both the Host App and Player App on Salesforce are built using Lightning Web Components. The app relies on Application Events, Platform Events and Push Topics to publish game state changes. The Lightning Web Components use the empApi and Lightning Message service to send and receive these events. A combination of Salesforce data and HTML 5 Local Storage is used to maintain game state across page refreshes.
The Guest Player App is built using Lightning Web Components Open Source and uses Node.js as its backend. It communicates with Salesforce using Custom Apex REST APIs, then uses the OAuth JWT Bearer flow to connect with Salesforce. From there, the Node.js server plays its part, using Server Sent Events to deliver notifications to the HTML client.
Setup Planning Poker
The steps to install the entire solution were very easy and I followed the instructions outlined by the original developer. This involved installing the package in a developer edition, Sandbox or Playground, then running a postinstall script and later assigning a permission set to any users I wanted to participate as players.
If you want to take it for a spin in a Playground, the new Playgrounds now come with this handy tool: check for “Install a Package” under the app launcher. Just add the package ID: 04t0o000003jOweAAE:
You can also install it using SFDX commands and creating a Salesforce scratch org, but remember, these types of orgs expire in 7 days by default or 30 days if you set a duration when you create them.
As for the app’s features, I like that you can select any Salesforce object to be the source of the list’s user stories. I also appreciate how you can save the agreed ‘points’ into a user story on the fly, and that you can create your own cards as not everyone uses the Fibonacci sequence.
Another great thing about this app is the fact that all the players’ votes are hidden until revealed.This is useful as there is definitely more than one way to look at something. Revealing information at the end avoids the so-called groupthink:
“Groupthink is a psychological phenomenon that occurs within a group of people in which the desire for harmony or conformity in the group results in an irrational or dysfunctional decision-making outcome. Cohesiveness, or the desire for cohesiveness, in a group may produce a tendency among its members to agree at all costs. This causes the group to minimize conflict and reach a consensus decision without critical evaluation.”
(Heroku Hosting) Your team may not be set up with an individual Salesforce license in production. Don’t worry, for players without Salesforce Licenses, you need to follow a few additional steps from the install section in the README file as you will be hosting the app in Heroku so that those players without a Salesforce license can access it as guests.
Create a game
Alright, now that we are all set up let’s start a game. First, navigate to the Host Planning Poker App, create a new game record, give it a name, choose if you will be showing a timer and if the host can vote and determine the game’s length.
Next establish which Card Set the game will use. You have Fibonacci and Multiple of 2 as options already, but you can add more. Create a new Card Set by adding new entries via custom metadata types.
Select which Object are you going to be playing poker with as a source of your user stories and which fields will be storing the data. The app also comes with a Backlog object and relevant fields just for this, which gives you the ability to map to other objects if you have that in place elsewhere.
Host a game
To start hosting the app, navigate to the Host Planning Poker Tab, select a Game and click Launch. Then share the Game Pin shown with the players and wait for them to join.
Once your team is ready, hit Start Playing. You have some controls: to move onto the next story, reveal all votes, to reset the cards if you want to have a new vote for the current story, and to follow the teams’ motions while discussing the prioritized work during sprint planning.
Play a game
As a player in Salesforce, you can join the game by navigating to the Play Planning Poker app and then entering the Game Key. Once a user story is shown, click on a card to cast your vote after discussing the story goal and intricacies with your team.
Having a variety of results is a good thing, it is an indication that team members are looking at it from different perspectives. Take advantage of the diversity of opinions and dig into the whys. It may be that there’s already a frame in place that can be reused to deliver the story, making it leaner. On the other hand, there may be some complexity that a team member is concerned about. Take advantage of this by placing more value on the individuals and interactions that the game surfaces. Build upon each other’s ideas – that is the whole point of playing an estimation game!
When playing in Heroku, the difference as a guest is that players navigate to the unique game URL shared by the host.
Although having a hint of gamification may be fun, let’s not forget the goal of the planning exercise. Ultimately, you should be focused on coming together as a team to define:
- What can be delivered as a sprint result?
- How will the required sprint result be achieved?
The items to consider when playing estimation:
- Amount of work to do
- Complexity of the work
- Risk or uncertainty in doing the work
This app can help you with that!
If you are interested in finding out some of the reasons behind why planning poker helps, I recently published a free eBook that explains 5 methods to forecast better when predicting the unpredictable.