Oportunidades en el código legado

220

Durante mi carrera laboral, me he dado cuenta que, en general, los jóvenes despreciamos el trabajar con código legado ya que nos sentimos estancados al no estar utilizando las últimas tecnologías.

Después de enfrentarme tanto a código legado como a la construcción de aplicaciones modernas, me doy cuenta que podemos aprovechar las oportunidades que este tipo de desarrollos traen consigo, pues la dificultad de estas tareas nos podría convertir en, literalmente, un héroe en nuestra compañía.

En este artículo, reviso las oportunidades, riesgos y diferentes acercamientos que podemos tener hacia la modificación del código legado.

Introducción

El código heredado o mejor conocido en la industria del Software hispanohablante, como código legado, se refiere al Software programado con tecnologías/herramientas viejas, deprecadas, sin soporte o con implementaciones en desuso.

Código legado en empresas

La razón por la que muchas empresas y corporativos aún tienen código legado en el core de sus aplicaciones más importantes, es justamente la relevancia y delicadeza de las mismas dentro de la operación de la organización.

En ocasiones son tantas las nuevas aplicaciones y proyectos que se deben enteder por los equipos de desarrollo, que las aplicaciones viejas no se actualizan, mientras sigan “funcionando bien”. La gran desventaja de una organización que orienta sus proyectos así, es que cada vez será más difícil actualizarlas o mantenerlas conforme pasa el tiempo.

Idealmente, no se debería llegar al punto en el que se prefiere no actualizar el código legado por miedo a que la más mínima modificación afecte a otros procesos o aplicaciones dependientes. Desafortunadamente, nos vamos a encontrar con muchos casos de este tipo durante nuestra carrera profesional.

Riesgos y oportunidades

Cuando se decide realizar un esfuerzo de reconstrucción o refactorización de las aplicaciones legadas, se corre el gran riesgo de perder u omitir funcionalidad, por el hecho de no conocer a fondo el diseño, arquitectura e implementación. La falta de documentación para este tipo de desarrollados agrega dificultad al proyecto.

Cuando se realiza exitosamente una refactorización, optimización, o reconstrucción de una o varias aplicaciones de esta naturaleza, el beneficio para la organización en términos de mejora en rendimiento, escalabilidad y mantenimiento es enorme. Al mismo tiempo, el programador o el equipo de programación obtendrán gran reconocimiento y visibilidad por áreas gerenciales y directivas, lo cual puede llegar a representar una mejora profesional sustancial. La confianza ganada en estos proyectos, podrá ser usada después para la definición de nuevas y más modernas arquitecturas.

Refactorización

Al llevar a cabo un proyecto de mejora de código legado es muy importante hacer un análisis a fondo de la arquitectura, las dependencias con otras aplicaciones, servicios o procesos y las opciones con las que se cuentan para resolver el problema.

Los diferentes acercamientos que se tienen para llevar a cabo modificaciones al código legado, ya sea para cumplir con nuevos requerimientos o para optimizarlo, son:

  • Mínima modificación.- modificar lo menos posible las aplicaciones legacy en orden de lograr los nuevos cambios esperados pero sin afectar el resto de la funcionalidad.
  • Refactorización.- modificar el código legado, en orden de lograr la misma funcionalidad pero con mejores prácticas e implementaciones de código, dentro de la misma aplicación.
  • Comodín.- crear una nueva aplicación moderna e independiente que manipule la salida de un proceso o aplicación, en orden de lograr cubrir nuevos requerimientos sin tener que modificar el código legado.
  • Reconstrucción.- documentar perfectamente todas y cada una de las funciones de la aplicación y reconstruir desde cero esta funcionalidad en otra nueva aplicación moderna.
  • Migración.- migrar el sistema legado ya sea a una nueva plataforma o a un lenguaje/framework más moderno, cuidando mantener y mejorar toda su funcionalidad.

Como se puede entender, todos los acercamientos anteriores tienen ventajas y riesgos. El uso de cada uno de ellos, dependerá del contexto del proyecto. Así mismo, es necesario evaluar el objetivo de la optimización, para darle un enfoque al proyecto en dicho sentido y generar la documentación suficiente para no caer nuevamente en estos problemas en el futuro.

Experiencias personales

Dentro de mi experiencia profesional, me he enfrentado a aplicaciones Java construidas hace un par de décadas, en corporativos. La desventaja de estas aplicaciones es que usan JDKs viejos, fueron compiladas y empaquetadas con herramientas en desuso, la arquitectura está muy acoplada una aplicación con otra y además tienen malas prácticas de código.

El acercamiento que he tenido con este tipo de proyectos es crear entidades completamente independientes en orden de asegurar la funcionalidad esperada sin modificar las aplicaciones viejas (comodín), ya que en ocasiones tienen tantas dependencias y están tan acopladas con la entrada y salida de otros procesos. Lo cual me gana un poco de tiempo para que a la par trabaje en una refactorización o una reconstrucción.

Como se menciona en el punto anterior de Riesgos y Oportunidades, al lograr resultados exitosos con este acercamiento, gané la confianza de la gerencia para comenzar a proponer e implementar soluciones de Software mucho más modernas en los nuevos proyectos.

Recomendaciones

Adicionalmente a los diferentes acercamientos que se tengan con el proyecto que involucra código legado, es importante tener en cuenta las siguientes recomendaciones:

  • No asumir, ni suponer ninguna funcionalidad en el código legado.
  • En etapas tempranas, no eliminar funciones del código legado, a pesar de haber sido reconstruidas, ya que pueden ser usadas por otras partes de la aplicación.
  • Realizar pruebas unitarias y de integración para cada uno de los módulos de la aplicación, en orden de evitar comprometer la funcionalidad existente.
  • Generar documentación a nivel técnico y a nivel de procesos negocio.
  • Mantener una comunicación actualizada y transparente hacia todo el equipo involucrado.
  • Recuerda que contar con un ambiente local que replique la confiuración ambiente de ya sea producción o pruebas en tu PC, será una gran ventaja para probar tus cambios de forma más ágil.

Recuerda que también puedes escuchar este artículo en nuestro podcast de SoundCloud:

Gracias por leer este artículo, compártelo con tus colegas si te resultó de utilidad. 🙂

Comments

comments