Sí, sería ideal si todos los proyectos de desarrollo fueran de naturaleza Greenfield, donde comenzamos con una pizarra limpia y podríamos diseñar y construir utilizando las últimas herramientas y métodos. Desafortunadamente, ese no es el mundo en el que vivimos. Lo más probable es que estés trabajando actualmente en una aplicación Brownfield. ¿Qué es una aplicación Brownfield?
Responderé lo anterior a través de una metáfora que me vino a la mente mientras viajaba a Decisions Days en NYC el mes pasado. Al bajar del avión en el aeropuerto de Laguardia, me impresionaron varias cosas. Inicialmente, me impresionaron las mejoras en la terminal desde la última vez que había volado. Luego, pude ver todas las obras que se estaban llevando a cabo y me sorprendió la escala del proyecto. Resulta que hay un proyecto de $8 mil millones para reconstruir el aeropuerto de Laguardia mientras el aeropuerto sigue operando. Este es exactamente el escenario que enfrentan actualmente un gran número de nuestros clientes más nuevos. Están teniendo que refactorizar y reconstruir lentamente aplicaciones centrales mientras las mantienen operativas.
Si esto te suena familiar es porque aproximadamente el 75% de desarrollo de aplicaciones los proyectos de hoy en día implican la reconstrucción de aplicaciones existentes sobre una arquitectura moderna. Las aplicaciones Brownfield comparten todos los inconvenientes de los proyectos Greenfield con la complejidad adicional de tratar con código heredado. En algunos aspectos, comprender los requisitos generales puede ser un poco más fácil si tienes una aplicación existente. Por otro lado, examinar cientos de líneas de código sin documentar está lleno de peligros y complejidades inesperadas.
Aquí hay algunas estrategias que pueden ayudarte en tu viaje:
- Definir las Interfaces. Deberías comenzar catalogando todas las interfaces con las que tratarás y las estructuras de datos asociadas. Esto también ayudará a comprender la naturaleza general del problema.
- Diseñar los Objetos de Datos. Esto también ayudará a comprender la aplicación en general. Presta atención a los datos y procesos que se pueden modularizar con una gran cantidad de interfaces o dependencias.
- Modularizar. Divide la aplicación heredada en tantas piezas pequeñas como sea posible. Esto puede permitir una implementación por etapas donde partes de la nueva y la antigua aplicación operan simultáneamente, intenta evitar un reemplazo de "big bang" si es posible. Incluso con una nueva estructura de datos, puede ser posible replicar para permitir operaciones lado a lado.


