Prólogo a la primera edición
Durante mucho tiempo, la industria del software siguió la noción de que la arquitectura era algo que debía desarrollarse y completarse antes de escribir la primera línea de código. Inspirada en la industria de la construcción, se consideraba que el signo de una arquitectura de software exitosa era algo que no necesitaba cambiar durante el desarrollo, a menudo como reacción a los altos costes de desecho y retrabajo que se producirían debido a un evento de re-arquitectura.
Esta visión de la arquitectura fue duramente cuestionada por el auge de los métodos de software ágiles. El enfoque de la arquitectura planificada de antemano se basaba en la idea de que los requisitos también debían fijarse antes de empezar a codificar, lo que conducía a un enfoque por fases (o en cascada) en el que los requisitos iban seguidos de la arquitectura, que a su vez iba seguida de la construcción (programación). El mundo ágil, sin embargo, cuestionó la noción misma de requisitos fijos, observando que los cambios regulares en los requisitos eran una necesidad empresarial en el mundo moderno y proporcionando técnicas de planificación de proyectos para adoptar el cambio controlado.
En este nuevo mundo ágil, mucha gente cuestionó el papel de la arquitectura. Y ciertamente la visión de la arquitectura planificada de antemano no encajaba con el dinamismo moderno. Pero existe otro enfoque de la arquitectura, que adopta el cambio de forma ágil. En esta perspectiva, la arquitectura es un esfuerzo constante, que trabaja estrechamente con la programación para que la arquitectura pueda reaccionar tanto a los requisitos cambiantes como a la retroalimentación de la programación. Hemos llegado a llamar a esto arquitectura evolutiva, para destacar que, aunque los cambios sean impredecibles, la arquitectura puede seguir avanzando en una buena dirección.
En Thoughtworks, hemos estado inmersos en esta visión arquitectónica del mundo. Rebecca dirigió muchos de nuestros proyectos más importantes en los primeros años de este milenio y desarrolló nuestro liderazgo técnico como nuestra CTO. Neal ha sido un atento observador de nuestro trabajo, sintetizando y transmitiendo las lecciones que hemos aprendido. Pat ha combinado su trabajo en proyectos con el desarrollo de nuestros líderes técnicos. Siempre hemos pensado que la arquitectura es de vital importancia y no puede dejarse al azar. Hemos cometido errores, pero hemos aprendido de ellos, adquiriendo una mejor comprensión de cómo construir una base de código que pueda responder con elegancia a los numerosos cambios en su finalidad.
El núcleo de la arquitectura evolutiva es hacer pequeños cambios e introducir bucles de retroalimentación que permitan a todos aprender de cómo se está desarrollando el sistema. El auge de la Entrega Continua ha sido un factor crucial para hacer práctica la arquitectura evolutiva. El trío de autores utiliza la noción de funciones de aptitud para monitorear el estado de la arquitectura. Exploran diferentes estilos de evolucionabilidad para la arquitectura y hacen hincapié en los problemas relacionados con los datos de larga duración, un tema que a menudo se descuida. La Ley de Conway domina gran parte de la discusión, como debe ser.
Aunque estoy seguro de que nos queda mucho por aprender sobre cómo hacer arquitectura de software en un estilo evolutivo, este libro marca una hoja de ruta esencial para el estado actual de la comprensión. A medida que más gente se da cuenta del papel central de los sistemas de software en nuestro mundo humano del siglo XXI, saber cómo responder mejor al cambio sin perder el equilibrio será una habilidad esencial para cualquier líder de software.
Get Construyendo Arquitecturas Evolutivas, 2ª Edición now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.