Boas práticas de revisão de código em times distribuídos
1. Desafios específicos da revisão distribuída
A revisão de código em times distribuídos enfrenta obstáculos que não existem em equipes co-localizadas. O principal deles é o fuso horário: enquanto um desenvolvedor em São Paulo termina seu PR às 18h, seu revisor em Tóquio está dormindo. Isso cria gargalos de espera que podem esticar o ciclo de revisão para 24h ou mais.
A falta de comunicação não-verbal também pesa. Em uma sala, um simples olhar ou gesto indica dúvida ou aprovação. No ambiente remoto, cada comentário precisa ser explícito, o que exige mais esforço cognitivo. Diferenças culturais agravam o problema: em algumas culturas, questionar o código de um colega é visto como confronto direto, enquanto em outras é prática esperada.
Para mitigar esses desafios, é essencial estabelecer normas claras de comunicação escrita e criar mecanismos que reduzam a dependência de respostas síncronas.
2. Estabelecendo um processo claro de revisão
Um processo bem definido elimina ambiguidades. A primeira decisão é definir papéis:
- Revisor principal: responsável pela análise técnica profunda e aprovação funcional
- Revisor secundário: foca em aspectos específicos (segurança, performance, padrões)
- Aprovador final: geralmente o tech lead, que valida a revisão completa
Os critérios de entrada para um PR devem ser explícitos:
Critérios de PR pronto para revisão:
1. Tamanho máximo: 400 linhas alteradas (excluindo arquivos gerados)
2. Descrição obrigatória: contexto, motivo da mudança, test plan
3. Testes unitários passando (cobertura mínima: 80%)
4. Sem warnings de linter ou análise estática
5. Commits organizados (preferencialmente um commit por mudança lógica)
O SLA de revisão deve ser acordado pela equipe. Exemplo prático:
SLA de revisão:
- Revisor principal: responder em até 4 horas úteis
- Revisor secundário: responder em até 8 horas úteis
- Aprovador final: 24 horas úteis para aprovação final
- Se o PR exceder 48h sem revisão, escalar para o tech lead
3. Ferramentas e automação para times remotos
Ferramentas certas reduzem drasticamente o atrito. Bots de atribuição inteligente podem analisar o fuso horário de cada revisor e sugerir quem está acordado no momento. Exemplo de configuração:
# Exemplo de regra para bot de atribuição (GitHub Actions)
on:
pull_request:
types: [opened, ready_for_review]
jobs:
assign-reviewer:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v6
with:
script: |
const reviewers = ['maria', 'joao', 'ana'];
const now = new Date().getHours();
const available = reviewers.filter(r => {
const tz = getTimezone(r); // função que mapeia fuso
return (now + tz) >= 8 && (now + tz) <= 18;
});
await github.rest.pulls.requestReviewers({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number,
reviewers: available
});
Automação de CI com checks obrigatórios também é fundamental:
Pipeline de CI para PR:
1. Lint (ESLint, Pylint) - falha se houver warnings
2. Testes unitários - falha se cobertura < 80%
3. Análise estática (SonarQube) - falha se duplicação > 5%
4. Build - falha se não compilar
5. Verificação de tamanho - falha se > 400 linhas
Templates de PR padronizados garantem que nenhum revisor precise caçar contexto:
## Descrição
[Contexto do problema e motivação da mudança]
## Mudanças realizadas
- [Lista de alterações principais]
- [Arquivos modificados e razão]
## Como testar
1. [Passo 1]
2. [Passo 2]
## Checklist
- [ ] Testes unitários adicionados/atualizados
- [ ] Documentação atualizada
- [ ] Sem breaking changes não documentadas
4. Técnicas de comunicação assíncrona eficaz
Comentários de revisão precisam ser acionáveis. Em vez de "isso está errado", escreva:
❌ "Isso não funciona"
✅ "A função `calculateTax` retorna NaN quando o valor é zero.
Sugiro adicionar um guard clause: `if (value <= 0) return 0;`
Referência: padrão de validação em /docs/validation.md"
Use tags para categorizar feedback:
Tags recomendadas:
- 🔴 BLOQUEANTE: Impede aprovação. Exige correção obrigatória.
- 🟡 SUGESTÃO: Melhoria opcional. Pode ser resolvida em PR futuro.
- 🔵 DÚVIDA: Esclarecimento necessário. Não bloqueia, mas precisa resposta.
- 🟢 ELIMINADO: Código que foi removido ou alterado.
Documente decisões importantes em ADRs (Architecture Decision Records) vinculados ao PR:
ADR-2024-015: Decisão de usar PostgreSQL em vez de MongoDB
Link: /docs/adr/015-postgres-over-mongo.md
Motivo: Necessidade de transações ACID para módulo financeiro
Impacto na revisão: Verificar se todas as queries usam transações
5. Estratégias para reduzir o tempo de ciclo
Revisão incremental é uma técnica poderosa. Em vez de revisar o PR completo de uma vez, revise commit por commit:
Estratégia de revisão incremental:
1. Commit 1: modelo de dados (revisar estrutura)
2. Commit 2: lógica de negócio (revisar regras)
3. Commit 3: testes (revisar cobertura)
4. Commit 4: integração (revisar conexões)
Para PRs complexos (acima de 200 linhas), agende uma sessão síncrona:
Pair review síncrono:
- Duração: 30-45 minutos
- Ferramenta: VS Code Live Share ou tela compartilhada
- Objetivo: revisar lógica complexa, não estilo ou formatação
- Resultado: aprovação ou lista de ajustes com prazo
O limite de tamanho de PR é a regra mais eficaz:
Regra de tamanho:
- PRs pequenos (1-100 linhas): revisão assíncrona, prazo 2h
- PRs médios (101-400 linhas): revisão assíncrona, prazo 4h
- PRs grandes (401+ linhas): não permitido. Deve ser dividido.
- Exceção: mudanças geradas por ferramentas (ex: migrations)
6. Cultura de feedback e psychological safety
A revisão não é um tribunal, é uma conversa técnica. Para manter a segurança psicológica:
Regras de ouro da revisão:
1. Critique o código, não a pessoa: "Este método tem complexidade ciclomática alta"
em vez de "Você escreveu código confuso"
2. Pergunte antes de acusar: "Por que optou por essa abordagem?"
em vez de "Isso está errado"
3. Ofereça alternativas: "Considere usar `map` em vez de `for` para legibilidade"
4. Reconheça acertos: "Ótima escolha de padrão aqui!"
Incentive perguntas sem medo:
Exemplo de cultura segura:
- Revisor: "Não entendi esta lógica. Pode explicar?"
- Autor: "Claro! A ideia é evitar chamadas repetidas ao banco.
Expliquei melhor na descrição do PR."
- Revisor: "Perfeito, agora faz sentido. Aprovado."
A revisão como aprendizado é especialmente valiosa em times distribuídos, onde o conhecimento tácito é mais difícil de compartilhar. Quando um revisor experiente explica uma técnica, todo o time aprende.
7. Métricas e melhoria contínua do processo
Métricas ajudam a identificar gargalos:
Indicadores-chave (medidos mensalmente):
- Tempo médio de revisão: meta < 6 horas úteis
- Taxa de aprovação na primeira tentativa: meta > 70%
- Número médio de comentários por PR: meta 3-8
- Percentual de PRs que excedem SLA: meta < 10%
Retrospectivas focadas no fluxo de revisão:
Pauta de retrospectiva (30 min, mensal):
1. Quais PRs demoraram mais? Por quê?
2. Houve comentários desnecessários ou confusos?
3. Algum revisor ficou sobrecarregado?
4. Precisamos ajustar o SLA ou os critérios de entrada?
5. O que funcionou bem este mês?
Rotação de revisores evita sobrecarga e viés:
Escala de rotação (semanal):
- Semana 1: Maria (revisor principal), João (secundário)
- Semana 2: João (principal), Ana (secundária)
- Semana 3: Ana (principal), Maria (secundária)
- Regra: ninguém revisa o mesmo autor por mais de 2 semanas seguidas
Conclusão
Revisão de código em times distribuídos não é apenas uma questão técnica, mas um exercício de comunicação, empatia e processo. Com regras claras, ferramentas certas e uma cultura que valoriza o aprendizado, é possível transformar a revisão de um gargalo em um dos maiores diferenciais competitivos do time.
Referências
- Google Engineering Practices - Code Review Developer Guide — Guia oficial do Google com padrões e recomendações para revisão de código
- Atlassian - Code Review Best Practices — Artigo completo da Atlassian sobre práticas de revisão em times ágeis
- GitHub - Best Practices for Pull Requests — Documentação oficial do GitHub sobre como criar e revisar PRs
- SmartBear - The State of Code Review 2023 — Pesquisa anual com métricas e tendências de revisão de código
- Microsoft - Code Review Guidelines for Remote Teams — Diretrizes da Microsoft para revisão remota com exemplos práticos
- ThoughtWorks - Code Review in Distributed Teams — Artigo técnico da ThoughtWorks sobre desafios e soluções para times remotos
- Github - Using GitHub Actions for Automated Code Review — Tutorial oficial sobre automação de revisão com GitHub Actions