Atlasingeniería

Code review en la prácticaLos comentarios que vuelven siempreTema 4

Cambios que no tenían nada que ver con el ticket

«Ya que estaba, aproveché y arreglé esto.» Es de buena fe y hace que la review se vuelva imposible, que el revert sea riesgoso y que la causa de un bug quede escondida entre veinte archivos que nadie pidió.

Un cambio que debía tocar dos archivos toca veintitrés. Diecinueve son renombres, un formateo y una mejora que a uno le pareció obvia mientras leía. Todo correcto, todo bien intencionado.

Y sin embargo es de los comentarios de review más firmes que uno recibe: «¿esto entra en el ticket?». No es burocracia. Un pull request mezclado tiene tres costos concretos.

Los tres costos

CostoCómo se manifiesta
La review pierde profundidadEl revisor no distingue lo que arregla el bug de lo que es cosmético, y termina aprobando por volumen
El revert deja de ser una opciónSi algo falla en producción, volver atrás también revierte cinco arreglos que estaban bien
El historial mienteBuscar cuándo se introdujo un comportamiento lleva a un commit que dice otra cosa
El tercero se paga meses después, cuando alguien intenta entender por qué el código quedó así.

El del medio es el que más duele en un incidente. La decisión de revertir se toma con presión y en minutos: si revertir implica evaluar qué más se va a deshacer, se termina eligiendo arreglar hacia adelante con menos información.

Qué sí puede entrar

La regla no es “nunca toques nada más”. Hay cosas que pertenecen naturalmente al cambio.

Dentro del alcance

  1. Lo que el cambio necesita para existir. Extraer una función para poder usarla, agregar el tipo que faltaba, adaptar al llamador.
  2. Lo que quedó muerto por el cambio. Si tu modificación dejó código sin usar, borrarlo es parte del trabajo, no una limpieza aparte.
  3. El test del comportamiento que tocaste. Siempre.
  4. Un arreglo trivial y evidente en la línea que ya estabas editando, si es de una línea y no cambia comportamiento.

Cómo separar sin perder el trabajo

La objeción práctica es real: uno ya lo escribió, separarlo cuesta. Hay formas baratas.

Tres maneras

  1. Dos pull requests, el de limpieza primero. El de refactor sin cambio de comportamiento se revisa rápido porque se lee distinto; el de lógica queda chico y legible encima.
  2. Commits separados dentro del mismo pull request. Peor que lo anterior y mucho mejor que nada: permite revisar por commit y revertir uno solo.
  3. Anotarlo y dejarlo. La mejora que se ve al pasar no tiene por qué hacerse ahora. Un ticket de treinta segundos conserva la observación sin ensuciar el cambio.

Antes de seguir, predecí

Mientras arreglás un bug ves tres nombres confusos en el mismo archivo. ¿Qué conviene?

El tamaño como señal

Hay una correlación que se verifica sola: cuanto más grande el pull request, más superficiales los comentarios. Arriba de cierto umbral, la review deja de encontrar problemas de lógica y empieza a comentar cosas de forma, porque es lo único que se puede sostener leyendo.

Cuando un cambio es genuinamente grande —una funcionalidad nueva completa—, lo que ayuda es el orden de lectura: dejar en la descripción por dónde empezar y qué archivos son mecánicos. Es la diferencia entre una review de verdad y un sello.

Más a fondo · nivel seniorEl refactor que hay que hacer para que el cambio sea posible

Hay un caso legítimo donde el refactor no se puede separar: cuando el cambio pedido es imposible sin reordenar antes. Ahí la forma correcta es el refactor primero, en su propio pull request, sin cambiar comportamiento y con los tests existentes en verde como prueba. Después, el cambio de comportamiento encima, chiquito. Cuesta una ronda más y es lo que permite revertir con precisión.

Un pull request mezclado

src/reports/monthly-report.ts+8−3

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

@@ -1,14 +1,17 @@
1
21
2
3
34
4
5
5
6
7
8
9
10
611
712
813

Cuatro cambios, uno solo es el ticket, y el tercero reintroduce el bug que el primero arregla.

Cómo se mantiene chico

Cierre

Autoevaluación

¿Lo entendiste?

¿Cuál es el costo más grave de mezclar un arreglo con una limpieza amplia?
Un cambio requiere reordenar código antes de poder implementarse. ¿Cómo conviene entregarlo?