8 min leitura • Guide 103 of 877
Implementando Pair Programming Efetivo
Pair programming combina dois desenvolvedores trabalhando no mesmo código simultaneamente, com um dirigindo (digitando) e outro navegando (revisando e pensando à frente). As features de atribuição do GitScrum, time tracking, e ferramentas de colaboração ajudam times a coordenar sessões de pairing, rastrear o investimento, medir resultados, e incorporar pairing em seu fluxo de trabalho regular para melhorar qualidade de código, acelerar aprendizado, e reduzir silos de conhecimento.
Quando Fazer Pair Programming
Cenários de Alto Valor
MELHORES CASOS DE USO:
┌─────────────────────────────────────────────────────────────┐
│ QUANDO PAIRING ENTREGA MAIS VALOR │
├─────────────────────────────────────────────────────────────┤
│ │
│ PROBLEMAS COMPLEXOS: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ✅ Decisões arquiteturais ││
│ │ ✅ Algoritmos complexos ││
│ │ ✅ Desafios de integração ││
│ │ ✅ Otimização de performance ││
│ │ ✅ Código sensível a segurança ││
│ │ ││
│ │ Valor: Duas mentes > uma para problemas difíceis ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ TRANSFERÊNCIA CONHECIMENTO: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ✅ Onboarding novos membros time ││
│ │ ✅ Trabalhar em áreas desconhecidas do código ││
│ │ ✅ Aprender novas tecnologias/frameworks ││
│ │ ✅ Cross-training para reduzir fator bus ││
│ │ ✅ Mentorear desenvolvedores junior ││
│ │ ││
│ │ Valor: Conhecimento se espalha, silos diminuem ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ QUALIDADE CRÍTICA: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ✅ Hotfixes produção sob pressão ││
│ │ ✅ Código de pagamentos/financeiro ││
│ │ ✅ Scripts migração dados ││
│ │ ✅ Mudanças infraestrutura core ││
│ │ ✅ Refactoring alto impacto ││
│ │ ││
│ │ Valor: Review tempo real pega bugs custosos ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ QUANDO NÃO PAREAR: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ❌ Tarefas simples, rotineiras (CRUD, config) ││
│ │ ❌ Trabalho bem entendido em código familiar ││
│ │ ❌ Pesquisa/exploração (melhor mob, ou solo) ││
│ │ ❌ Quando qualquer pessoa está exausta ││
│ │ ❌ Tarefas administrativas ││
│ │ ││
│ │ Desperdício: Duas pessoas para trabalho de uma ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Rastreando no GitScrum
WORKFLOW PAIRING:
┌─────────────────────────────────────────────────────────────┐
│ CONFIGURANDO PARA PAIRING │
├─────────────────────────────────────────────────────────────┤
│ │
│ ATRIBUIÇÃO TAREFAS: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Atribuir AMBOS desenvolvedores à tarefa: ││
│ │ ││
│ │ Tarefa: "Implementar lógica retry pagamentos" ││
│ │ Atribuídos: @maria, @carlos ││
│ │ Label: workflow/pairing ││
│ │ ││
│ │ Por que ambos nomes: ││
│ │ • Ambos visíveis na carga trabalho ││
│ │ • Ambos creditados pela entrega ││
│ │ • Notificações vão para ambos ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ TIME TRACKING: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Ambos rastreiam tempo simultaneamente: ││
│ │ ││
│ │ Maria: 3h em "Lógica retry pagamentos" ││
│ │ Carlos: 3h em "Lógica retry pagamentos" ││
│ │ ││
│ │ Total: 6 pessoa-horas (preciso para planejamento) ││
│ │ ││
│ │ Alternativa: Um rastreia como "pair" com multiplicador ││
│ │ 2x nos cálculos de estimativa ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ LABELS PARA VISIBILIDADE: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Criar labels dedicados: ││
│ │ ││
│ │ 🟢 workflow/pairing - Destinado a pair programming ││
│ │ 🔵 workflow/paired - Completado como pair ││
│ │ 🟣 workflow/mobbing - Mob programming time ││
│ │ ││
│ │ Filtrar por labels para ver: ││
│ │ • Trabalho pairing atual ││
│ │ • Ratio pairing histórico ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Estilos de Pairing
Driver-Navigator
O MODELO CLÁSSICO:
┌─────────────────────────────────────────────────────────────┐
│ DINÂMICAS DRIVER-NAVIGATOR │
├─────────────────────────────────────────────────────────────┤
│ │
│ DRIVER (Quem tem o teclado): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Responsabilidades: ││
│ │ • Digita o código ││
│ │ • Foca em sintaxe e implementação imediata ││
│ │ • Explica o que está fazendo ││
│ │ • Faz perguntas quando travado ││
│ │ ││
│ │ Mindset: "Estou implementando o passo atual" ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ NAVIGATOR (Observador): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Responsabilidades: ││
│ │ • Revisa código enquanto é escrito ││
│ │ • Pensa no panorama maior ││
│ │ • Pega bugs e typos ││
│ │ • Sugere alternativas e melhorias ││
│ │ • Mantém track do que vem depois ││
│ │ ││
│ │ Mindset: "Estou guiando estratégia e pegando issues" ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ RITMO DE TROCA: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Opções: ││
│ │ ││
│ │ BASEADO EM TEMPO: ││
│ │ • Pomodoros 25 minutos, trocar cada rodada ││
│ │ • Força rotação regular ││
│ │ • Previne uma pessoa dominar ││
│ │ ││
│ │ BASEADO EM TAREFA: ││
│ │ • Trocar depois de completar cada subtarefa ││
│ │ • Pontos de corte naturais ││
│ │ • Ambos experimentam diferentes partes ││
│ │ ││
│ │ PING-PONG (para TDD): ││
│ │ • A escreve teste falhando, B faz passar ││
│ │ • B escreve próximo teste falhando, A faz passar ││
│ │ • Troca contínua ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Fazendo Pairing Funcionar
Configuração Ambiente
ESTAÇÃO DE PAIRING:
┌─────────────────────────────────────────────────────────────┐
│ SETUP FÍSICO E REMOTO │
├─────────────────────────────────────────────────────────────┤
│ │
│ SETUP PRESENCIAL: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Equipamento: ││
│ │ ☐ Monitor grande (27"+) ou monitores duplos ││
│ │ ☐ Dois teclados ││
│ │ ☐ Dois mouses ││
│ │ ☐ Assentos confortáveis para dois ││
│ │ ││
│ │ Ambiente: ││
│ │ ☐ Espaço tranquilo ou setup cancelamento ruído ││
│ │ ☐ Quadro branco perto para sketching ││
│ │ ☐ Timer visível ││
│ │ ☐ Água/snacks acessíveis ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ SETUP REMOTO: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Ferramentas: ││
│ │ ☐ Compartilhar tela com áudio (Zoom, Meet, Teams) ││
│ │ ☐ VS Code Live Share ou similar ││
│ │ ☐ Conexão internet estável ││
│ │ ☐ Bom microfone e fones ││
│ │ ││
│ │ Benefícios Live Share: ││
│ │ • Ambos podem digitar simultaneamente ││
│ │ • Ambos cursores visíveis ││
│ │ • Terminal compartilhado ││
│ │ • Sem latência para digitação ││
│ │ ││
│ │ Dicas: ││
│ │ • Câmera ligada constrói conexão ││
│ │ • Verbalizar mais que presencialmente ││
│ │ • Fazer breaks mais frequentes (fadiga tela) ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Estrutura Sessão
FLUXO SESSÃO PAIRING:
┌─────────────────────────────────────────────────────────────┐
│ SESSÃO PAIRING ESTRUTURADA │
├─────────────────────────────────────────────────────────────┤
│ │
│ ANTES DA SESSÃO (5 min): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ☐ Alinhar no objetivo: "O que vamos realizar?" ││
│ │ ☐ Revisar contexto: Descrição tarefa, código relac. ││
│ │ ☐ Acordar abordagem: "Como vamos abordar isso?" ││
│ │ ☐ Setar timer para primeira rotação ││
│ │ ☐ Iniciar time tracking no GitScrum ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ DURANTE SESSÃO: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Estrutura (sessão 2 horas): ││
│ │ ││
│ │ 0:00-0:25 │ Primeiro turno driving (Pessoa A) ││
│ │ 0:25-0:30 │ BREAK - alongar, água ││
│ │ 0:30-0:55 │ Segundo turno driving (Pessoa B) ││
│ │ 0:55-1:00 │ BREAK - alongar, checar mensagens ││
│ │ 1:00-1:25 │ Terceiro turno driving (Pessoa A) ││
│ │ 1:25-1:30 │ BREAK ││
│ │ 1:30-1:55 │ Quarto turno driving (Pessoa B) ││
│ │ 1:55-2:00 │ ENCERRAMENTO ││
│ │ ││
│ │ Comportamentos chave: ││
│ │ • Pensar em voz alta ││
│ │ • Fazer perguntas livremente ││
│ │ • Celebrar pequenas vitórias ││
│ │ • Anotar itens parking lot ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ DEPOIS DA SESSÃO (5 min): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ☐ Commit progresso atual ││
│ │ ☐ Atualizar tarefa no GitScrum (comentários, status) ││
│ │ ☐ Capturar aprendizados: "O que descobrimos?" ││
│ │ ☐ Anotar follow-ups: "O que vem depois?" ││
│ │ ☐ Retro rápida: "O que funcionou? O que mudar?" ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘