Mi Filosofía de Desarrollo: Un Enfoque Pragmático y Centrado en la Calidad
A lo largo de mi carrera, he desarrollado una filosofía de desarrollo que se basa en el pragmatismo, la calidad y la mejora continua. No se trata de seguir dogmáticamente una metodología, sino de adaptar las mejores prácticas a las necesidades específicas de cada proyecto y equipo.
V. Filosofía de Desarrollo: Las Decisiones Invisibles que Definen la Calidad Manifiesta
Más allá de los lenguajes específicos, los patrones de diseño y las arquitecturas de alto nivel, existe un conjunto de principios, actitudes y prácticas que sustentan la creación de software de verdadera calidad. Estas son a menudo las "decisiones invisibles" que, aunque no se reflejen directamente en una funcionalidad de cara al usuario, tienen un impacto profundo en la robustez, mantenibilidad y longevidad del software.
-
"Lo que no Medís, no Mejora (Ni Escala de Forma Predecible)":
Sin métricas claras y objetivas sobre el rendimiento (latencia, throughput, uso de CPU/memoria), la utilización de recursos, las tasas de error, la cobertura de pruebas, o la satisfacción del usuario, cualquier esfuerzo de optimización, mejora o escalado se basa en conjeturas, intuición o anécdotas. Medir de forma sistemática permite:
- Identificar cuellos de botella reales y áreas problemáticas.
- Priorizar el trabajo de optimización donde tendrá mayor impacto.
- Justificar decisiones técnicas y de negocio con datos.
- Entender el impacto real de los cambios introducidos.
- Establecer líneas base y objetivos de mejora.
-
"A Veces el Mejor Código es el que no Escribís (o el que Borrás)":
Cada línea de código introducida en un sistema es una responsabilidad. Incrementa la superficie de ataque para bugs, requiere comprensión para su mantenimiento, consume tiempo en pruebas y compilación, y añade complejidad cognitiva al sistema. Antes de añadir una nueva funcionalidad, una nueva abstracción, o incluso una nueva configuración, es crucial preguntarse:
- ¿Es esta funcionalidad realmente necesaria para el usuario o el negocio? (YAGNI)
- ¿Existe una forma más simple de lograr el mismo objetivo? (KISS)
- ¿Esta abstracción resuelve un problema real o es una sobre-ingeniería prematura? La simplicidad, entendida como la ausencia de complejidad innecesaria, es una virtud cardinal en ingeniería de software. Borrar código obsoleto o innecesario es a menudo tan valioso como escribir código nuevo.
- La Deuda Técnica no es un Pecado Capital, es un Préstamo Financiero (con Interés Compuesto y a Veces Usurero): La deuda técnica deliberada. Como cualquier deuda financiera, incurre en un "interés": el costo adicional de desarrollo futuro debido a las decisiones subóptimas del pasado (bugs más frecuentes, dificultad para añadir nuevas funcionalidades, mayor tiempo de onboarding para nuevos desarrolladores, peor rendimiento, desmotivación del equipo). Si esta deuda no se gestiona y se "paga" (refactorizando, mejorando el diseño, añadiendo pruebas) de forma proactiva, los intereses se acumulan, a menudo de forma compuesta, hasta que el sistema se vuelve frágil, costoso de mantener y, en el peor de los casos, intratable. También existe la deuda técnica accidental, producto de la ignorancia, la falta de habilidad o la entropía natural del software. Reconocer, medir (aunque sea cualitativamente) y planificar el pago de la deuda técnica es una señal de madurez en un equipo de desarrollo.
- Refactorizar no es Reescribir Desde Cero; es Mantener Vivo, Sano y Evolutivo el Diseño: La refactorización es el proceso disciplinado de reestructurar el código existente —sin cambiar su comportamiento externo observable— para mejorar su diseño interno, legibilidad, mantenibilidad, rendimiento o simplicidad. No es una reescritura masiva y arriesgada ("Big Rewrite"). Es una práctica continua, incremental y de bajo riesgo, como el mantenimiento preventivo de una maquinaria compleja o el cuidado constante de un jardín. La refactorización evita que el diseño del software se degrade con el tiempo debido a la acumulación de cambios y parches (entropía del software) y lo mantiene adaptable a nuevas necesidades. "Dejar el campamento más limpio de como lo encontraste" (la regla del Boy Scout) es una buena filosofía para la refactorización continua.
- La Calidad del Software Reside en las Decisiones "Invisibles" y en la Artesanía: El nombrado claro y consistente de variables, funciones, clases y módulos; la organización lógica del código en archivos y directorios; el manejo robusto y predecible de errores y excepciones; la claridad y concisión de los comentarios (cuando son verdaderamente necesarios para explicar el "por qué", no el "cómo"); la simplicidad de las estructuras de control; la evitación de la duplicación de código (DRY - Don't Repeat Yourself); la calidad y cobertura de las pruebas unitarias e de integración... estas son a menudo las decisiones "invisibles" que, acumuladas, definen la calidad interna, la profesionalidad y la artesanía de un software. Un código limpio, bien estructurado y cuidadosamente elaborado es más fácil de entender, mantener, extender, depurar y, en última instancia, más valioso. La calidad no es solo que el software funcione correctamente según los requisitos; es cómo está construido internamente y cuán sostenible es a largo plazo. Las revisiones de código (code reviews) son una herramienta fundamental para fomentar y mantener esta calidad invisible.