Empecemos con una pregunta "sencilla": ¿por qué creamos software?
Los humanos buscamos conocimiento por dos motivos: curiosidad y resolución de problemas. A veces se mezclan. Tratas de arreglar algo y terminas enamorado del aprendizaje. Pero para esta reflexión, enfoquémonos en la parte de resolución de problemas.
Todos los proyectos en los que trabajamos — personales o profesionales — empiezan con un problema. Tratamos de automatizar las cosas aburridas, prevenir incidentes, ahorrar tiempo, mejorar la precisión, hacer lo que antes era imposible, coordinar gente y procesos... Básicamente, tratamos de hacer la vida un poco más fácil.
En otras palabras: el software existe para reducir la fricción entre lo que queremos y lo que realmente pasa.
Suena simple. Pero entonces... ¿por qué el software suele empeorar las cosas? ¿Por qué confunde a la gente, se rompe aleatoriamente, frustra a los usuarios, o convierte el trabajo del futuro en una pesadilla?
No porque a los ingenieros no les importe. No porque el negocio sea "malo".
Pasa porque las motivaciones no están completamente alineadas. La velocidad es fácil de medir, pero la mantenibilidad no lo es. Publicar software es visible; la deuda técnica es invisible. El software se siente reversible — como si pudieras simplemente hacer CTRL + Z después.
Alerta de spoiler: no puedes. Los sistemas complejos recuerdan. Las decisiones se acumulan. Los errores se agravan.
Y aún así, la gente todavía habla de "calidad" como si fuera un argumento purista:
Las buenas prácticas dicen que...
Claro. Pero esta es una verdad más simple: si creamos software para resolver problemas, cualquier cosa que introduzca inestabilidad, fragilidad, o fricción a largo plazo está incompleta.
Una solución completa:
- Funciona correctamente
- Maneja requerimientos funcionales y no funcionales
- Se mantiene entendible
- Puede evolucionar conforme cambian las necesidades
¿Cualquier cosa menos que eso? No está listo. Solo está publicado.
La calidad no es un ideal sofisticado. Es un propósito cumplido.
Y si olvidamos por qué creamos software en primer lugar... bueno, no nos sorprendamos cuando deje de resolver el problema.