Code review: como apontar problemas sem virar o vilão do time

Tem vídeo desse conteúdo no canal Veja o passo a passo completo em vídeo.
Assistir no YouTube →
Code review: como apontar problemas sem virar o vilão do time

Code review é uma daquelas práticas que todo mundo concorda que é importante e quase ninguém foi ensinado a fazer bem. A gente aprende a escrever código, mas raramente aprende a comentar o código dos outros sem soar arrogante, mesquinho ou, no outro extremo, inútil de tão leniente.

E o problema é real: um review mal conduzido azeda o clima do time, faz gente ter medo de abrir pull request e transforma uma ferramenta de qualidade numa fonte de atrito. A boa notícia é que dar bom feedback técnico é uma habilidade — e, como toda habilidade, dá para aprender.

Separe o que é padrão do que é gosto

Metade dos conflitos em review nasce daqui. Existe uma diferença enorme entre “isso tem um bug que vai quebrar em produção” e “eu teria escrito de outro jeito”. A primeira é objetiva; a segunda é preferência pessoal disfarçada de padrão.

Antes de escrever um comentário, vale a pergunta honesta: isso está errado ou está apenas diferente do que eu faria? Se for diferente, e funciona, e é legível — deixa passar, ou no máximo sugere como opinião, deixando claro que é opinião. Guardar a sua energia de review para o que importa de verdade faz o seu “não” pesar quando ele realmente precisar pesar.

Um bom revisor briga pelos bugs e cede nos gostos. Quem briga por tudo perde a autoridade justamente quando ela importa.

Comente o código, não a pessoa

É uma diferença sutil de linguagem com um efeito enorme. “Você não tratou o caso de lista vazia” coloca o dedo na pessoa. “Esse trecho quebra se a lista vier vazia — falta tratar esse caso” aponta para o código. Mesma informação, temperatura completamente diferente.

Não é sobre encher de gentileza vazia. É sobre manter o foco no artefato, que é o que está em discussão. Ninguém fica na defensiva quando você fala do código; todo mundo fica quando parece um julgamento pessoal.

Explique o porquê, não só o quê

“Troca isso por um map” é uma ordem. “Um map aqui deixaria a intenção mais clara e evita o índice manual, que é onde costuma entrar bug” é ensino. A segunda versão dá mais trabalho para escrever, mas faz três coisas: convence pela razão, ensina algo que vale além daquela linha e respeita a autonomia de quem recebe — que pode, inclusive, discordar com um bom argumento.

Review sem o porquê vira imposição. Com o porquê, vira uma conversa técnica entre pessoas que querem o mesmo resultado. E, num time saudável, é isso que o review deveria ser.

Elogie o que está bom

Parece bobagem, mas muda o tom de tudo. Se os seus comentários são sempre e só apontando defeitos, o autor passa a associar o seu nome a dor. Um “boa, não tinha pensado em tratar esse caso” ou “essa função ficou bem limpa” custa dois segundos e faz o feedback difícil, quando vier, ser recebido de peito aberto em vez de na defensiva.

Não é puxar saco. É reconhecer o que realmente ficou bom — o que, de quebra, sinaliza para o time o padrão que você quer ver mais vezes.

Sinalize a gravidade

Nem todo comentário tem o mesmo peso, e quem lê não adivinha. Deixe explícito o que trava o merge e o que é só um toque. Um prefixo simples resolve boa parte da confusão:

  • Bloqueante: precisa mudar antes de mergear (um bug, uma falha de segurança).
  • Sugestão: eu faria diferente, mas fica a seu critério.
  • Curiosidade: só quero entender por que você foi por esse caminho.

Isso evita o mal-entendido clássico em que o autor reescreve meio pull request por causa de um comentário que, no fundo, era só um “acho que”. E poupa o review de virar uma negociação exaustiva sobre o que era obrigatório e o que era palpite.

Automatize as discussões de gosto

A forma mais eficaz de tirar o atrito do review é fazer com que boa parte dele nem precise acontecer. Discussões sobre ponto e vírgula, aspas simples ou duplas, indentação, ordem de imports — nada disso deveria ocupar o cérebro de um ser humano num pull request. Coloque um formatador automático e um linter na esteira, combine as regras uma vez com o time, e deixe a máquina ser a chata.

Com o gosto padronizado no automático, sobra espaço para o review discutir o que realmente exige um par de olhos humano: a lógica está correta? Os casos-limite foram tratados? O nome dessa função conta a verdade? A abordagem é a mais simples que resolve? São essas perguntas que agregam — e são justamente as que se perdem quando metade dos comentários é sobre formatação.

Como bônus, ninguém leva para o pessoal uma bronca vinda de um linter. A máquina não tem tom.

No fim, é sobre o mesmo lado

O deslize de fundo é encarar o review como você contra o autor — quem acha mais erro, ganha. Não é. Vocês estão do mesmo lado, contra o bug, contra a complexidade desnecessária, contra o código que ninguém vai entender daqui a um ano. Quando o feedback parte daí, ele deixa de soar como ataque e vira o que sempre deveria ter sido: duas pessoas cuidando juntas de um código que é do time, não de uma delas.

Leia também

Prefere ver em vídeo?

Esse artigo virou um vídeo completo no canal, com diagramas animados e demo ao vivo.

Assistir no YouTube →