“Si funciona, no lo toques” — es una regla no escrita del desarrollo que indica que el código que funciona no debe modificarse sin una razón de peso, incluso si su estructura parece subóptima. El principio se basa en la observación empírica: cualquier cambio conlleva el riesgo de introducir un nuevo error, y el beneficio de la refactorización puede no justificar el esfuerzo. Según Wikipedia (2026), este idioma se utiliza ampliamente en ingeniería, política y programación como una estrategia conservadora de gestión de cambios.
Puntos clave
“Si funciona, no lo toques” — es una regla empírica que advierte a los desarrolladores contra la realización de cambios en el código que funciona sin motivos suficientes. El principio se basa en estadísticas simples: la gran mayoría de los defectos se introducen durante la modificación del código existente.
El principio no es un dogma — es más bien una heurística que ayuda a tomar decisiones en condiciones de incertidumbre. Cuanto más compleja y enmarañada es la base de código, mayor es la probabilidad de que un cambio “inocente” rompa algo que nadie esperaba que se rompiera.
Según un estudio de Microsoft Corporation (2024), aproximadamente el 60% de todos los incidentes críticos en producción están relacionados con cambios recientes en el código que se hicieron con buenas intenciones pero no se probaron lo suficiente en condiciones de carga real.
El idioma “Si funciona, no lo toques” se remonta a la cultura de ingeniería estadounidense de mediados del siglo XX. El uso documentado más antiguo se atribuye a Bert Lance (1977), quien trabajaba en el Comité de Finanzas del Senado de EE. UU. y se oponía a la regulación excesiva.
En programación, el principio proviene de la ingeniería de hardware, donde reemplazar un chip que funcionaba por uno nuevo podía tener consecuencias impredecibles. En el contexto del software, este principio cobró especial relevancia con la creciente complejidad de los sistemas de software y la aparición del código heredado.
Curiosamente, en programación, el principio tiene su lado opuesto — “funciona, pero mejor no tocarlo” a menudo se convierte en una excusa para evitar la refactorización, lo que a largo plazo lleva a una acumulación crítica de deuda técnica. Según la consultora Thoughtworks (2023), alrededor del 40% de los proyectos enfrentan problemas graves debido al conservadurismo excesivo respecto a los cambios.
El principio “si funciona, no lo toques” es especialmente relevante en situaciones donde el costo de un error supera el beneficio potencial de los cambios.
En código heredado que no está cubierto por pruebas, cualquier cambio es una ruleta rusa. Si un desarrollador no puede verificar que un cambio no ha roto módulos adyacentes, la mejor estrategia es no tocar el código que funciona. La excepción son solo errores críticos o requisitos de seguridad.
En sistemas donde el tiempo de inactividad es inaceptable o el costo de un error es enorme — software médico, aviónica, transacciones financieras — el principio “si funciona, no lo toques” es el estándar de facto. Cualquier cambio pasa por una aprobación y pruebas de múltiples etapas.
Si el lanzamiento es mañana y el código funciona, no intentes mejorar su arquitectura. Cambia solo lo que afecta directamente la funcionalidad del lanzamiento. Aplaza la refactorización al siguiente sprint (pero no te olvides de ella).
| Situación | ¿Aplicar el principio? | Alternativa |
|---|---|---|
| El código funciona pero es feo | Sí, si no hay pruebas | Escribir pruebas, luego refactorizar |
| Código con error conocido | No | Corregir el error con una prueba |
| Vulnerabilidad de seguridad | No | Corregir inmediatamente |
| Dependencia obsoleta | Parcialmente | Actualizar con pruebas |
| Bajo rendimiento | Depende del SLA | Perfilar, luego optimizar |
Seguir ciegamente el principio “si funciona, no lo toques” conlleva no menos riesgos que una refactorización interminable. Examinemos los principales peligros.
Si cada desarrollador sigue este principio, la base de código se convierte rápidamente en un “pastel de capas” de soluciones obsoletas, parches y algoritmos subóptimos. Tarde o temprano, la deuda técnica se vuelve insostenible — cualquier cambio requiere semanas de análisis.
A veces, un cambio que parece riesgoso en realidad mejora significativamente el rendimiento o la seguridad. El principio “si funciona, no lo toques” no debe bloquear cambios que aporten beneficios medibles — reducir costos de servidor, acelerar la carga de páginas, mejorar la seguridad.
Cuando un equipo no toca ciertas partes del código durante años, pierde la comprensión de cómo funcionan. El desarrollador clave se va — y el código se convierte en legado sin posibilidad de soporte. El principio debe aplicarse teniendo en cuenta el mantenimiento a largo plazo del proyecto.
La estrategia óptima no es seguir el principio ciegamente, sino aplicarlo de manera consciente, teniendo en cuenta el contexto. La refactorización es necesaria, pero debe ser segura.
La regla del boy scout en programación: “Deja el código más limpio de lo que lo encontraste.” Si un desarrollador realiza un cambio en un módulo, debe mejorar su estructura, pero dentro de límites razonables. No reescribir todo desde cero, sino al menos renombrar variables ilegibles y agregar comentarios.
Las pruebas son la única forma de aplicar de manera segura el principio “si funciona, no lo toques”. Si el código está cubierto por pruebas, cualquier refactorización se vuelve predecible: el desarrollador cambia el código, ejecuta las pruebas y ve si algo se rompió. Sin pruebas — no lo toques. Con pruebas — refactoriza con confianza.
// Ejemplo: refactorización segura con cobertura de pruebas
class PriceCalculator {
fun calculatePrice(basePrice: Double, discount: Double): Double {
// Código antiguo pero funcional
return basePrice - (basePrice * discount / 100.0)
}
}
// Prueba que protege contra regresiones
class PriceCalculatorTest {
fun testCalculatePrice() {
val calc = PriceCalculator()
assertEquals(90.0, calc.calculatePrice(100.0, 10.0))
}
}
Este ejemplo demuestra el enfoque correcto: primero la prueba, luego la refactorización. Si la prueba pasa, el cambio es seguro. El principio “si funciona, no lo toques” se transforma en “si funciona bajo pruebas, refactoriza con confianza.”
Veamos escenarios reales donde el principio “si funciona, no lo toques” resultó tanto salvador como destructivo.
Un desarrollador descubrió que el código de procesamiento de fechas usaba el formato DD/MM/AA en lugar de AAAA. El código funcionaba correctamente desde 2000 hasta 2025. A pesar del deseo de “arreglarlo”, dejó el código como estaba, limitándose a un comentario. En 2026, la empresa actualizó el sistema y la nueva solución manejaba correctamente los siglos. Un cambio prematuro habría roto la lógica funcional.
Un ingeniero decidió “mejorar” el código antiguo pero funcional de importación de datos reemplazándolo con una biblioteca moderna. No tuvo en cuenta que la biblioteca antigua manejaba un caso límite específico que no estaba documentado. Después del lanzamiento — pérdida masiva de datos. El principio “si funciona, no lo toques” fue violado y el costo del error fue de dos semanas de trabajo del equipo para la recuperación.
Preguntas frecuentes
No, seguir ciegamente el principio lleva a la acumulación de deuda técnica y pérdida de flexibilidad del proyecto. El enfoque óptimo es la aplicación consciente en situaciones donde el riesgo del cambio supera el beneficio potencial. Es importante evaluar cada caso individualmente.
Violar el principio es necesario al descubrir vulnerabilidades de seguridad, errores críticos que afectan los datos del usuario y al actualizar dependencias con vulnerabilidades conocidas. En estos casos, el riesgo de la inacción supera el riesgo de los cambios.
La única forma segura es primero cubrir el código con pruebas (pruebas de caracterización), luego realizar la refactorización en pequeños pasos con ejecución constante de las pruebas. Sin protección de pruebas, el principio “si funciona, no lo toques” debe aplicarse estrictamente.
Los desarrolladores experimentados violan el principio de manera consciente — ven las consecuencias no obvias de la implementación actual: errores futuros, cuellos de botella de rendimiento, problemas de escalabilidad. Sus decisiones se basan en la experiencia, no en el miedo a los cambios.
El equilibrio se logra a través de una cultura de pruebas y revisión de código. Si el código está cubierto por pruebas, la refactorización es segura. Si no, cualquier cambio debe ser mínimamente necesario. El principio “si funciona, no lo toques” no es una prohibición de cambios, sino una exigencia de conciencia.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también