Coexistencia: el exceso de equipaje en el viaje de la modernización
La modernización de aplicaciones, la optimización del mainframe, el replanteamiento de arquitecturas y la migración a la nube son temas de moda desde hace ya varios años. Es necesario optimizar costes y pensar en la sostenibilidad.
Este tipo de iniciativas presentan sobre el papel ventajas difíciles de ignorar al disminuir la dependencia de sistemas que, aunque hayan destacado siempre por su fiabilidad y robustez, hoy se ven obsoletos. Además, son demasiado costosos de operar y evolucionar, y requieren de un personal formado con una disponibilidad cada vez menor.
Las matemáticas, el sentido común y la presión de los hiperescalares impulsan la tendencia de mover cargas de procesamiento a infraestructuras en la nube. La promesa son unos deslumbrantes ahorros en máquinas, ubicaciones, electricidad, equipos de operación, mantenimiento y desarrollo. Se eliminan costes fijos, se obtienen ahorros por consumo, y además todo en un entorno más sostenible para el planeta, al optimizar gasto energético.
Pero ¿dónde está el truco? Sobre el papel, y desde el punto de vista económico, casi todo son virtudes. No entro a cuestionar en este momento las ventajas de los movimientos a la nube. Ni a defender otras opciones de optimización de costes y modernización sin abandonar la robustez de los sistemas Mainframe o similares. Sobre ambos temas hay argumentos y debate que trataremos en otro artículo.
El tema que traigo hoy es la viabilidad, el coste y las opciones que existen para abordar con éxito el viaje hacia la “modernización”, poniendo en primer plano un impacto que muchas veces se infravalora o incluso se olvida.
1. Preparando el viaje
Habitualmente todo comienza con una exploración de los sistemas, más o menos automática, utilizando herramientas de análisis de código, y mediciones de consumos. En la mayoría de los casos, lo que se descubre en esta etapa, al analizar sólo un poco por encima las aplicaciones construidas hace décadas, es una maraña de programas, rutinas, bases de datos, ficheros y ejecuciones masivas que deben completarse en ventanas ajustadas de tiempo. Todo ello con un alto nivel de acoplamiento y multitud de interdependencias que parecen prácticamente imposibles de acotar en un periodo de tiempo razonable.
Posteriormente se propone un destino o estrategia de modernización para cada aplicación, asignando un orden de prioridad, normalmente por factores como consumos y criticidad. Estos datos suelen ser la primera entrada para comenzar a calcular el caso económico y los beneficios potenciales.
Pero falta lo más complicado, la coexistencia de los dos mundos durante el proceso, estableciendo nuevos canales de comunicación entre los sistemas migrados y los que aún permanecen sin modificación para evitar un impacto en el servicio.
Doy por hecho que nadie hoy se plantea un Big Bang, o transformación completa de todo un ecosistema en un solo paso. Los programas se mueven o transforman en oleadas o iteraciones. Por tanto, es necesario, para cada iteración, identificar las dependencias de los programas a transformar con los programas no incluidos en la oleada. Y, luego, estimar las modificaciones necesarias sobre ellos para que sigan funcionando sin impactar en sus tiempos de respuesta o calidad de sus datos.
El resultado de este análisis será uno de los factores para tener en cuenta a la hora de calcular los costes y definir la planificación final del programa de modernización. Con toda probabilidad será necesario diseñar y desarrollar una Arquitectura de Coexistencia que permita la comunicación entre lo nuevo y lo antiguo. Esta arquitectura deberá considerar los siguientes factores:
- Los sistemas de Coexistencia normalmente se plantean como temporales, para uso exclusivo durante las oleadas de migración. Aunque pueden diseñarse como permanentes si la migración no es completa, es decir si existe un conjunto de sistemas que no se van a mover o transformar.
- La temporalidad de la “Coexistencia” debe ser tenida en cuenta a la hora de valorar las modificaciones necesarias en las aplicaciones no migradas. Puede aceptarse una mayor inversión si los cambios van a ser permanentes o a largo plazo.
- Los requerimientos no funcionales, principalmente latencias y volúmenes de datos serán muy exigentes, no pudiendo evitarse tomar como referencia mediciones y rendimientos actuales. Pero con los que es muy difícil competir una vez que se incluye el factor red en las comunicaciones. Estos aspectos son críticos principalmente en los programas batch que suelen procesar grandes volúmenes de datos en ventanas de tiempo muy ajustadas.
- La carga que deberán absorber estos sistemas de Coexistencia a lo largo del proceso de migración será variable, en función del número de sistemas migrados en cada oleada y sus dependencias. Si se comienza la migración por un programa con muchas dependencias, necesitará un alto grado de Coexistencia al inicio, que se irá reduciendo gradualmente conforme se vayan migrando los programas con los que se relacionaba. Debe tenerse en cuenta este factor en la planificación para poder optimizar el orden de migración en función de los esfuerzos de coexistencia.
- Para cada sistema a migrar se habrá seleccionado un destino. Por poner varios ejemplos estos destinos pueden variar desde un simple movimiento o “rehost” sin modificaciones, migración a un producto comercial, o nuevo desarrollo a medida modernizando la arquitectura a patrones de microservicios. Cada uno de estos posibles destinos ofrecerá diferentes opciones de comunicación hacia las aplicaciones no migradas, que habrá que evaluar para su integración en la Arquitectura de Coexistencia.
- En ciertos casos, para asegurar la calidad o consistencia de los datos de los nuevos sistemas, puede ser necesario plantear de forma temporal un paralelo entre los sistemas nuevos y antiguos.
- En la medida de lo posible, la Arquitectura de Coexistencia deberá adaptarse a las Arquitectura Empresarial, siempre que no imposibilite el cumplimiento de los requerimientos. Por ejemplo, para algunos programas batch, determinados tipos de comunicación hacia los sistemas migrados pueden degradar los tiempos de respuesta, impidiendo que completen su ejecución en las ventanas asignadas. En estos casos deberá valorarse si nuevas alternativas planteadas por la Arquitectura de Coexistencia que permitan cumplir con los requerimientos se tratarán como excepciones a la Arquitectura Empresarial, o si bien esta se ampliará, especialmente si la Arquitectura de Coexistencia se ha planteado como permanente o a largo plazo.
Existen múltiples opciones para abordar la Coexistencia en función de estos factores, aunque lo razonable es buscar un enfoque que aporte eficiencia y predictibilidad, además de acelerar la implantación en un proceso que, como se ha explicado anteriormente suele abordarse de forma iterativa.
2. Pesando la maleta antes de ir al aeropuerto
Agilidad, eficiencia y predictibilidad. Esta es la lista de deseos, la carta a los Reyes Magos para controlar este “exceso de equipaje”, que no suele valorarse adecuadamente en las cuentas de la modernización. Sin embargo, puede llegar a controlarse utilizando patrones de arquitectura y metodologías desarrolladas para ellos:
2.1 Patrones de Arquitectura. La Arquitectura de Coexistencia óptima debe definirse a medida para cada caso, pero puede construirse a partir de patrones definidos y probados, reaprovechando experiencias previas. De esta forma se acelera su definición, y se despejan incertidumbres sobre los resultados que se pueden esperar de su implementación.
Esto sólo es posible si se cuenta con un inventario de patrones que cubran diferentes necesidades, y se complementen de manera flexible. Donde las opciones existentes estén catalogadas, analizadas y valoradas, conociéndose de antemano su rendimiento, facilidad de implantación e impacto en los sistemas.
Contar con este catálogo por adelantando, con instrucciones de uso y adaptado a cada caso agilizará la definición de la Arquitectura de Coexistencia necesaria para cada iteración, así como la visión del escenario final que se obtendrá y sus costes asociados.
2.2 Metodología. Una Metodología robusta que incorpore experiencias previas, incorpore la reutilización de código y el uso mejores prácticas, proporcionará las herramientas para:
- Valorar los esfuerzos de coexistencia en cada oleada de migración en función de criterios objetivos.
- Mecanizar en la medida de lo posible dichos trabajos mediante patrones para los servicios a desarrollar en los nuevos sistemas, las modificaciones en los sistemas originales y la ampliación de los sistemas de coexistencia ya construidos.
- Conocer la posible deuda técnica e iteraciones necesarias que puede implicar cada oleada.
Tanto el inventario de patrones como la metodología, para ser realmente útiles en cualquier escenario, deben basarse en la experiencia y estar vivas. Deben recoger las valoraciones y aprendizaje de procesos de modernización ya finalizados e irse enriqueciendo de los procesos en curso.
3. Listos para despegar, listos para la modernización
Comenzar por tener una estrategia, una planificación y un presupuesto es imprescindible, aunque la práctica no se puede tener todo previsto.
La Arquitectura de Coexistencia evolucionará a medida que vaya creciendo el volumen de datos gestionado y en función de la naturaleza de las aplicaciones interconectadas. Lo importante es contar con los mecanismos que permitan controlar el nivel de adherencia al planteamiento inicial definido. Además de las alarmas para identificar y valorar por adelantado las desviaciones que se irán planteando en cada iteración.
El contenido de la maleta va cambiando y puede aumentar su volumen en cada etapa del viaje. De igual forma la Arquitectura de Coexistencia corre el riesgo de crecer de forma descontrolada, hasta convertirse en un coste insostenible. Para evitarlo son claves, una visión creativa, capacidad de innovación, experiencia previa en procesos similares y una red de expertos en la que apoyarse.
Una buena guía de viaje siempre ha sido indispensable para planificar, pero también para acompañar en cada destino y aprovechar el viaje. Para que transcurra sin sobresaltos, controlando lo que vamos añadiendo a la maleta para poder comenzar cada nueva etapa sin exceso de equipaje.