“Don’t Repeat Yourself” es de los primeros principios que aprendemos, y por eso mismo es de los más mal aplicados. Vemos dos líneas parecidas y corremos a crear una función compartida. A veces eso es un error.

El coste oculto de la abstracción

Cuando unificas dos trozos de código que parecen iguales pero responden a necesidades distintas, creas un acoplamiento. El día que uno de los dos casos cambia, te toca añadir un parámetro, luego un if, luego otro flag… hasta que la “abstracción” es más difícil de leer que el código duplicado original.

La regla práctica

Sandi Metz lo resume perfecto: “prefiere la duplicación a la abstracción equivocada”. Y la famosa regla de tres:

No abstraigas a la primera repetición. Ni a la segunda. A la tercera, ya tienes suficiente información para ver el patrón real.

La pregunta correcta

No es “¿este código se parece?” sino “¿estos dos sitios cambian por la misma razón?”.

  • Si siempre cambiarán juntos → abstrae.
  • Si pueden evolucionar por separado → déjalos duplicados, aunque hoy se vean idénticos.

Es la diferencia entre duplicación incidental (coincidencia) y real (misma regla de negocio).

Conclusión

DRY es una buena heurística, no una ley. Un poco de WET (“Write Everything Twice”) deliberado a menudo produce un código más fácil de cambiar que una abstracción forzada. Optimiza para el cambio, no para la coincidencia.