Playbooks

Code Review Checklist

Salir

Checklist de PR

Revisá cada ítem antes de mergear. No es burocracia — es empatía con tu equipo y con tu yo del futuro.

Puntaje 0/14
Crítico — no mergear Importante — comentar en PR Sugerencia
Nombres
Si necesitás un comentario para explicar el nombre, el nombre está mal. $d → $discountRate.
$usr, $ord, $val → siempre explícitos. Tu yo de 3 meses te lo agradecerá.
Un booleano que no es pregunta obliga a leer el contexto para entender qué significa.
Funciones
Si el nombre tiene "and", "or" o "also" ya hace dos cosas. Dividir.
Más de 3 parámetros → probablemente necesitás un Value Object o DTO.
No es absoluta, pero funciones largas casi siempre hacen más de una cosa.
Acoplamiento Rigidez — dolor principal
Más de 3 archivos para una sola feature = rigidez. El sistema está mal acoplado.
new MySQLRepository() en el negocio = rigidez garantizada. Inyectá la interfaz.
if type==='paypal' / elseif 'stripe' → cada nuevo tipo requiere tocar ese if.
Si para testear A necesitás B, C y D, el acoplamiento es demasiado alto.
Claridad
// Regulación fiscal GT: IGV 12% → OK. // multiplica por 0.12 → el código ya lo dice.
86400 → SECONDS_PER_DAY. 0.12 → TAX_RATE_GT. "admin" → UserRole.ADMIN.
IA-Ready Claude Code / OpenCode
Tu código es el prompt. Nombres vagos = el agente genera código incorrecto.
Los agentes repiten los patrones que ven. Duplicación existente → duplicación ×10.

Diagnóstico de diseño

Los 4 síntomas del diseño podrido, según Robert C. Martin. Si tu proyecto tiene Rigidez, las otras tres no tardan en llegar.

🔩

Rigidez

Tu dolor principal
Rigidity
Cambiar una cosa obliga a cambiar muchas otras en cascada. Cada feature tarda el doble.
// Cambiar el formato de fecha toca 18 archivos // porque está hardcodeado en todos lados
💔

Fragilidad

Fragility
Un cambio rompe partes que no tienen relación lógica con lo que tocaste.
// Arreglás descuentos y // misteriosamente se rompe el módulo de envíos
🔒

Inmovilidad

Immobility
No podés reusar una parte sin traerte todo lo demás.
// Querés la lógica de descuentos en otro venture // pero está acoplada a DB + mailer + sesión
🍯

Viscosidad

Viscosity
Hacer el hack es más fácil que hacerlo bien. El diseño te empuja al camino incorrecto.
// Agregar el feature con un if anidado // es más rápido que respetar el patrón

Principios SOLID

Los cinco principios que previenen los cuatro síntomas. O y D son los antídotos directos a la Rigidez.

S
Single Responsibility
Una clase, una razón para cambiar.
❌ UserService { login() save() sendEmail() generateReport() }
 
 
✅ UserAuthenticator UserRepository UserMailer
O
Open / Closed
Abierto para extender, cerrado para modificar.
❌ if type==='paypal'... elseif 'stripe'... elseif 'crypto'...
 
 
✅ interface PaymentGateway { charge(Money $amount): Receipt }
Cura Rigidez
L
Liskov Substitution
Un subtipo reemplaza a su padre sin sorpresas.
❌ class Square extends Rectangle { // rompe setWidth() }
 
 
✅ class Square implements Shape { area(): float }
I
Interface Segregation
No obligues a implementar métodos que no usás.
❌ interface Worker { work() eat() sleep() } // el robot no duerme
 
 
✅ interface Workable { work() } Feedable { eat() }
D
Dependency Inversion
Dependé de abstracciones, no de implementaciones.
❌ class OrderService { public MySQLRepo $repo; }
 
 
✅ __construct(OrderRepositoryInterface $repo)
Cura Rigidez

Glosario

Términos clave para hablar de diseño de software. Un equipo que comparte vocabulario se comunica con precisión quirúrgica.

Rigidez

Rigidity
Síntoma donde cambiar una cosa obliga a cambiar muchas otras. Causa: acoplamiento directo.
Tu dolor actual: cada feature tarda el doble de lo esperado.

Fragilidad

Fragility
Síntoma donde los cambios rompen partes no relacionadas. Causa: dependencias ocultas.
Arreglás el login y se rompe el carrito.

Inmovilidad

Immobility
No podés reusar código sin traerte todo lo demás. Causa: negocio mezclado con infraestructura.
No podés extraer la lógica de descuentos a otro venture.

Viscosidad

Viscosity
El hack es más fácil que hacerlo bien. Causa: el diseño no facilita la vía correcta.
Siempre termina siendo "más rápido" agregar el if.

Acoplamiento

Coupling
Grado en que un módulo conoce los detalles internos de otro. Alto acoplamiento = Rigidez.
new MySQLRepository() directamente en OrderService.

Cohesión

Cohesion
Grado en que las responsabilidades de una clase pertenecen juntas. Alta cohesión = SRP.
UserAuthenticator solo sabe autenticar usuarios.

Polimorfismo

Polymorphism
Tratar distintos tipos de forma uniforme. Reemplaza los if/elseif chains.
gateway.charge(amount) — sin importar si es PayPal o Stripe.

Deuda técnica

Technical debt
Costo futuro de las decisiones apresuradas de hoy. Se acumula con intereses.
Cada if anidado es un pago mínimo que seguirá creciendo.