Para arquitectos. Reingeniería vs Refactoring

Hola Comunidad, Aquí poniendo el desorden jajaja

Cuando utilizar un Big Refactoring vs una Reingeniería. Como mitigar la obsolescencia tecnológica o la degradación del código debido a mantenimientos múltiples a través del tiempo.

Que hacer para pasar de una arquitectura A a una B sin tanto dolor.

Gracias por sus aportaciones.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de paranoid_android

Diferencias Reingeniería vs Refactoring

Reingeniería: Implica no solo la reconstrucción de un nuevo sistema, implica la reestructura de procesos completos, eliminación de trámites, etc.
Refactoring: Implica mejoras al código, obtener claridad, mejoras de rendimiento, actualización.

Hay algunos matices y términos intermedios.
Cuando escucho haremos un nuevo sistema que sustituirá a otro que lleva muchos años implementado, usualmente se trata de una reingeniería aunque no necesariamente se mejore la situación actual del proceso.

Cuando veo que al final quedaron las mismas tablas y componentes principales me viene a la mente la palabra Refactoring.

Uno de los grandes problemas de este tipo de soluciones es tener claridad para saber de que componentes, datos, funcionalidades u otras cosas se perderán, hace falta una visión de un usuario con un alto nivel, con poder de decisión que puedavalorar las cosas de las que se puede prescindir.

Además de estos problemas nos enfrentamos usualmente a codigo, funcionalidad y reglas de negocio legadas.
Normalmente no sabemos si las pidió el usuario o las solicitó el diseño.
Lo que hace mucho ruido es identificarlas no obviarlas y decidir sobre ellas, los detalles a bajo nivel normalmente no son muy conocidos y suelen ser los que generan grandes problemas cuando fallan o faltan.
- En un caso asi falta generar una estrategia para saber que tanto se debe respetar el sistema anterior.

Otro de los graves problemas es la dedicación del tiempo que se le da usualmente un proyecto de esta natturaleza consume mas del doble de uno normal, principalmente al hacer la extracción de las reglas o ingeniería inversa y despues al ejecutar en paralelo.

Desde mi humilde opinion toda esta carga de problemas deberian ser planteados desde la arquitectura de sistemas.
Así como los ingenieros de aquel edificio en EU que plantearon no solo contruirlo, agregaron a su plan como reciclarlo al final de su ciclo de vida.

Todo este show como diria mi querido amigo Zelocke (Su alias informático), deberia aterrizarse en un requerimeinto de arquitectura.
- Una arquitectura deberia tener como caracteristica, permitir a una nueva tecnología la desmantelación del sistema actual, para una migración ordenada.

Como sabemos el papel lo soporta todo, pero alguien ha planteado como migrar poco a poco un aplicativo amarrado a Java 1.4 a la versión mas reciente, Que hacer con los frameworks, ¿Que hacer con una tecnología descontinuada?, ¿Que hacer y cuando comenzar a actuar?, ¿Como justificar desarrollos graduales de limpieza?