En mi experiencia, el patrón es este:
- El sistema funciona, a menudo durante años.
- Se informa un error
- El desarrollador investiga el error y encuentra un poco de código que parece estar completamente defectuoso y declara que "nunca podría haber funcionado"
- El error se soluciona y la leyenda del código que nunca podría haber funcionado (pero funcionó durante años) crece
Seamos lógicos aquí. Código que nunca podría haber funcionado ... nunca podría haber funcionado . Si se hizo el trabajo a continuación, la declaración es falsa.
Así que voy a decir que un error exactamente como se describe (es decir, observar que el código defectuoso deja de funcionar) no tiene sentido.
En realidad, lo que sucedió es una de dos cosas:
1) El desarrollador no ha entendido completamente el código . En este caso, el código generalmente es un desastre y en algún lugar tiene una sensibilidad importante pero no obvia a alguna condición externa (por ejemplo, una versión o configuración específica del sistema operativo que gobierna cómo funciona alguna función de alguna manera menor pero significativa). Esta condición externa se altera (por ejemplo, mediante una actualización o cambio del servidor que se cree que no está relacionado) y al hacerlo hace que el código se rompa.
Luego, el desarrollador mira el código y, sin comprender el contexto histórico o no tener tiempo para rastrear cada posible dependencia y escenario, declaró que nunca podría haber funcionado y lo reescribe.
En esta situación, lo que hay que entender aquí es que la idea de que "nunca podría haber funcionado" es probablemente falsa (porque lo hizo).
Eso no quiere decir que reescribirlo sea algo malo; a menudo no lo es, mientras que es bueno saber exactamente qué estaba mal, a menudo lleva mucho tiempo y reescribir la sección de código a menudo es más rápido y le permite estar seguro de que ha solucionado los problemas.
2) En realidad nunca funcionó, nadie lo ha notado . Esto es sorprendentemente común, particularmente en sistemas grandes. En este caso, alguien nuevo comienza y comienza a mirar las cosas de la forma en que nadie lo hacía antes, o un proceso de negocio cambia y trae un caso secundario previamente menor al proceso principal, y algo que nunca funcionó realmente (o funcionó algunos pero no todos el tiempo) se encuentra y se informa.
El desarrollador lo mira y declara "nunca podría haber funcionado", pero los usuarios dicen "tonterías, lo hemos estado usando durante años" y tienen razón, pero son algo que consideran irrelevante (y generalmente no mencionan hasta que desarrollador encuentra el estado exacto momento en el que se van "oh sí, nosotros hacemos que ahora y no lo hicieron antes") ha cambiado.
Aquí el desarrollador tiene razón: nunca podría haber funcionado y nunca funcionó.
Pero en cualquier caso, una de las dos cosas es cierta:
- La afirmación "nunca podría haber funcionado" es cierta y nunca ha funcionado: la gente pensaba que sí
- Funcionó y la afirmación "nunca podría haber funcionado" es falsa y se debe a una falta (generalmente razonable) de comprensión del código y sus dependencias