Atlasingeniería

Code review en la prácticaCómo se ve una review de verdadTema 1

Qué se comenta realmente en un code review

Cerca de mil comentarios de code review recibidos en un año, sobre una aplicación con varias marcas, países e idiomas. Casi ninguno habla de algoritmos: la mayoría son preguntas de dos líneas sobre un nombre, un valor suelto o algo que se borró.

Cuando alguien estudia para su primer trabajo imagina que en la revisión de código le van a discutir la complejidad de un algoritmo. Después llega la primera review real y son once comentarios que dicen «¿esto se usa?», «usá una constante», «¿por qué default a esto?».

Este post no es una opinión sobre cómo debería ser una review. Es el recuento de cerca de mil comentarios reales dejados a lo largo de un año en mis pull requests, sobre una aplicación con varias marcas, varios países y varios idiomas. Los agrupé por patrón y saqué todo lo demás: lo que se publica acá es la forma del comentario, nunca el código, el repositorio ni quién lo escribió.

La forma de una review, en números

De ese total, unos cuatro de cada diez los escribieron otras personas del equipo, dos de cada diez los dejó un revisor automático y el resto son respuestas mías dentro de las mismas conversaciones.

Lo primero que sorprende es el tamaño: el comentario humano promedio tiene 84 caracteres, y 7 de cada 10 no llegan a 80. Una review no es un ensayo; es una ráfaga de frases cortas.

Lo segundo es el modo: 1 de cada 3 comentarios humanos termina en signo de pregunta. No «esto está mal», sino «¿por qué acá sí y en la otra caja no?». La pregunta es la herramienta principal del revisor, porque quien revisa casi nunca tiene todo el contexto del cambio.

PatrónPesoCómo suena
Borrar, o sospechar de algo borrado13 %«¿esto no se usaba?», «¿por qué se saca?»
Estilos y sistema de diseño9 %«usá la paleta», «los estilos van en una clase»
Extraer a una función o helper8 %«llevalo a un helper así lo usan las otras pantallas»
Banderas y experimentos7 %«¿ese experimento no ganó ya?», «falta una condición»
Nombres6 %«poco descriptivo», «no le pondría el nombre del experimento»
Marcas, socios y países6 %«ojo, ese id no es lo mismo que esa marca»
Valores sueltos que deberían ser constantes5 %«usar constantes», «¿esto hardcodeado?»
Nulos y respuestas que no llegan3 %«si eso queda null puede romper el front»
Traducciones y encoding3 %«faltan los otros idiomas», «se te rompió el acento»
Consultar con alguien más3 %«validemos esto con diseño», «preguntemos en la daily»
Los comentarios escritos por personas, agrupados por patrón. Uno puede caer en más de un grupo.

Las tres preguntas que se repiten

Detrás de casi todos los comentarios hay una de estas tres preguntas. Vale la pena hacérselas uno mismo antes de pedir la revisión: cada una que contestás en la descripción del pull request es un ciclo de ida y vuelta que no ocurre.

Lo que el revisor está tratando de averiguar

  1. ¿Qué cambia para el usuario que no está en el diff? Un archivo de configuración con una regla menos puede dejar afuera a un país entero. El código se lee, el comportamiento se deduce.
  2. ¿Esto ya existía? Casi siempre hay un helper, una constante o un módulo que hace lo mismo. Quien revisa conoce el repositorio mejor que quien llegó a tocar un archivo puntual.
  3. ¿Por qué acá sí y allá no? La inconsistencia es la señal más barata de detectar y la que más bugs anticipa: si una pantalla valida algo y la de al lado no, una de las dos está mal.

Antes de seguir, predecí

Entre los comentarios escritos por personas, ¿qué patrón aparece más veces?

El revisor automático y el humano miran cosas distintas

Los comentarios automáticos no compiten con los humanos: casi no se superponen.

EncuentraEl revisor automáticoEl humano del equipo
Nulos posibles y excepcionesMuy bien: rastrea el camino del valorA veces, por memoria de un incidente
Typos y detalles de formatoSiempreCasi nunca
Contradicción entre el título del PR y el códigoSí, lo marca explícitamenteSí, pero lo pregunta
Que ese identificador no es el de esa marcaNo: no conoce el dominioSí, es lo que más sabe
Que hay que hablar con otro equipoNuncaSí: «consultemos esto en la daily»
Que ese experimento ya terminóNo
El bot es un linter con memoria del archivo. El equipo aporta el contexto de negocio y el histórico.

Cómo se reduce la lista

Casi todos estos comentarios se pueden anticipar. Lo que más funcionó, en orden de impacto:

Antes de pedir la revisión

  1. Leer el diff completo como si fuera de otra persona. Ahí aparecen los cambios de comillas del editor, el console.log, la coma que quedó y el archivo que se tocó por accidente.
  2. Escribir en la descripción qué cambia de comportamiento, no qué archivos se tocaron. «Deja de mostrarse en las marcas asociadas» es la línea que evita diez preguntas.
  3. Buscar antes de escribir. Un grep del concepto antes de crear un helper nuevo.
  4. Separar lo que no es del ticket. Si hace falta un refactor, va en otro pull request: mezclado con el cambio real obliga a revisar dos cosas a la vez y esconde la importante.
  5. Dejar preguntadas las dudas propias. Un comentario propio que dice «acá defaulteé a esto, ¿es lo esperado?» convierte una discusión larga en una respuesta de una línea.
Más a fondo · nivel seniorPor qué las preguntas cortas son una buena señal

Un equipo que pregunta en vez de afirmar está asumiendo que quien escribió el cambio tiene contexto que el revisor no tiene. Eso mantiene la revisión barata: nadie tiene que reconstruir el ticket entero para opinar. El costo aparece cuando la pregunta corta reemplaza a una decisión que nadie toma —«¿y si lo vemos en la daily?» repetido tres reviews seguidas—; ahí el patrón deja de ser eficiencia y pasa a ser una decisión de producto sin dueño.

Encontrar los comentarios antes de leerlos

src/checkout/apply-coupon.ts+12−0

Hay 4 problemas en este cambio. Tocá la línea donde creas que está.

@@ -14,6 +14,18 @@ export const applyCoupon = async (cart: Cart, code: string) => {
1414
1515
16
17
18
19
20
21
22
23
24
25
26
27
1628
1729

Cuatro comentarios, ninguno sobre algoritmos. Así es la mayoría de las reviews reales.

Qué se lleva una review

Cierre

Autoevaluación

¿Lo entendiste?

¿Cuál es la longitud típica de un comentario de review en este recuento?
Un revisor pregunta «¿esto no se usaba?». ¿Qué está buscando en realidad?
¿Qué aporta el revisor humano que el automático no?
¿Cuál de estas prácticas elimina más comentarios antes de que existan?