Tu arquitectura no puede superar los límites de tu organización
- La carga cognitiva es finita: Cada equipo tiene un presupuesto mental limitado. Cuando un desarrollador necesita entender tres repositorios, dos pipelines y cuatro contratos de API para un cambio trivial, el problema no es técnico: es organizativo.
- La Ley de Conway no es una metáfora: Las organizaciones producen sistemas que replican sus estructuras de comunicación. Si no diseñas el organigrama, tu organigrama diseñará tu arquitectura por ti.
- Tres tipos de carga, una prioridad: La carga extrínseca (herramientas, procesos, infraestructura) es la que más daño causa y la más fácil de reducir. Plataformas internas y bounded contexts son la solución.
- Medir antes de escalar: Si el sistema no cabe en la cabeza de un equipo, no cabe en producción. Los equipos que gestionan su carga cognitiva despliegan más rápido y con menos fallos (DORA).
Hay una pregunta que rara vez se formula en las revisiones de arquitectura: ¿cuántos conceptos necesita retener un desarrollador en su memoria de trabajo para hacer un cambio seguro en este sistema?
Diseñamos arquitecturas de microservicios con decenas de componentes, elegimos entre Kafka y RabbitMQ, debatimos si usar gRPC o REST… pero ignoramos que cada equipo humano tiene un presupuesto cognitivo finito. Y cuando ese presupuesto se agota, no importa lo elegante que sea tu diagrama de arquitectura: la velocidad de entrega colapsa, los bugs se multiplican y el burnout se instala silenciosamente.
La industria ha tratado la arquitectura de software como un problema exclusivamente técnico durante décadas. Pero la evidencia empírica apunta en otra dirección: la arquitectura óptima no es la que minimiza el acoplamiento técnico, sino la que respeta los límites cognitivos de los equipos que la mantienen.
1. La ley de Conway: la restricción que nadie quiere aceptar
En 1968, Melvin Conway publicó en Datamation un paper que pasó relativamente desapercibido en su momento, pero que hoy se considera uno de los textos fundacionales de la ingeniería de software organizativa: How Do Committees Invent?. Su tesis central es demoledora en su simplicidad:
«Las organizaciones que diseñan sistemas están obligadas a producir diseños que son copias de las estructuras de comunicación de esas organizaciones.»
Esto no es una observación anecdótica. Es una restricción estructural. Si tu equipo de backend no habla con tu equipo de frontend más que en las demos de sprint, tu API acabará teniendo una interfaz que refleja esa desconexión. Si tres equipos comparten la responsabilidad de un monolito, acabarás con tres estilos arquitectónicos diferentes conviviendo en el mismo repositorio.
Fred Brooks, en su clásico The Mythical Man-Month (1975), cuantificó parte del problema: el número de canales de comunicación entre n personas crece según la fórmula . Un equipo de 5 personas tiene 10 canales. Un equipo de 10 tiene 45. Un equipo de 15 tiene 105. El crecimiento es cuadrático, y con él crece el coste de coordinación, el riesgo de malentendidos y la fricción para desplegar.
La implicación práctica es incómoda: no puedes diseñar la arquitectura ideal si no diseñas primero la organización que la va a mantener. Y si tu organigrama ya está definido y no es negociable, entonces tu arquitectura también lo está — te guste o no.
2. Los tres tipos de carga cognitiva en el desarrollo de software
La Teoría de la Carga Cognitiva, formulada por el psicólogo educativo John Sweller en 1988, establece que la memoria de trabajo humana tiene una capacidad limitada. George A. Miller ya lo había documentado en su célebre paper de 1956, The Magical Number Seven, Plus or Minus Two: podemos retener simultáneamente entre 5 y 9 elementos en nuestra memoria de trabajo. No más.
Matthew Skelton y Manuel Pais, en su influyente libro Team Topologies (2019), adaptaron esta teoría al contexto del desarrollo de software, clasificando la carga cognitiva en tres tipos:
Carga intrínseca: la complejidad del dominio
Es el esfuerzo mental inherente a la tarea que el equipo resuelve. Entender las reglas de negocio de un motor de precios, diseñar el modelo de datos de un sistema de reservas, o implementar un algoritmo de consenso distribuido: todo eso es carga intrínseca. Es necesaria y valiosa. No puedes eliminarla sin trivializar el problema.
Carga extrínseca: la complejidad accidental del entorno
Es el esfuerzo mental causado por herramientas inadecuadas, procesos burocráticos, documentación inexistente o infraestructura opaca. Cuando un desarrollador dedica 45 minutos a configurar un entorno de desarrollo local, o necesita entender tres sistemas de CI/CD diferentes para desplegar un cambio, está consumiendo presupuesto cognitivo en tareas que no aportan valor al producto.
Esta es la carga más destructiva porque es invisible en los sprint reviews. Nadie presenta una diapositiva diciendo «este sprint, el 30% de nuestra capacidad se fue en pelear con el pipeline de despliegue».
Carga pertinente: el aprendizaje productivo
Es el esfuerzo invertido en crear conocimiento duradero: dominar un nuevo patrón arquitectónico, entender en profundidad el dominio del negocio, o mejorar la estructura interna del código. Es el tipo de carga que queremos maximizar, porque genera retorno compuesto a largo plazo.
El problema real en la mayoría de las organizaciones es que la carga extrínseca devora el espacio que debería ocupar la carga pertinente. Los equipos están tan ocupados peleando con la infraestructura, navegando repositorios ajenos y descifrando configuraciones heredadas que no les queda capacidad mental para pensar en el diseño del software que construyen.
3. Cómo detectar que un equipo está sobrecargado
La sobrecarga cognitiva rara vez se manifiesta como un fallo espectacular. Se expresa de formas más sutiles y, por ello, más peligrosas:
- El «bus factor» invertido: Solo una persona en el equipo entiende cómo funciona realmente una parte crítica del sistema. No porque sea especialmente brillante, sino porque la carga cognitiva necesaria para entender ese componente supera la capacidad de cualquier recién llegado.
- Tiempos de onboarding crecientes: Si un desarrollador nuevo necesita más de 2-3 semanas para hacer su primera contribución significativa, es probable que la carga extrínseca del proyecto sea excesiva.
- Cambios triviales que requieren coordinación compleja: Si actualizar un campo en un formulario requiere modificar tres repositorios, dos contratos de API y coordinar con otro equipo para el despliegue, la arquitectura ha superado la capacidad cognitiva del equipo.
- Reuniones de sincronización constantes: Cuando los equipos necesitan daily syncs entre sí para no romper cosas, el acoplamiento organizativo está replicando el acoplamiento técnico.
El programa de investigación DORA (DevOps Research and Assessment) ha demostrado consistentemente que las organizaciones con equipos débilmente acoplados (que pueden testear, desplegar y modificar sus servicios de forma independiente) presentan frecuencias de despliegue significativamente superiores y tasas de fallo más bajas. No es coincidencia: los equipos desacoplados son equipos con carga cognitiva gestionada.
4. Team Topologies: diseñar la organización antes que la arquitectura
Si la Ley de Conway es la restricción, Team Topologies es el framework que la convierte en ventaja. En lugar de luchar contra la realidad de que la organización moldea la arquitectura, Skelton y Pais proponen la Maniobra de Conway Inversa: diseñar deliberadamente la estructura organizativa para que produzca la arquitectura deseada.
El modelo define cuatro tipos fundamentales de equipo:
Equipos stream-aligned (alineados al flujo)
Son los equipos principales. Cada uno es responsable de un flujo de valor completo: una funcionalidad de negocio de principio a fin. Su objetivo es minimizar los handoffs y maximizar la autonomía. El tamaño ideal es de 5-9 personas — no por casualidad, el rango de Miller para la memoria de trabajo.
Equipos de plataforma
Su misión es reducir la carga extrínseca de los equipos stream-aligned. Proporcionan herramientas, APIs e infraestructura self-service que abstraen la complejidad operativa. Un buen equipo de plataforma hace que desplegar sea tan sencillo como hacer git push. Un mal equipo de plataforma crea otra capa de burocracia que los demás equipos deben aprender.
Equipos de subsistema complicado
Encapsulan dominios técnicos que requieren conocimiento especializado (machine learning, motores de cálculo financiero, procesamiento de señal). Existen para evitar que esa complejidad contamine la carga cognitiva de los equipos stream-aligned.
Equipos habilitadores (enabling)
Son temporales y funcionan como consultores internos. Ayudan a los equipos stream-aligned a adoptar nuevas prácticas o tecnologías sin tener que dedicar su propio presupuesto cognitivo a la exploración.
La clave del modelo no está en los tipos de equipo en sí, sino en la restricción que los une: cada equipo tiene un presupuesto cognitivo limitado, y la arquitectura del sistema debe respetar ese límite. Si un equipo stream-aligned necesita entender la infraestructura de Kubernetes para desplegar, el equipo de plataforma no está haciendo su trabajo. Si un equipo necesita coordinar con otros tres equipos para lanzar una feature, los bounded contexts están mal definidos.
5. Bounded contexts como alineación equipo-dominio
El concepto de Bounded Context de Domain-Driven Design, formalizado por Eric Evans en Domain-Driven Design: Tackling Complexity in the Heart of Software (2003), encaja como un guante con Team Topologies. Un bounded context define un límite semántico dentro del cual un modelo de dominio es consistente y completo. Fuera de ese límite, los mismos términos pueden significar cosas diferentes.
Cuando alineas un equipo con un bounded context, consigues algo que pocas arquitecturas logran por accidente:
- Autonomía semántica: El equipo posee el lenguaje y las reglas de su dominio. No necesita consensuar con otros equipos qué significa «cliente» o «transacción» en su contexto.
- Despliegue independiente: Si el bounded context está bien diseñado, los cambios internos no requieren coordinación externa.
- Carga cognitiva acotada: El equipo solo necesita entender en profundidad su propio contexto. Las interacciones con otros contextos se manejan a través de contratos explícitos (APIs, eventos, anti-corruption layers).
El error más frecuente es diseñar los bounded contexts según los límites técnicos (un contexto para la base de datos, otro para la API, otro para el frontend) en lugar de hacerlo según los límites del dominio de negocio. Cuando los contextos están alineados con el dominio, la estructura del equipo y la arquitectura del sistema se refuerzan mutuamente. Cuando no lo están, cada equipo necesita entender pedazos del dominio que pertenecen a otros — y la carga cognitiva se dispara.
Conclusión: si no cabe en la cabeza de un equipo, no cabe en producción
La próxima vez que te sientes a diseñar una arquitectura, antes de elegir entre monolito y microservicios, antes de decidir si el bus de eventos será Kafka o RabbitMQ, hazte la pregunta que realmente importa: ¿cuántos conceptos necesita retener un equipo en su memoria de trabajo para mantener este sistema?
Si la respuesta supera la capacidad de un equipo de 5-9 personas, tienes un problema de diseño organizativo, no técnico. Y ninguna tecnología del mundo resolverá un problema organizativo.
Conway lo vio en 1968. Brooks lo cuantificó en 1975. Skelton y Pais lo sistematizaron en 2019. La evidencia del programa DORA lo confirma empíricamente cada año. La carga cognitiva es un límite físico del desarrollo de software, tan real como la latencia de red o la velocidad de la luz. Ignorarlo es como diseñar un puente sin calcular la carga máxima que soportarán sus pilares.
La arquitectura de software más sofisticada del mundo fracasará si el equipo que la mantiene no puede entenderla. Y el sistema más sencillo triunfará si los equipos que lo construyen tienen la autonomía, el contexto y el espacio mental para hacer su trabajo bien.
Diseña la organización. La arquitectura vendrá sola.




