Planning poker in Slack: a guide for remote teams
A remote team already has a meeting room: the Slack channel where the stand-up notes, the pull request links and the "quick question" threads end up. Planning poker works best there too, so nobody has to find a link in a calendar invite or make an account somewhere else. This guide covers preparing the channel, starting a room with /storyvote, choosing between a live call and async voting, and the three moves that turn each story into an estimate.
One thing first: an estimate is a planning tool, not a promise or a score. It helps the team decide what fits in a sprint. It isn't a delivery date, and it never measures one person's performance. Keep that in view and the rest of this guide gets easier.
Get the channel ready
Most of a good estimation session happens before anyone votes. A story nobody has read turns into a reading session with cards in hand.
- Pick one channel. Use the team's own channel, or a planning channel the team already reads. The room's card, the questions and the answers then stay in one place for the whole sprint.
- Share the stories a day or two ahead. Each one needs a title people recognise and acceptance criteria someone can check. Post the list, or a link to it, in the channel so questions come in before the session, not during it.
- Choose two or three reference stories. Finished work everyone remembers: a small one, a medium one and a large one. A 5 means "about like the login form", and new people calibrate in one round. Our guide to story points explains why the comparison matters more than the number.
- Pin your definition of ready. A short checklist of what a story needs before it is estimated. A story that fails it goes back to refinement instead of to the vote.
| Who | Before the session | During the session |
|---|---|---|
| Facilitator | Starts the room in the channel and picks the deck | Puts stories on the table, reveals, keeps time |
| Product owner | Writes the stories and posts them for reading | Answers questions about scope; votes only if they build |
| Developers, QA, design | Read the stories and ask questions in the channel | Vote, and explain the outliers |
Start a room with /storyvote
- Add Storyvote to Slack once. Add the app to your workspace. Your admins may have to approve it first.
- Type the command in the channel. "/storyvote Sprint 42" starts a live room called Sprint 42, and "/storyvote async Sprint 42" an async one. Storyvote posts the room's card in the channel, and you are its host.
- Everyone clicks the card. Slack's side panel shows the room, and its "Open in browser" opens it with each person's Slack name filled in: no sign-up and no name prompt. Keep the tab beside Slack, or put it on a shared screen.
The card keeps up with the room: it shows how many stories it holds, and says so when the room has ended. A room link pasted into another message turns into the same card. The room starts with the Fibonacci deck; the host changes the deck, adds extra questions or splits stories by discipline in Settings, and can make a teammate a facilitator to run the game with them.
Two things the command can't do: start a room in a direct message, and post in a private channel the app isn't in. For a private channel, type /invite @Storyvote there first.
Live, async, or a bit of both
Remote teams rarely share a full working day. Pick the format by how much your hours overlap and how tricky the stories are, and say which one it is in the calendar invite or the channel.
| Format | How it runs | Good for | Watch out for |
|---|---|---|---|
| Live | A huddle or call; one story on the table at a time, everyone reveals together | New teams, complex or unclear stories | Hard to schedule across time zones |
| Async | Every story is open; people vote over a day or a sprint, the host reveals | Distributed teams, small and well-understood stories | Discussion is slower; set a deadline |
| Mixed | Vote async, then a short live call for the stories that split | Teams with an hour or two of overlap | Needs someone to collect the outliers |
In an async room every story opens for voting as it is added, and each person works through the list at their own pace: the Stories button shows how many are still waiting for their card. The cards stay hidden until the host or a facilitator reveals a story, so a late voter never sees the others' numbers first. For the mixed format, run the async room for a day, then open a huddle and go through only the stories with a wide spread.
One story, three moves
Whatever the format, every story goes through the same loop.
- Vote on your own. Clear up scope questions first, then everyone picks a card. The cards stay face down until the reveal, so nobody anchors on the first number said out loud or on the most senior person's guess.
- Talk about the spread. If the reveal shows a 3 and a 13, ask those two to explain what they assumed. One of them usually knows something the other doesn't. Then press Revote, or set the story aside if the question can't be answered today. Our guide to reading a reveal covers the common shapes.
- Record the outcome. The room saves the final estimate on the story. Put the assumptions that decided it, and any open question with its owner, in the story's thread or your tracker, so the reasoning is still there when the work starts.
Give the second move a clock. The discussion timer in the room's top bar runs for everyone, and two to five minutes per story is usually plenty. More on that in timeboxing sprint planning.
Use threads for the conversation
The room holds the votes; Slack holds the talk. A few habits keep the channel readable:
- One thread per story that needs talking about. Start it with the story's ticket and the question. Answers stay attached to the story, not lost in the channel.
- Reply under the room's card. "Revealing PAY-142 at 3pm" or "voting closes Thursday" belongs in the card's thread, where everyone who opened the room will see it.
- Keep emoji for agreement, not pressure. A 👍 on "going with 5" is fine. A pile of 👍 before the quiet people have spoken is a vote by other means.
When it doesn't go to plan
- People don't vote. The room's "x of y voted" shows who is missing. A friendly mention in the card's thread works better than a reminder from a bot. In an async room, set a deadline and reveal when it passes.
- The same story keeps splitting. Repeated outliers on one story usually mean it's two stories, or it's unclear. Split it, or send it back to refinement, rather than revoting a third time.
- A loud voice decides. Ask the lowest and highest voters to speak first, and let the quieter people finish before anyone else weighs in.
- Someone wants to watch, not vote. A product owner or a manager can switch on spectator mode in Settings: they see every round, and the "voted" count leaves them out.
- The estimates turn into targets. Keep them apart from priority, capacity and delivery promises. Velocity describes a team; it is not something to push up.
After the session, spend five minutes on one question: where did we disagree, and why? Pick one thing to change next time, such as clearer acceptance criteria or a better reference story, and change only that.
What Slack shares with Storyvote
When you open a room from its card, Storyvote reads your Slack user ID and display name, and nothing else: no email address and no messages. It sees only the Storyvote links Slack asks it to preview. Ending a session deletes the room and its stories at once; the "Session ended" page offers the stories as a CSV first, so nothing is lost. The privacy policy has the details.
If a room's card does not show, the link in its message opens the same room in a browser.
Questions teams ask
Who should vote?
Everyone who builds the work: developers, QA, design. The product owner usually answers questions and watches, and the facilitator votes only if they also build.
What if the revote still splits?
Split the story, send it back for refinement, or take the larger of the two remaining numbers and write down why. Don't revote until someone gives in.
Can people outside Slack join?
Yes. The room's Invite button has a link and a QR code that open the same room in any browser, with the same cards, timer and results.
Start in your channel. Add Storyvote to Slack and type /storyvote, or create a free room in your browser and paste the link in Slack. The Slack page has a short overview of the app.
Enjoying Storyvote? A short review helps other teams find it.