Arquitectura de Software explicada: las decisiones caras de cambiar
Una definición práctica, popularizada por Martin Fowler: arquitectura es aquello que las personas experimentadas de un equipo consideran difícil de cambiar. No es un diagrama bonito ni una lista de tecnologías: es el conjunto de decisiones estructurales que condicionan todo lo que viene después.
Cuál es la diferencia entre arquitectura y programación
La programación responde 'cómo hago que funcione este comportamiento'. La arquitectura responde 'cómo organizo el sistema para que diez comportamientos futuros sigan siendo posibles'. La primera decisión es local y reversible; la segunda es global y costosa.
Ejemplo cotidiano: en una casa, cambiar el color de la pared es programación; cambiar la posición de las paredes estructurales es arquitectura. Ambas son necesarias, pero exigen tiempos de decisión distintos.
¿Cuándo debo pensar en la arquitectura de mi sistema?
Antes de escribir la primera funcionalidad que dependa de una decisión irreversible: modelo de datos, estrategia de identidad y permisos, aislamiento entre clientes, integración con sistemas externos y política de datos sensibles.
Lo opuesto también es un error. Diseñar para una escala que nunca llega consume presupuesto y añade complejidad permanente. La regla práctica es diseñar la arquitectura para el próximo nivel realista, manteniendo fronteras que permitan dividir el sistema después, si es necesario.
- Decide temprano: identidad, autorización, modelo de datos, multi-tenant, auditoría.
- Posterga: elección de cola, caché distribuida, separación en servicios.
- Deja rastro: fronteras internas claras hacen que la separación futura sea barata.
Monolito o microservicios: ¿qué tiene más sentido?
Sam Newman es enfático al tratar los microservicios como una elección organizacional antes que técnica: resuelven el problema de que varios equipos necesiten entregar de forma independiente. Si hay un solo equipo, ese beneficio no se aplica; solo queda el costo.
Un monolito bien modularizado, con fronteras internas explícitas, entrega casi toda la claridad de los microservicios sin el costo operacional de la red, el despliegue distribuido, la consistencia eventual y la observabilidad fragmentada.
- Monolito modular: menor costo operacional, transacción simple, despliegue único.
- Microservicios: independencia de equipos, escala selectiva, aislamiento de fallas.
- Costo de los microservicios: latencia de red, datos distribuidos, complejidad de depuración.
- Camino común y sano: empezar modular y extraer servicios cuando aparezca el dolor.
¿La arquitectura influye en la seguridad y el desempeño?
Directamente. Dónde se aplica la autorización define si un error de pantalla se convierte en una fuga de datos. Por dónde circula el dato sensible define el tamaño de la superficie de ataque. Cómo se modelan las consultas define si el sistema aguanta al décimo cliente o se traba en el tercero.
Len Bass y coautores tratan estos aspectos como atributos de calidad: desempeño, seguridad, disponibilidad y modificabilidad no son funcionalidades que se agregan después, son propiedades que emergen de la estructura elegida.
El rol del arquitecto: reducir el arrepentimiento
Las buenas decisiones arquitectónicas son las que preservan opciones. Eric Evans, al proponer el diseño guiado por el dominio, defiende que la estructura del software refleje el lenguaje y las fronteras del negocio, de modo que, cuando el negocio cambie, el impacto quede contenido en una región del sistema.
No todo proyecto necesita a alguien con el cargo de arquitecto. Todo proyecto necesita que alguien asuma esas decisiones conscientemente y las registre.
En resumen
Arquitectura es gestión del arrepentimiento futuro. Decide temprano lo que es caro de cambiar, posterga el resto y mantén fronteras que permitan evolucionar sin reescribir.
Casos de uso
SaaS multiempresa
El aislamiento por organización debe estar en la base de datos y en las políticas de acceso, no solo en la interfaz.
Integración con ERP heredado
Una capa anticorrupción evita que el modelo del sistema externo contamine el dominio interno.
Pico estacional de tráfico
Separar la lectura pesada de la escritura suele rendir más que fragmentar el sistema en servicios.
Errores comunes
- Adoptar microservicios con un solo equipo y sin automatización de infraestructura.
- Dejar la autorización solo en la capa de interfaz.
- Modelar la base de datos calcando las pantallas en vez del dominio.
- Elegir tecnología por moda y no por una restricción real del problema.
- No registrar decisiones: seis meses después nadie recuerda el motivo.
Buenas prácticas
- Escribir registros breves de decisión arquitectónica (contexto, opción, consecuencia).
- Mantener fronteras de módulo explícitas dentro del monolito.
- Aplicar la autorización en el punto más cercano al dato.
- Definir atributos de calidad con números (latencia, disponibilidad, retención).
- Revisar la arquitectura en cada hito relevante del producto.
Libros recomendados
Software Architecture in Practice — Len Bass, Paul Clements y Rick Kazman
Formaliza los atributos de calidad y cómo la estructura los hace posibles.
Building Microservices — Sam Newman
Muestra los beneficios y, sobre todo, los costos reales de distribuir un sistema.
Domain-Driven Design — Eric Evans
Enseña a alinear las fronteras del software con las fronteras del negocio.
Patterns of Enterprise Application Architecture — Martin Fowler
Catálogo de patrones recurrentes en aplicaciones corporativas.
Para profundizar
Preguntas frecuentes
- ¿Qué es la Arquitectura de Software?
- Es el conjunto de decisiones estructurales difíciles de revertir: fronteras, modelo de datos, comunicación entre partes y atributos de calidad exigidos.
- ¿Cuándo debo pensar en la arquitectura de mi sistema?
- Antes de las primeras funcionalidades que dependan de decisiones irreversibles, como identidad, permisos y modelo de datos.
- ¿Toda aplicación necesita un arquitecto de software?
- No siempre necesita el cargo, pero siempre necesita que alguien asuma y registre las decisiones estructurales.
- Monolito o microservicios: ¿qué tiene más sentido?
- Con un solo equipo, el monolito modular casi siempre gana. Los microservicios compensan cuando varios equipos necesitan entregar de forma independiente.
- ¿La arquitectura influye en la seguridad y el desempeño?
- Sí. Dónde se aplica la autorización y cómo se modelan los datos determinan gran parte del riesgo y de la capacidad de escalar.
- ¿Qué errores de arquitectura son más comunes en proyectos iniciales?
- Distribuir demasiado pronto, modelar la base de datos a partir de las pantallas, dejar las reglas de acceso en la interfaz y no documentar las decisiones.
Referencias
- Martin Fowler — arquitectura como el conjunto de decisiones difíciles de cambiar
- Sam Newman, Building Microservices — microservicios como decisión organizacional
- Len Bass et al., Software Architecture in Practice — atributos de calidad
- Eric Evans, Domain-Driven Design — lenguaje ubicuo y contextos delimitados
Contenido original del equipo de i9 Conecty. Los conceptos clásicos se explican con palabras propias y se acreditan a sus autores.
Sigue leyendo
Ingeniería
Ingeniería de Software explicada: mucho más que escribir código
Producto
Tengo una idea de sistema. ¿Y ahora? El camino de la idea al software
Inteligencia Artificial
¿Puedo construir todo mi proyecto usando IA? Una respuesta honesta
Seguridad