La arquitectura de software es el conjunto de decisiones importantes sobre la organización de un sistema de software: la selección de elementos estructurales y sus interfaces, su comportamiento según se especifica en las colaboraciones entre esos elementos y la composición de estos elementos en subsistemas progresivamente más grandes. Pero antes de profundizar en estilos y patrones, debemos comprender quién toma estas decisiones y por qué contextos diferentes requieren roles diferentes. Esta lección cubre el trabajo del arquitecto, las habilidades que exige y la taxonomía de los tipos de arquitectura que encontrará en la industria.
La imagen popular de un arquitecto –alguien que entrega diagramas desde una torre de marfil– está obsoleta. Los arquitectos modernos operan en cuatro dimensiones superpuestas: liderazgo técnico, diseño de sistemas, comunicación organizacional y aprendizaje continuo. Definen atributos de calidad (rendimiento, escalabilidad, seguridad, mantenibilidad), traducen los objetivos comerciales en limitaciones estructurales, asesoran a los equipos de desarrollo y son dueños de las decisiones que de otro modo se tomarían de manera inconsistente entre los equipos.
La arquitectura es uno de los pocos roles que exige tanto profundidad extrema como amplitud extrema. Un ingeniero senior puede ser de clase mundial en un área; un arquitecto debe ser competente en muchos aspectos. La metáfora clásica es el conjunto de habilidades en forma de T: profundo en al menos un dominio técnico, pero lo suficientemente amplio como para conversar de manera creíble con otros. Mark Richards y Neal Ford añaden una segunda dimensión: el antipatrón del "hombre de las cavernas congelado" describe a los arquitectos que dejaron de ampliar su alcance y ahora aplican soluciones de hace una década a los problemas modernos.
La arquitectura no es una disciplina, es una familia de preocupaciones superpuestas en diferentes escalas. Los dos tipos más comúnmente confundidos en la industria son la Arquitectura de Solución y la Arquitectura de Sistema (también llamada Arquitectura de Software). Comprender la diferencia es fundamental porque cada uno opera en un ámbito diferente, responde preguntas diferentes y produce artefactos diferentes.
Estos dos conceptos a menudo se combinan, pero responden a preguntas completamente diferentes. Solution Architecture pregunta: "¿Qué sistemas, servicios y proveedores combinamos para resolver este problema empresarial y cómo se conectan?" La arquitectura del sistema pregunta: "¿Cómo estructuramos las partes internas de este sistema específico para cumplir con sus requisitos funcionales y no funcionales?" Un arquitecto de soluciones diseña el mapa; un arquitecto de sistemas diseña las manzanas de la ciudad.
Neal Ford, Rebecca Parsons y Patrick Kua introdujeron el concepto de "arquitectura evolutiva": arquitectura que guía el cambio en lugar de resistirlo. Para esto es fundamental la función de aptitud: una función objetiva que mide qué tan bien la arquitectura actual cumple con una característica arquitectónica específica. Las funciones de aptitud pueden ser pruebas automatizadas (verificación de dependencias no deseadas, verificación de SLO de tiempo de respuesta), procesos manuales (auditorías de seguridad) o paneles de métricas. La idea clave es que la arquitectura no es un diseño único: es una propiedad continua del sistema que debe mantenerse y medirse activamente.
La mayoría de los arquitectos provienen de un entorno de desarrollo y la transición es más difícil de lo que parece. Las habilidades que lo convirtieron en un excelente desarrollador (enfoque técnico profundo, resolución de problemas concretos, entrega de código funcional) son necesarias pero insuficientes para la arquitectura. La transición requiere desarrollar nuevos músculos: pensamiento sistémico (¿cómo afecta esta decisión a las cosas a diez pasos de distancia?), gestión de partes interesadas (¿cómo alineo a las personas con intereses en competencia?) y comodidad con la ambigüedad (¿cómo tomo una buena decisión cuando no tengo toda la información que quiero?).