¿Cómo comenzarías a mejorar en un sistema realmente malo?Mejorando sistemas realmente malos
Permítanme explicar a qué me refiero antes de recomendar la creación de pruebas unitarias y la refactorización. Podría usar esas técnicas, pero eso sería inútil en este caso.
En realidad, el sistema está tan roto que no hace lo que tiene que hacer.
Por ejemplo, el sistema debe contar cuántos mensajes envía. Funciona principalmente, pero en algunos casos "olvida" aumentar el valor del contador de mensajes. El problema es que muchos otros módulos con sus propias soluciones se basan en este contador que, si corrijo el contador, el sistema en su conjunto empeoraría de lo que es actualmente. La solución podría ser modificar todos los módulos y eliminar sus propias correcciones, pero con más de 150 módulos que requerirían tanta coordinación que no puedo pagarlos.
Peor aún, hay algunos problemas que tienen soluciones no en el sistema en sí, sino en la cabeza de las personas. Por ejemplo, el sistema no puede representar más de cuatro mensajes relacionados en un grupo de mensajes. Algunos servicios requerirían cinco mensajes agrupados. El departamento de contabilidad conoce esta limitación y cada vez que cuentan los mensajes para estos servicios, cuentan los grupos de mensajes y los multiplican por 5/4 para obtener la cantidad correcta de mensajes. No hay absolutamente ninguna documentación sobre estas desviaciones y nadie sabe cuántas cosas están presentes en el sistema ahora.
Entonces, ¿cómo comenzaría a trabajar para mejorar este sistema? ¿Qué estrategia seguirías?
Algunas cosas adicionales: soy un ejército de hombres trabajando en esto, así que no es una respuesta aceptable contratar suficientes hombres y rediseñar/refactorizar el sistema. Y en unas pocas semanas o meses, realmente debería mostrar una progresión visible, por lo que tampoco es una opción hacer la refactorización en un par de años.
Algunos detalles técnicos: el sistema está escrito en Java y PHP, pero no creo que eso realmente importe. Hay dos bases de datos detrás, una de Oracle y una de PostgreSQL. Además de los defectos mencionados antes, el código también huele, está mal escrito y documentado.
información adicional:
La cuestión contador no es un problema de sincronización. Las instrucciones de contador ++ se agregan a algunos módulos y no se agregan a otros módulos. Una solución rápida y sucia es agregarlos donde faltan. La solución larga es hacer que sea un aspecto de los módulos que lo necesitan, lo que hace imposible olvidarlo más adelante. No tengo problemas para arreglar cosas como esta, pero si hiciera este cambio rompería otros 10 módulos.
Actualización:
Acepté la respuesta de Greg D's. Incluso si me gusta más Adam Bellaire, no me ayudaría a saber qué sería ideal saber. Gracias por todas las respuestas.
¡Buena suerte! Hay una cosa que me gusta de trabajar en un sistema roto: nada de lo que hago puede empeorarlo de lo que era antes de comenzar. :) –
+1 - ¡Esta situación es terriblemente increíble! o es increíblemente horrible? – Drew