DEV Community

geekecia
geekecia

Posted on Originally published at swiftpoker.pro

Como eliminamos o viés de ancoragem em reuniões de Sprint com WebSockets e Voto Cego Real

Você já participou de uma reunião de Planning Poker onde o Tech Lead ou o desenvolvedor sênior disse em voz alta "Acho que isso é um 3 fácil" e, segundos depois, todo o time votou exatamente 3?

Se você já passou por isso, presenciou na prática o Viés de Ancoragem.

Neste artigo, quero compartilhar como a arquitetura em tempo real do SwiftPoker foi desenhada para resolver esse problema pela raiz, unindo Next.js, WebSockets de baixa latência e um padrão estrito de Voto Cego Real.


O Problema das Ferramentas Tradicionais

Na maioria das ferramentas de estimativa ágil (inclusive plugins pesados do Jira), dois problemas crônicos acontecem:

  1. Atrito de Entrada: Pedir para cada participante criar conta, confirmar e-mail ou fazer login corporativo só para votar números de Fibonacci faz com que reuniões percam 5 a 10 minutos preciosos de ritmo.
  2. Vazamento de Estado via WebSocket: Muitas ferramentas enviam o valor do voto no payload do WebSocket assim que o desenvolvedor clica na carta, confiando apenas no CSS do frontend para "esconder" a carta. Qualquer desenvolvedor com o DevTools aberto consegue inspecionar os pacotes e ver quem votou o quê antes da revelação.

A Solução: Padrão Zero-Knowledge Voting

Para garantir integridade psicológica absoluta na estimativa, nenhuma informação sobre o valor da carta pode transitar na rede antes do momento da revelação (Reveal).

No SwiftPoker, o fluxo foi desacoplado em duas fases:

1. Fase de Voto (Vote Receipt)

Quando um membro da equipe seleciona uma carta, o servidor recebe e transmite apenas a confirmação de que aquele participante concluiu o voto:

// Payload transmitido via WebSocket durante a votação
{
  "event": "participant-voted",
  "userId": "usr_9182",
  "hasVoted": true
}
Enter fullscreen mode Exit fullscreen mode

Dessa forma, nem o DevTools nem qualquer extensão de browser conseguem interceptar o valor escolhido. Não há ancoragem involuntária entre seniores e juniores.

2. Fase de Revelação (Synchronized Reveal)

Somente quando o facilitador clica em "Revelar Votos", os valores consolidados são computados e distribuídos em um único lote sincronizado:

interface RoundResult {
  roundId: string;
  votes: Record<string, number | string>; // Revelado apenas aqui
  metrics: {
    consensusPercentage: number;
    mode: number;
    average: number;
  };
}
Enter fullscreen mode Exit fullscreen mode

Métricas Automáticas: Focando a Discussão nos Outliers

O objetivo de um Planning Poker não é apenas concordar em um número, mas descobrir premissas ocultas.

Quando um desenvolvedor vota 3 e outro vota 13, essa divergência é a parte mais valiosa da cerimônia. O sistema calcula automaticamente:

  • Taxa de Consenso (%): Exibe visualmente se o time está alinhado ou dividido.
  • Destaque de Outliers: Identifica quem teve a estimativa mais alta e a mais baixa para iniciarem a discussão, evitando debates longos e improdutivos.

Zero Atrito na Prática

Além da segurança do voto, focamos em remover qualquer fricção:

  • O facilitador cria a sala em 1 clique.
  • O link ou QR Code é compartilhado no chat (Meet, Teams, Discord ou Slack).
  • Os votantes entram instantaneamente apenas com o nome, sem necessidade de cadastro ou senhas.
  • Suporte a decks Fibonacci, Sequencial e Camisetas (T-Shirt).

Se você quer tornar as reuniões de estimativa da sua equipe mais rápidas, dinâmicas e sem viés, experimente o SwiftPoker na sua próxima Sprint Planning!


Como o seu time lida com viés de ancoragem e estimativas hoje? Compartilhe nos comentários suas experiências e ferramentas utilizadas!

Top comments (0)