fedorthinks

Curso completo · No. 03

Un curso para el ingeniero que ya sabe escribir código pero quiere aprender a tomar decisiones arquitectónicas, explicárselas al equipo y al negocio, y ver el sistema entero.

24 módulos · 52 conceptos · un diagrama para cada uno · chuleta al final

Módulos detallados
§ 01

Un arquitecto se distingue de un ingeniero senior no porque conozca más tecnologías. Se hace responsable de las consecuencias de las decisiones a lo largo del tiempo.

Mapa del curso — 24 módulos en seis partes

Un mapa de metro: primero ves todas las líneas de golpe y luego recorres estación por estación.

El curso va de la mentalidad a la práctica. Primero, cómo piensa un arquitecto (mindset). Después, cómo se construye un sistema por dentro (structure) y qué cambia cuando se reparte por una red (distribution). Luego vienen las propiedades de calidad (quality attributes), el trabajo con personas (people) y hacia dónde va la profesión (future).

Mindset · 1–401 Architect role02 Trade-offs03 Technical debt04 Cognitive loadStructure · 5–905 Decomposition06 Layers & DIP07 API contracts08 Data model09 State & truthDistribution · 10–1210 Distributed systems11 Monolith vs micro12 Sync vs asyncQuality · 13–1713 Performance14 Scalability15 Reliability16 Security17 ObservabilityPeople · 18–2118 Documentation19 Communication20 Leadership21 Business & productFuture · 22–2422 AI-native architect23 Anti-patterns24 Growth
Los 24 módulos en seis partes: mindset → structure → distribution → quality → people → future.

Cómo leerlo: cada concepto tiene su término en inglés (el que buscarás en la documentación y oirás en las entrevistas), una imagen cotidiana, un diagrama y una tarjeta con los campos «qué es / ejemplo / coste / relaciones». Al final del curso hay una chuleta con todos los conceptos en una sola página.

Long-term thinking — el arquitecto piensa en años

Un ingeniero construye un puente por el que mañana pasará un coche. El arquitecto pregunta qué pasa cuando empiecen a usarlo camiones, cuando se levante un barrio nuevo al lado y cuando las reparaciones cuesten más que el propio puente.

Un ingeniero suele resolver el problema tal como se lo plantean. El arquitecto primero comprueba si el problema está bien planteado. No es postureo ni ganas de «hablar de cosas profundas». Simplemente, una decisión arquitectónica suele ser más cara de cambiar que una línea de código.

El cambio principal en la cabeza: dejas de preguntar solo «cómo hago X» y empiezas a preguntar «para qué necesitamos X, qué alternativas hay, qué vamos a perder y cómo se verá esto dentro de tres años».

Engineerhow to build X?solves the task as posedArchitectwhy X? · alternatives? · what we lose? · in 3 years?nowmonth1 year3 yearsan architectural decision costs more to change than a line of code
El ingeniero mira la tarea tal como se plantea. El arquitecto estira la misma pregunta a lo largo de los años.
ConceptLong-term Thinking· pensar en años
Qué es

Juzgar una decisión no solo por «funciona mañana», sino por cómo se comporta dentro de uno a tres años.

Cómo funciona

Antes de «cómo construyo X»: «para qué X», qué alternativas hay, qué perdemos.

Ejemplo

El puente: ¿aguantará camiones, un barrio nuevo al lado, reparaciones que cuesten más que el puente?

Ojo

No es licencia para construir «para el crecimiento»: es solo una pregunta que hay que hacerse.

Relaciones
Reversible decisions, trade-offs, technical debt.

Reversible vs irreversible decisions — hacerse cargo de la forma del sistema

Si un carpintero cuelga mal una estantería, se puede mover. Si el diseñador pone un muro de carga en el sitio equivocado, la casa vive con ese error durante décadas.

El arquitecto no tiene la obligación de tomar personalmente cada decisión técnica. Pero sí de responsabilizarse de las decisiones que dan forma al sistema: fronteras entre servicios, modelo de datos, protocolos de integración, estrategia de escalado, seguridad, observability, ruta de migración.

La distinción útil aquí es entre decisiones reversibles y decisiones irreversibles. Una decisión reversible se puede cambiar en un día o una semana: una librería de logging, el color de un botón, la estructura interna de un módulo pequeño. Una decisión irreversible, o cara de revertir, cambia la trayectoria del sistema: la base de datos, el modelo de tenancy, un contrato de API, la forma de guardar los eventos, las fronteras entre servicios.

Reversible · days or weeksLogging libraryButton colourSmall module internalsdecide fast · fix in a weekIrreversible · yearsDatabaseTenancy modelAPI contractHow events are storedService boundariesthe architect owns these
Las decisiones reversibles se toman rápido. Las irreversibles dan forma al sistema: de ellas se responsabiliza el arquitecto.
ConceptReversible vs Irreversible· dos tipos de decisiones
Qué es

Clasificar las decisiones por lo que cuesta deshacerlas: días o semanas frente a meses o años.

Cómo funciona

Las reversibles: se deciden rápido, sin discutir mucho. Las irreversibles: despacio, con alternativas y por escrito.

Ejemplo

Una librería de logging es reversible. El modelo de tenancy o un contrato de API casi no lo son.

Ojo

Una semana de debate sobre un detalle reversible es tan malo como decidir en una hora algo irreversible.

Relaciones
Data model, API contract, service boundaries.
Las preguntas del arquitecto
  • ¿Qué problema estamos resolviendo en realidad?
  • ¿Qué cambia si la carga crece 10 veces?
  • ¿Cuáles de estas decisiones son reversibles y cuáles casi no lo son?
  • ¿Quién va a mantener esto dentro de un año?

El arquitecto no construye «el sistema más correcto»: construye un sistema que sobrevive a la realidad.

§ 02

En arquitectura no hay decisiones gratis. Cada elección compra una propiedad a costa de otra.

Trade-off — una buena práctica sin contexto es un mal consejo

Un todoterreno gana a un turismo en un camino de barro. El turismo gana al todoterreno en la ciudad. Una bicicleta gana a ambos si hay que ir tres manzanas y no hay dónde aparcar.

Una decisión arquitectónica no se puede evaluar fuera de su contexto. REST, GraphQL, Kafka, PostgreSQL, Kubernetes, microservicios, monolito: todo son herramientas con precio. Un trade-off es un intercambio deliberado: latencia frente a throughput, consistencia frente a disponibilidad, time-to-market frente a mantenibilidad, simplicidad frente a flexibilidad.

El arquitecto no dice «Kafka es mejor que RabbitMQ». Dice: «necesitamos orden de eventos por clave, alto throughput, replay y un log duradero; a cambio pagamos la complejidad operativa de Kafka». Así suena el lenguaje profesional.

every choice buys one property at the cost of anotherLatencyThroughputConsistencyAvailabilityTime-to-marketMaintainabilitySimplicityFlexibility
Cada decisión es un punto en varios ejes a la vez. Si te acercas a un extremo, cedes algo en el otro.
ConceptTrade-offs· un intercambio deliberado
Qué es

Una elección que compra una propiedad a costa de otra, hecha en voz alta.

Cómo funciona

Di qué ganas, qué pierdes y por qué ese precio es aceptable ahora.

Ejemplo

«Orden por clave, throughput, replay, un log duradero: se paga con la complejidad operativa de Kafka.»

Ojo
«X es mejor que Y» sin contexto no es un argumento, es gusto.
Relaciones
CAP / PACELC, over-engineering, sync vs async.

Over-engineering vs under-engineering — la complejidad es un impuesto

Cada abstracción nueva es como una habitación más en la casa. La habitación puede ser útil, pero hay que limpiarla, calentarla, repararla y explicársela a las visitas.

La complejidad es útil cuando compra una propiedad importante: aislamiento de fallos, despliegue independiente, seguridad, escalado, testabilidad. Pero la complejidad «para el futuro» suele convertirse en un impuesto permanente.

Los términos over-engineering y under-engineering solo sirven juntos. Over-engineering: la complejidad apareció antes del dolor real. Under-engineering: el sistema ya ha chocado con sus límites y la arquitectura no dejó espacio para crecer. El trabajo del arquitecto no es elegir un extremo, sino sostener el punto medio.

Under-engineeringhit limits, no room to growRight-sizedcomplexity buys a propertyOver-engineeringcomplexity before real painlessmore complexitycomplexity pays off only when it buys a property:failure isolation · independent release · security · scaling · testability
Dos errores en los extremos, la zona correcta en el medio: la complejidad se justifica solo cuando compra una propiedad concreta.
ConceptOver- / Under-engineering· demasiado vs muy poco
Qué es

Over: complejidad antes del dolor real. Under: el sistema llegó a sus límites sin camino para crecer.

Cómo funciona

Cada capa o servicio nuevo tiene que nombrar la propiedad que compra.

Ejemplo

Microservicios y Kafka desde el lanzamiento para 200 usuarios: over. Una tabla sin índices cuando la carga crece 10 veces: under.

Ojo
La complejidad «para el futuro» no desaparece: la pagas cada día.
Relaciones
Trade-off, technical debt, cognitive load.
Para seguir leyendo
  • Architecture: The Hard Parts — Ford, Richards, Sadalage, Dehghani
  • Software Architecture in Practice — Bass, Clements, Kazman
  • Martin Fowler: Is Design Dead?
§ 03

La deuda técnica no siempre es mala. Lo malo es la deuda contraída por accidente, sin anotar y sin intención de pagarla.

Technical debt — un préstamo, no basura

Un préstamo para comprar equipo puede acelerar un negocio. Un préstamo para una fiesta solo deja resaca e intereses.

La deuda técnica es una decisión que nos acelera ahora pero crea un coste futuro de cambio. A veces es lo correcto: hay que probar el mercado, cumplir un plazo, retener a un cliente. El problema empieza cuando el equipo etiqueta todo como deuda: código malo, falta de tests, dependencias caóticas, librerías anticuadas.

Un modelo útil es el Technical Debt Quadrant de Martin Fowler: deliberada / inadvertida y prudente / imprudente. Deuda deliberada y prudente: «de momento no hacemos multi-región porque tenemos 200 usuarios y un solo mercado». Deuda inadvertida e imprudente: «no sabíamos que necesitábamos transacciones».

RecklessPrudentDeliberateInadvertent“No time for design”corners cut on purpose“Skip multi-region”200 users, one market“What are transactions?”didn't know we needed them“Now we know better”learned while building
El cuadrante de Fowler: la deuda se puede contraer de forma deliberada y prudente (arriba a la derecha). Las celdas de la izquierda son las peligrosas.
ConceptTechnical Debt· pedir prestado contra el cambio futuro
Qué es

Una decisión que nos acelera ahora pero crea un coste futuro de cambio.

Cómo funciona

Contráela de forma deliberada, anota qué y por qué, y fija un disparador para revisarla.

Ejemplo

«Sin multi-región por ahora: 200 usuarios, un mercado»: deliberada y prudente.

Ojo

Si todo se llama deuda (código malo, sin tests, librerías viejas), la palabra deja de significar algo.

Relaciones
Debt interest, ADR (registrar la decisión), trade-off.

Debt interest — la deuda cobra intereses

Si la carretera está rota, cada viaje dura cinco minutos más. Un mes después ya no es un bache: es un impuesto sobre toda la ciudad.

Los intereses de la deuda técnica son la ralentización de cada cambio siguiente. Cuanto más a menudo toca el equipo una zona, más cara es la deuda. Por eso la deuda en el dominio caliente es más peligrosa que la de un panel de administración que casi nadie usa.

El arquitecto negocia una estrategia de pago: qué cuenta exactamente como deuda, qué riesgo crea, cuándo revisamos la decisión, qué señal dice «es hora de pagar». Sin eso, la «deuda técnica» se vuelve un argumento emocional, no un instrumento gestionado.

Hot domainAdmin panela changeinterest: the extra time each change costsinterest = slowdown × how often the team touches this code
La misma deuda: en el dominio caliente los intereses se cobran en cada cambio; en el panel de administración, casi nunca.
ConceptDebt Interest· el coste corriente de la deuda
Qué es

La ralentización de cada cambio siguiente en el código que arrastra deuda.

Cómo funciona

Intereses ≈ ralentización × con qué frecuencia el equipo toca esa zona.

Ejemplo

La deuda en pagos, que cambia cada semana, cuesta más que la de un panel de administración que se abre una vez por trimestre.

Ojo

Sin una estrategia de pago, la «deuda técnica» se convierte en un argumento emocional.

Relaciones
Technical debt, cognitive load.
Preguntas para una revisión de deuda
  • ¿Dónde está escrito por qué aceptamos este compromiso?
  • ¿Qué intereses pagamos cada sprint?
  • ¿Qué tendría que pasar para que esta deuda se convierta en un bloqueo?
  • ¿Hay un plan de pago, o al menos un disparador para revisarla?
§ 04

Un sistema que nadie puede tener en la cabeza se romperá incluso con ingenieros fuertes.

Cognitive load — la arquitectura tiene que caber en una cabeza humana

Un mapa de metro es útil no porque muestre cada tornillo del túnel. Muestra líneas, transbordos y dirección de viaje. Eso basta para decidir.

La cognitive load es el esfuerzo mental que un sistema exige a un ingeniero. Existe la intrinsic load: la complejidad del propio dominio. Y la extraneous load: complejidad extra por mala arquitectura, vínculos poco obvios, excepciones accidentales y magia. El arquitecto no puede quitar la complejidad del negocio, pero está obligado a reducir la complejidad accidental.

Un buen módulo se entiende por sí solo. Un buen bounded context tiene su propio lenguaje y sus propios invariantes. Un buen equipo es dueño de un área que cabe en su cabeza.

what fits in a headMessy systemIntrinsicExtraneousClean systemIntrinsicExtraneousintrinsic = the domain itself (keep) · extraneous = accidental complexity (cut)
La complejidad del dominio (intrinsic) siempre está ahí. La arquitectura decide cuánta complejidad extra (extraneous) se apila encima, y si todo cabe en una cabeza.
ConceptCognitive Load· esfuerzo mental
Qué es

Cuánto contexto tiene que sostener un ingeniero en la cabeza para cambiar algo con seguridad.

Cómo funciona

La intrinsic es la complejidad propia del dominio: se queda. La extraneous es accidental: recórtala.

Ejemplo

Un módulo que se entiende por sí solo frente a uno donde nada tiene sentido sin la «magia» y las excepciones.

Ojo

Los ingenieros fuertes no pueden salvar un sistema que no cabe en una cabeza.

Relaciones
Bounded context, Conway's Law, decomposition.

Conway's Law — la estructura de los equipos se convierte en la estructura del sistema

Si tres departamentos no hablan entre sí, su producto casi siempre parece tres productos pegados en un solo menú.

La Conway's Law dice: una organización diseña sistemas que reflejan la estructura de comunicación dentro de la organización. Si las fronteras arquitectónicas no coinciden con las de los equipos, el equipo seguirá invadiendo territorio ajeno.

Team Topologies introduce etiquetas útiles: stream-aligned team, platform team, enabling team, complicated-subsystem team. No es moda de recursos humanos: es una herramienta arquitectónica. A veces, la descomposición correcta del sistema empieza por la descomposición correcta de la responsabilidad.

OrganisationSystemTeam ATeam BTeam CPart APart BPart CmirrorsTeam Topologies — four team typesStream-alignedPlatformEnablingComplicated subsystem
Conway's Law: el sistema refleja cómo se comunican los equipos. Team Topologies da cuatro tipos de equipo para cortarlo a propósito.
ConceptConway's Law· más Team Topologies
Qué es

Un sistema refleja la estructura de comunicación de la organización que lo construye.

Cómo funciona

Alinea las fronteras de los equipos con las del sistema: cada equipo es dueño de su área.

Ejemplo

Tres departamentos que no hablan entre sí entregan «tres productos en un menú».

Ojo
Si las fronteras no coinciden, los equipos se siguen pisando el terreno.
Relaciones

Team Topologies (stream-aligned, platform, enabling, complicated-subsystem), bounded context.

§ 05

Un sistema grande solo se vuelve manejable cuando puedes cortarlo por las fronteras correctas.

Cohesion & coupling — cortar por capas, por dominios o por flujo de datos

Un carnicero no corta la res al azar: corta por las articulaciones. Una buena descomposición también busca puntos de ruptura naturales.

Descomponer no es «ordenar en carpetas». Es elegir dónde termina la responsabilidad. Alta cohesión significa que todo dentro de un componente trata de una sola cosa. Bajo acoplamiento significa que el componente sabe poco de los demás.

Un corte horizontal da capas: UI, aplicación, dominio, infraestructura. Un corte vertical da features o bounded contexts: facturación, identidad, catálogo, comentarios. Los sistemas reales necesitan ambos, pero confundir uno con otro es peligroso.

BillingIdentityCatalogCommentsUIApplicationDomainInfrastructurehorizontal cut = layers · vertical cut = features / bounded contextshigh cohesion inside a part · low coupling between parts
Un corte horizontal da capas; uno vertical, features y contextos. Un sistema real es una cuadrícula de ambos.
ConceptCohesion & Coupling· apretado por dentro, suelto entre medias
Qué es

Todo dentro de un componente trata de una sola cosa (cohesión); sabe poco de los demás (acoplamiento).

Cómo funciona

Corta en horizontal (capas) y en vertical (features / contextos), y no los confundas.

Ejemplo

Un módulo billing con sus propias capas UI → application → domain → infra.

Ojo
«Ordenar en carpetas» todavía no es descomponer.
Relaciones
Bounded context, layers, modular monolith.

Bounded context — una mala frontera se delata con el cambio

Si cambiar el grifo de la cocina obliga a desmontar el dormitorio, el problema no es el grifo.

Una señal de mala descomposición: un cambio pequeño se propaga por cinco módulos. Otra señal: un módulo cambia por razones distintas: hoy por el producto, mañana por la base de datos, pasado mañana por una integración.

El término de DDD bounded context es útil justo aquí. Es una frontera dentro de la cual las palabras tienen un solo significado. «Customer» en facturación y «Customer» en soporte pueden ser modelos distintos. Forzarlos en uno solo suele crear un modelo «universal» frágil.

Billing contextSupport contextCustomerCustomerpayer of invoicespayment methodtax detailsperson with ticketscontact channelconversation history≠✗ one shared “universal” Customer → a brittle model
Una palabra, dos modelos: Customer en facturación y Customer en soporte significan cosas distintas, y eso está bien.
PatternBounded Context· una frontera de significado de DDD
Problema

Un cambio pequeño se propaga por cinco módulos; un módulo cambia por razones distintas.

Idea

Una frontera dentro de la cual cada palabra tiene un significado y un modelo.

Ejemplo

«Customer» en facturación y «Customer» en soporte son modelos distintos.

Coste

Hay que mapear los modelos en las fronteras; traducción entre contextos.

Cuándo usarlo

Cuando un mismo concepto significa cosas distintas para partes distintas del negocio.

Relaciones
Cohesion / coupling, Conway's Law, microservices.
§ 06

La lógica de negocio debe depender de las reglas de negocio, no del framework, la base de datos ni HTTP.

Dependency Rule y DIP — las dependencias fluyen hacia el centro

La cimentación no debería depender del color de las cortinas. Si depende, la casa se diseñó al revés.

Clean Architecture, Hexagonal Architecture y Onion Architecture dicen lo mismo: la lógica importante va en el centro y los detalles, fuera. HTTP, SQLAlchemy, Next.js, Kafka, Redis, Stripe: son detalles. Importan, pero no deben definir las reglas de negocio.

El Dependency Inversion Principle dice: la lógica de alto nivel depende de abstracciones y las implementaciones se enchufan desde fuera. En código se ve como puertos y adaptadores: el servicio recibe un PaymentGatewayProtocol, no construye un StripeClient por dentro.

Details (outside)Application (use cases)Domainbusiness rulesPaymentGatewayProtocolport · an abstractiondepends onHTTP · Next.jsSQLAlchemyKafka · RedisStripeClientimplements the portevery dependency arrow points inwarddetails plug infrom outside
El dominio, en el centro, depende solo de un puerto. StripeClient, HTTP y la base de datos son detalles de fuera; todas las flechas apuntan hacia dentro.
PrincipleDependency Inversion· DIP, la regla de dependencia
Problema

Las reglas de negocio se han incrustado en el framework y la base de datos: no se pueden probar ni reemplazar.

Idea

La lógica de alto nivel depende de abstracciones; las implementaciones se enchufan desde fuera.

Ejemplo

El servicio recibe un PaymentGatewayProtocol en lugar de construir un StripeClient.

Coste
Más interfaces y más archivos.
Cuándo usarlo

Hay reglas de negocio reales que deben sobrevivir a los cambios de tecnología.

Relaciones

Clean / Hexagonal / Onion Architecture, ports and adapters.

Abstraction — existe para absorber el cambio, no para quedar bonito

Un adaptador va donde los enchufes realmente son distintos. Si pones un adaptador en cada toma solo porque te gustan los adaptadores, la casa se vuelve menos segura.

No toda clase necesita una interfaz. Pero todo lo que toca el mundo exterior, el tiempo, la aleatoriedad, la red, el sistema de archivos o la base de datos debe poder reemplazarse en los tests. Si no, no estás probando lógica de negocio: estás levantando un pequeño sistema de producción dentro de un test unitario.

El precio de una capa son más archivos y más palabras. La recompensa es testabilidad, infraestructura intercambiable y fronteras limpias. Si no hay recompensa, la capa es lastre.

Outside world → behind a portTimeRandomnessNetworkFile systemDatabasePortRealproductionFakeunit testsNo interface neededPure functionno outside worldInternal classone implementationno payoff →an extra layer is dead weight
Esconde el mundo exterior (tiempo, aleatoriedad, red, archivos, base de datos) detrás de un puerto y pon un fake en los tests. La lógica pura no necesita interfaz.
PracticeAbstraction· interfaces donde empuja el cambio
Qué es

Una interfaz va donde la implementación realmente cambia o estorba a los tests.

Cómo funciona

Tiempo, aleatoriedad, red, archivos, base de datos → detrás de un puerto; un fake en los tests, el adaptador real en producción.

Ejemplo

Una regla de negocio se prueba sin base de datos, sin HTTP y sin tiempo real: en milisegundos.

Ojo
Una capa sin recompensa son archivos y palabras de más, no arquitectura.
Relaciones
DIP, testability, over-engineering.
§ 07

Una API es una promesa. Romper una promesa es fácil; reconstruir la confianza de los clientes es difícil.

API contract — el contrato importa más que el transporte

Al control de pasaportes no le importa la marca de la puerta. Importa qué documentos se aceptan, qué reglas se aplican y qué pasa cuando algo falla.

REST, GraphQL, gRPC y WebSocket son formas distintas de hablar. REST encaja con APIs orientadas a recursos y con caché sencilla. GraphQL ayuda cuando clientes distintos necesitan formas distintas de lectura. gRPC va bien para comunicación tipada entre servicios. WebSocket sirve para eventos bidireccionales en tiempo real.

La elección del transporte es secundaria. Lo que importa es el API contract: esquema, errores, idempotencia, versionado, backward compatibility, deprecation policy.

RESTresources, cachingGraphQLflexible readsgRPCtyped service-to-serviceWebSocketreal-time, two-waytransportContract — what really mattersSchemaErrorsIdempotencyVersioningBackward compatibilityDeprecation policy
El transporte de la izquierda puede cambiar. El contrato de la derecha es una promesa a los clientes, y es caro romperlo.
ConceptAPI Contract· la promesa a los clientes
Qué es

Una promesa: esquema, errores, idempotencia, versiones, compatibilidad, reglas para retirar lo viejo.

Cómo funciona

Primero se acuerda el contrato; después se elige el transporte adecuado.

Ejemplo

REST para recursos y caché; GraphQL para lecturas variadas; gRPC para comunicación tipada entre servicios; WebSocket para tiempo real.

Ojo

Romper una promesa es fácil; reconstruir la confianza de los clientes es difícil.

Relaciones
Idempotency, versioning, reversible vs irreversible.

Idempotency — te salva del mundo real

Si pulsas diez veces el botón del ascensor, el ascensor no debería llegar y marcharse diez veces. Debería entender que la intención es una sola.

La idempotencia significa que repetir una operación produce el mismo efecto final. En sistemas en red los reintentos son inevitables: timeouts, retries, webhooks duplicados, reinicios de workers. Si crear un pago, un pedido o un mensaje no es idempotente, tarde o temprano el sistema hará algo de más.

El arquitecto diseña la idempotencia a nivel de contrato: idempotency key, unique constraints, reintentos seguros, estados claros.

the same Idempotency-Key travels with every attemptClient1st trytimeout → retryretryAPIseen this key?1 paymentunique(idempotency_key)same key → same result · the card is charged once
El cliente envió la petición tres veces con una sola clave: el servidor reconoció la clave y creó un solo pago.
ConceptIdempotency· operaciones seguras de repetir
Qué es
Repetir una operación da el mismo efecto final que la primera llamada.
Cómo funciona

Una idempotency key en la petición + una unique constraint en la base de datos + estados claros.

Ejemplo

Un pago da timeout → el cliente repite POST /payments con la misma clave → se cobra una vez.

Ojo

Sin ella, las repeticiones (retries, webhooks duplicados, reinicios de workers) acaban haciendo algo de más.

Relaciones
At-least-once delivery, API contract, retries.
§ 08

El código se reescribe. Los datos migran durante años. Por eso el modelo de datos es una de las decisiones arquitectónicas más caras.

Data model — los datos viven más que las aplicaciones

Una fachada se repinta en una semana. Una cimentación mal vertida te lo recuerda durante toda la vida del edificio.

El lenguaje, el framework y la UI pueden cambiar varias veces. Pero las tablas, los eventos, las claves, las relaciones y los registros históricos se quedan. Un error en el modelo de datos suele convertirse en un error en todas las versiones futuras del producto.

La normalización reduce la duplicación y el riesgo de divergencia. La desnormalización acelera las lecturas y simplifica el read model. Los sistemas OLTP están optimizados para transacciones, los OLAP para analítica. No se puede diseñar un único modelo como si fuera a servir perfectamente a ambas clases de trabajo.

App v1App v2 · rewriteApp v3 · rewriteData: tables · events · keys · historyoutlives every rewriteOLTPtransactions · normalizedOLAPanalytics · denormalized reads≠one model can't perfectly serve both kinds of work
La app se reescribió tres veces; los datos se quedaron. Abajo: dos tipos de trabajo distintos: transacciones (OLTP) y analítica (OLAP).
ConceptData Model· más OLTP / OLAP
Qué es

Tablas, eventos, claves, relaciones e historial: lo que sobrevive a cada reescritura del código.

Cómo funciona

Normalización: menos duplicados y menos divergencia; desnormalización: lecturas más rápidas.

Ejemplo

Una base de datos OLTP para pedidos y un almacén OLAP aparte para informes.

Ojo

Un error en el modelo de datos se convierte en un error en todas las versiones futuras del producto.

Relaciones
Irreversible decisions, event sourcing, CQRS.

Event sourcing y CQRS — una herramienta potente, no una religión

Un extracto bancario no guarda solo el saldo actual: guarda el historial de operaciones. Eso es lo que permite explicar de dónde sale el saldo.

Event sourcing guarda los cambios como una secuencia de eventos y reconstruye el estado actual a partir de ellos. Es útil cuando importan el historial, la auditoría, la recuperación de estado y el replay. El precio es alto: evolución del esquema de eventos, complejidad de las consultas, eventual consistency, herramientas exigentes.

CQRS separa el modelo de escritura del modelo de lectura. Puede simplificar mucho los sistemas de lectura complejos, pero añade sincronización y retraso. Introducir CQRS solo porque «suena a arquitectura» es una forma cara de convertir un problema en dos.

CommandWrite modelOrderPlacedItemAddedOrderPaidevent log · append-onlyprojectionRead modelshaped for queriesQueryreadsEvent sourcing: state = replay of events · CQRS: separate write and read modelsprice: event schema evolution · lag · harder queries · tooling
Un comando escribe eventos en el log; una proyección construye con ellos un read model, y las consultas leen de ahí.
PatternEvent Sourcing· el estado como log de eventos
Problema
El estado actual no explica cómo llegamos hasta aquí.
Idea
Guardar los cambios como un log de eventos; estado = reproducirlos.
Ejemplo
Un extracto bancario: el saldo es la suma de las operaciones.
Coste

Evolución del esquema de eventos, consultas más difíciles, eventual consistency, herramientas exigentes.

Cuándo usarlo

Importan el historial, la auditoría, la recuperación de estado y el replay.

Relaciones
Suele ir junto con CQRS.
PatternCQRS· Command Query Responsibility Segregation
Problema

Un solo modelo sirve mal tanto a las escrituras como a las lecturas complejas.

Idea
Separar el modelo de escritura del modelo de lectura.
Ejemplo

Los pedidos se escriben en un modelo normalizado; la pantalla de informes lee una vista ya preparada.

Coste
Sincronización y retraso entre los modelos.
Cuándo usarlo

Cuando las lecturas son realmente complejas, no porque «suene a arquitectura».

Relaciones
Event sourcing, denormalization, eventual consistency.
§ 09

El estado es complejidad que vive en algún sitio. Cuantas más copias de la verdad, más formas de equivocarse.

Single source of truth — no significa una sola base de datos

Una empresa puede tener muchos informes, pero tiene que haber un único registro oficial de nóminas. Si no, el día de pago se convierte en teatro.

Single source of truth significa que, para cada hecho importante, sabes dónde vive la versión autorizada. Una caché, un índice de búsqueda, una read replica, una vista materializada: son copias derivadas. Pueden ser útiles, pero no deben hacerse pasar por la verdad primaria.

Los componentes stateful guardan estado y exigen cuidado: transacciones, bloqueos, recuperación, backup. Los componentes stateless son más fáciles de escalar y reemplazar, pero siguen dependiendo de un estado que vive en otro sitio.

App · statelessApp · statelessApp · statelesseasy to scale and replacePrimary DBauthoritative versionCacheSearch indexRead replicaMaterialized viewderived copiesstateful: transactions · locking · recovery · backup
A la izquierda, apps stateless; en el medio, una base de datos autorizada; a la derecha, copias derivadas, que no son la verdad.
ConceptSingle Source of Truth· un dueño por hecho
Qué es

Para cada hecho importante, está claro dónde vive su versión autorizada.

Cómo funciona

Un registro primario; la caché, el índice, la réplica y la vista son copias derivadas.

Ejemplo
Muchos informes, pero un único registro oficial de nóminas.
Ojo

No significa «una base de datos para todo»: significa «un dueño por hecho».

Relaciones
Stateful / stateless, cache, CQRS.

Cache y locking — una segunda verdad que a veces miente

El horario pegado en la nevera es cómodo, hasta que alguien mueve la reunión en el calendario del móvil.

Una cache compra velocidad a costa de frescura. La pregunta más difícil sobre la caché no es «cómo meter cosas», sino «cuándo invalidar». TTL, explicit invalidation, write-through, write-behind, cache-aside: son compromisos distintos entre complejidad, frescura y carga.

AppCachefast, maybe staleDatabasethe truth1 · read2 · on miss3 · fillTTLExplicit invalidationWrite-throughWrite-behindCache-asideinvalidation strategieshardest part: when to invalidate
Cache-aside: leer la caché; si falla, ir a la base de datos y guardar la respuesta en la caché. A la derecha: estrategias de invalidación.

Una race condition aparece cuando dos operaciones compiten por un estado. El optimistic locking dice: «los conflictos son raros, comprobaremos la versión al escribir». El pessimistic locking dice: «los conflictos son peligrosos, bloquearemos de antemano». Ambos son correctos en condiciones distintas.

Optimistic lockingA reads row (version 1)B reads row (version 1)A writes: v1 → v2 ✓B writes, expects v1 → conflictbet: conflicts are rarePessimistic lockingA takes the lockB waitsA writes, releases the lockB takes the lock, writesbet: conflicts are dangerous
A la izquierda, el optimistic locking detecta el conflicto por versión al escribir. A la derecha, el pessimistic locking obliga al segundo escritor a esperar.
ConceptCache Invalidation· la caché y cómo mantenerla fresca
Qué es

Una copia de los datos más cerca del lector: velocidad a cambio de frescura.

Cómo funciona

TTL, invalidación explícita, write-through, write-behind, cache-aside: compromisos distintos.

Ejemplo
El horario de la nevera frente al calendario del móvil.
Ojo
La pregunta principal no es «cómo meterlo», sino «cuándo tirarlo».
Relaciones
Single source of truth, eventual consistency.
ConceptOptimistic vs Pessimistic Locking· dos formas de manejar las carreras
Qué es

Dos formas de impedir que dos operaciones corrompan un estado compartido (una race condition).

Cómo funciona

Optimistic: comprobar la versión al escribir. Pessimistic: bloquear de antemano.

Ejemplo

Dos gerentes editan el mismo registro: el segundo recibe un conflicto y vuelve a leer los datos.

Ojo

El optimistic sufre con conflictos frecuentes; el pessimistic sufre con mucha contención de bloqueos.

Relaciones
Transactions, stateful components.
§ 10

La distribución resuelve problemas de escala, pero crea problemas de tiempo, orden y confianza en la red.

CAP y PACELC — la red es una fuente de incertidumbre

Un monolito es una conversación en una sola habitación. Un sistema distribuido es una correspondencia entre personas en husos horarios distintos: las cartas a veces se pierden, llegan dos veces o se retrasan.

En un sistema distribuido no puedes simplemente «llamar a una función». Entre servicios hay red, timeouts, retries, partial failure, relojes distintos, versiones de código distintas. Lo que en el monolito era una transacción local se convierte en un protocolo de coordinación.

El teorema CAP se suele resumir mal. La versión útil en la práctica: durante una network partition, eliges entre consistencia y disponibilidad. PACELC añade: incluso sin partición, sigues eligiendo entre latencia y consistencia.

Node ANode B✕network partitionCAP: during a partition, pick oneConsistencyrefuse until in syncorAvailabilityanswer, maybe stalePACELC: else (no partition), still pick oneLatencyorConsistency
El enlace entre nodos se corta: elige consistencia o disponibilidad. Sin corte, sigues eligiendo: latencia o consistencia.
ConceptCAP / PACELC· las elecciones de los sistemas distribuidos
Qué es
Durante una partición: C o A (CAP). Sin ella: L o C (PACELC).
Cómo funciona

Cada almacén y cada escenario declara explícitamente a qué renuncia.

Ejemplo

Un nodo aislado de su par: negarse a responder (C) o responder, quizá con datos viejos (A).

Ojo

«Elegimos CA» no existe en una red: las particiones ocurren; la única pregunta es qué haces entonces.

Relaciones
Consistency models, trade-off, partial failure.

Consistency models y Saga — la consistencia viene en sabores

Dos personas mirando el mismo Google Doc ven lo mismo casi al instante. Dos personas mirando una transferencia bancaria no pueden conformarse con «casi».

La strong consistency te da la verdad fresca, pero cuesta latencia y disponibilidad. La eventual consistency tolera una divergencia temporal, pero a menudo escala mejor. La causal consistency conserva la causa y el efecto: si el evento B depende de A, B no debe hacerse visible antes que A.

Eventualtemporary drift is OKCausalB never shows before AStrongalways fresh truthscales better, tolerates driftfresher truth, costs latency + availabilityshared doc: “almost” is finebank transfer
La escala de consistencia: de eventual (escala, tolera divergencia) a strong (fresca, pero más cara).

El saga pattern divide una transacción de negocio larga en pasos con compensating actions. El two-phase commit da atomicidad entre recursos, pero es caro y frágil en sistemas distribuidos reales. El arquitecto elige no el modelo «más estricto», sino el suficiente para el riesgo.

Reserve stockstep 1Charge cardstep 2Ship orderstep 3 fails ✗Release stockundo 1Refund cardundo 2compensating actions undo the steps already done2PC instead: atomic across resources, but costly and fragile
Saga: el paso 3 falló; las compensating actions deshacen los pasos 2 y 1 ya completados, en orden inverso.
ConceptConsistency Models· strong · causal · eventual
Qué es
Con qué rapidez, y en qué orden, todos ven la misma verdad.
Cómo funciona

Strong: siempre fresca. Causal: conserva el orden causa-efecto. Eventual: se pone al día después.

Ejemplo

Un documento compartido: «casi al instante» vale. Una transferencia bancaria: no.

Ojo

Strong paga en latencia y disponibilidad; eventual paga en divergencia temporal.

Relaciones
CAP / PACELC, cache, CQRS.
PatternSaga· una transacción larga con compensaciones
Problema

Una operación de negocio abarca varios servicios; no hay una transacción compartida.

Idea

Una cadena de pasos; si uno falla, las compensating actions deshacen lo hecho.

Ejemplo

Reservar stock → cobrar → falla el envío → reembolsar → liberar la reserva.

Coste

Cada paso necesita una compensación; los estados intermedios son visibles.

Cuándo usarlo

En lugar del two-phase commit, que es costoso y frágil a través de una red.

Relaciones
Eventual consistency, idempotency, microservices.
§ 11

Los microservicios no arreglan un mal diseño. Convierten problemas locales en problemas distribuidos.

Modular monolith — un comienzo a menudo infravalorado

Un almacén bien organizado es más rápido que diez pequeños si el mismo repartidor tiene que ir de uno a otro de todos modos.

Un monolito no es un insulto. Un mal monolito es una maraña de dependencias sucias. Un buen modular monolith tiene fronteras internas estrictas, dominios separados, interfaces explícitas y una sola deployment unit. Para un equipo pequeño suele ser el mejor punto de partida.

Los microservicios ayudan cuando necesitas releases independientes, equipos autónomos, perfiles de escalado distintos, aislamiento de fallos o stacks tecnológicos distintos. El precio: llamadas de red, observability, transacciones distribuidas, sobrecarga de DevOps, versionado, seguridad entre servicios.

Modular monolithBillingmodule · explicit APIIdentitymodule · explicit APICatalogmodule · explicit APIone deploy unit · in-process callsMicroservicesBillingserviceown DBIdentityserviceown DBCatalogserviceown DBnetwork · versioning · ops overhead
A la izquierda, una unidad de despliegue con muros fuertes por dentro. A la derecha, servicios separados con sus propias bases de datos y la factura de la red.
PatternModular Monolith· un despliegue, muros fuertes
Problema
El monolito se convierte en una maraña de dependencias sucias.
Idea

Fronteras internas estrictas e interfaces explícitas, pero una sola unidad de despliegue.

Ejemplo

Módulos de facturación, identidad y catálogo en una sola app, que hablan mediante APIs de módulo.

Coste

Requiere disciplina en las fronteras; escala y se despliega como un todo.

Cuándo usarlo

Un equipo pequeño, un producto temprano. Microservices: cuando necesitas releases independientes, equipos autónomos, perfiles de carga distintos, aislamiento de fallos.

Relaciones
Bounded context, microservices, Strangler Fig.

Distributed monolith y Strangler Fig — lo peor de ambos mundos, y la salida

Es como vivir en apartamentos separados pero ir al de al lado a por cada cuchara.

Un distributed monolith parece microservicios, pero los servicios no son autónomos: esquema de base de datos compartido, cadenas de llamadas síncronas, releases que solo salen juntos, cambios que obligan a tocar a todos. El equipo paga el coste de la distribución sin obtener la independencia.

Service AService BService CsyncsyncShared schemaone databasereleases only together · pays for distribution, gets no independence
Distributed monolith: servicios atados por una cadena síncrona y un esquema compartido; sin independencia.

El Strangler Fig pattern permite migrar con cuidado: envolver el sistema viejo, extraer capacidades poco a poco, cortar por fronteras de negocio reales, no por tablas.

ClientFacaderoutes requestsLegacy systemshrinks step by stepBillingCatalogAccountsnew services growcut by business capability, not by tables
Strangler Fig: una fachada delante del sistema viejo traslada las capacidades a servicios nuevos una a una, hasta que el viejo desaparece.
Anti-patternDistributed Monolith· microservicios solo de nombre
Señales

Esquema de base de datos compartido, cadenas de llamadas síncronas, releases solo juntos, cada cambio toca a todos.

Por qué duele
Pagas por la distribución y no obtienes independencia.
Ejemplo
Apartamentos separados, pero al de al lado por cada cuchara.
Salida

Datos propios por servicio, enlaces asíncronos, fronteras por significado de negocio, o volver a un modular monolith.

Relaciones
Modular monolith, bounded context, sync vs async.
PatternStrangler Fig· reemplazo gradual
Problema
El sistema viejo no se puede reescribir de una vez.
Idea

Envolverlo en una fachada y mover poco a poco las capacidades a servicios nuevos.

Ejemplo

Extraer primero facturación, luego catálogo: la fachada enruta las peticiones.

Coste
Dos sistemas conviven durante mucho tiempo.
Cuándo usarlo
Migrar un sistema vivo sin una «gran reescritura».
Relaciones
Corta por bounded contexts, no por tablas.
§ 12

Sync acopla los sistemas en el tiempo. Async rompe ese acoplamiento, pero trae retrasos, duplicados y complejidad de orden.

Una llamada de teléfono exige que ambos lados estén libres ahora. Una carta se puede leer luego, pero puede perderse, retrasarse o exigir respuesta.

Una llamada síncrona (sync) es fácil de razonar: envías, recibes respuesta. Pero si el receptor es lento o no está disponible, sufre el emisor. Async mediante una queue o pub/sub permite aguantar fallos y picos de carga, pero exige otro modelo mental.

Una cola suele repartir el trabajo entre consumidores. Pub/sub difunde un evento a muchos suscriptores. Kafka, RabbitMQ, SQS, Redis Streams: herramientas distintas con modelos distintos de orden, durabilidad, replay y operación.

SyncSenderReceiversender waits; receiver down = sender suffersQueueProducerQueueone consumer eachWorker 1Worker 2Pub/subPublisherTopiccopy to everyoneSubscriber 1Subscriber 2Subscriber 3
Sync: el emisor espera. Queue: cada mensaje va a un worker. Pub/sub: cada evento llega a todos los suscriptores.
PatternQueue vs Pub/Sub· reparto de trabajo vs difusión
Problema

Una llamada sync acopla los sistemas en el tiempo: el receptor cae, sufre el emisor.

Idea

Una cola reparte el trabajo entre consumidores; pub/sub envía un evento a cada suscriptor.

Ejemplo

Kafka, RabbitMQ, SQS, Redis Streams: orden, durabilidad y replay distintos.

Coste
Retrasos, duplicados, complejidad de orden.
Cuándo usarlo

El emisor no necesita el resultado ahora mismo; hay que aguantar fallos y picos.

Relaciones
At-least-once delivery, backpressure, idempotency.

At-least-once delivery — exactly-once casi siempre es marketing

Si una carta se envía dos veces, una contabilidad decente no debería pagar el sueldo dos veces.

En la práctica diseñas para at-least-once delivery más un idempotent consumer. Un mensaje puede llegar dos veces; el handler tiene que sobrevivir a eso. Una dead letter queue es para los mensajes que no se pudieron procesar tras un número razonable de intentos.

Backpressure es la señal «el receptor no da abasto». Sin ella, el sistema acepta todo con elegancia y luego muere por dentro.

ProducerQueueat-least-oncemay arrive twiceConsumerdedupe by msg idEffectexactly onceafter N retriesDead letter queuebackpressure: “slow down”“exactly-once delivery” is almost always marketing
Un mensaje puede llegar dos veces: el consumidor descarta los duplicados por id. Tras N fallos va a la DLQ. El backpressure pide al emisor que baje el ritmo.
ConceptAt-least-once Delivery· más DLQ y backpressure
Qué es
Se garantiza que un mensaje llega, pero quizá más de una vez.
Cómo funciona

Un idempotent consumer descarta duplicados; una dead letter queue recoge mensajes tras N fallos; el backpressure dice «no doy abasto».

Ejemplo
Un mensaje duplicado de «pagar el sueldo» no lo paga dos veces.
Ojo

«Exactly-once» casi siempre es marketing; sin backpressure el sistema acepta todo y muere por dentro.

Relaciones
Idempotency, queue / pub/sub, reliability.
§ 13

«Hazlo rápido» no es un requisito. Un requisito suena a latencia, throughput, percentiles y perfil de carga.

Tail Latency — el tiempo de respuesta medio casi siempre miente

Si nueve personas recibieron su comida en un minuto y la décima esperó una hora, el promedio parece tolerable. La décima no opina lo mismo.

Este es el concepto de tail latency. Primero, tres palabras. Latency es el retraso de una sola operación. Throughput es cuántas operaciones maneja el sistema por unidad de tiempo. Los percentiles muestran la distribución: p50 es la mediana, p95 significa que el 95 % de las peticiones son más rápidas que ese valor, p99 es la cola.

El usuario no siente el promedio: siente la cola. La tail latency importa sobre todo en sistemas donde una pantalla depende de varias llamadas al backend: la probabilidad de una respuesta lenta se acumula.

requestsp50 · medianp95p99tail latencylatency →one screen = many backend calls → the tail adds up
La mayoría de las peticiones son rápidas, pero la cola (p95, p99) es larga. El promedio la esconde; el usuario la siente.
ConceptTail Latency· p95 / p99
Problema

El tiempo de respuesta medio parece bien mientras algunos usuarios esperan muchísimo.

Idea
Mira los percentiles: p50 es la mediana, p95 y p99 son la cola.
Ejemplo

Una pantalla se construye con cinco llamadas al backend: si una cualquiera cae en la cola, toda la pantalla va lenta.

Coste

Recoges una distribución, no un número; necesitas histogramas en tus métricas.

Cuándo usarlo

Cada vez que conviertes «rápido» en un requisito o montas un SLO.

Relaciones

La base de los SLOs; crece durante una retry storm; se ve a través de la observability.

Profiling — haz profile antes de optimizar

Arreglar el rendimiento sin un profile es como tratar a un paciente a partir de una foto de sus zapatos.

Esta es la práctica del profiling: primero mide, luego optimiza. Consultas N+1, round trips de más, un mal índice, serialización, contención de bloqueos, pausas de GC, caché fría: todo parece «lento», pero se cura de formas distintas.

La Ley de Amdahl te recuerda: la aceleración está limitada por la parte del sistema que realmente optimizas. La Ley de Little ayuda a pensar en colas: más latencia con el mismo throughput significa más trabajo en curso dentro del sistema.

MeasureProfileFind hotspotN+1 · index · locksFix one thingre-measure · no profile, no optimisationAmdahl’s Lawoptimised partthe rest of the system · sets the limitLittle’s Law: work in progress = throughput × latency
El ciclo: medir → hacer profile → encontrar el hotspot → arreglar una cosa → medir otra vez. Debajo, dos leyes que acotan tus expectativas.
PracticeProfiling· medir antes de optimizar
Problema

El equipo «acelera» el sitio equivocado: pasa una semana y el sistema no va más rápido.

Idea

Un profile muestra dónde se va realmente el tiempo. Arregla solo el hotspot.

Ejemplo

La «página lenta» resulta ser una consulta N+1, no un lenguaje lento: se arregla con una consulta y un join.

Coste

Tiempo de medición y de herramientas; necesitas un perfil de carga reproducible.

Cuándo usarlo

Antes de cualquier optimización. Sin profile, no hay optimización.

Relaciones

La Ley de Amdahl es el techo de aceleración; la Ley de Little une latencia, throughput y colas.

§ 14

La escalabilidad es la capacidad de crecer en carga y en funcionalidades sin reconstruir el sistema desde cero.

Vertical vs Horizontal Scaling — compran cosas distintas

Puedes comprar un camión grande. Puedes comprar diez pequeños. El primero es más simple, los segundos más flexibles, pero requieren un despachador.

El vertical scaling (scale up) consiste en hacer más fuerte una máquina. Es simple mientras haya margen. El horizontal scaling (scale out) consiste en añadir más instancias. Es más flexible, pero requiere una capa de aplicación stateless, load balancing, una estrategia de estado compartido y observability.

Las bases de datos escalan peor que las aplicaciones. Las read replicas ayudan con las lecturas, no con las escrituras. El sharding reparte los datos pero te obliga a elegir una shard key. Una mala shard key convierte el escalado en un desequilibrio de carga.

Vertical · scale upceilingappbigger boxmore CPU / RAMHorizontal · scale outLoad balancerappstatelessappstatelessappstatelessRead replicashelp reads, not writesShardinga bad shard key = load skew
Izquierda: una máquina crece hasta chocar con el techo del hardware. Derecha: un load balancer y muchas copias stateless idénticas. Debajo: dos formas de escalar la base de datos.
ConceptVertical vs Horizontal Scaling· scale up / scale out
Problema
La carga crece y una sola máquina pronto no bastará.
Idea

Vertical: hacer la máquina más fuerte. Horizontal: poner más máquinas detrás de un load balancer.

Ejemplo

Una app stateless es fácil de multiplicar; la base de datos es más difícil: read replicas para lecturas, sharding por shard key para escrituras.

Coste

Vertical choca con un techo. Horizontal necesita una capa stateless, load balancing, una estrategia de estado compartido y observability.

Cuándo usarlo

Vertical mientras haya margen. Horizontal cuando necesitas crecer más allá.

Relaciones

El eje X del Scale Cube; los componentes stateless del módulo de estado; Single Source of Truth.

Scale Cube — escalar funcionalidades importa tanto como escalar carga

Una ciudad no crece solo en población. Crece en escuelas, hospitales, carreteras y normas.

El sistema tiene que absorber no solo más tráfico, sino más superficie de producto. Si cada nueva funcionalidad exige reescribir un God-service compartido, el sistema no escala a nivel organizativo.

El modelo útil aquí es el scaling cube: el eje X es clonar, el eje Y es dividir por función, el eje Z es particionar por datos o tenants.

X-axiscloneappappappY-axissplit by functionbillingcatalogidentityZ-axispartition by datatenants A–Htenants I–Ptenants Q–Z
Tres ejes de crecimiento: X, copias de una misma app; Y, funciones distintas en partes distintas; Z, datos o clientes repartidos en particiones.
ConceptScale Cube· ejes X / Y / Z
Problema

La gente solo piensa en el tráfico, pero el sistema se rompe por el crecimiento de funcionalidades: todo vive en un God-service.

Idea

Crecer por tres ejes: X, clonar; Y, dividir por función; Z, dividir por datos o tenants.

Ejemplo

X: tres copias de la app. Y: facturación, catálogo e identidad por separado. Z: tenants A–H en un shard, I–P en otro.

Coste
Cada eje añade fronteras que hay que sostener y observar.
Cuándo usarlo

Cuando preguntas «qué se rompe primero» y la respuesta no es solo la CPU.

Relaciones

El eje Y es Bounded Context y microservicios; el eje Z es sharding; ojo con la Conway's Law.

§ 15

Un sistema fiable no es uno donde nada se rompe. Un sistema fiable sabe qué hacer cuando algo se rompe.

Retry, Circuit Breaker, Bulkhead — un retry sin estrategia es un ataque contra ti mismo

Si una puerta no se abre, llamar una vez es razonable. Llamar mil veces por segundo ya es un problema para la puerta y para los vecinos.

El Retry sirve para fallos transitorios. Pero los retries necesitan un límite, un timeout, exponential backoff y jitter. Si no, una caída parcial se convierte en una retry storm.

Un circuit breaker deja de llamar temporalmente a una dependencia atascada. El bulkhead pattern aísla recursos: si un downstream muere, no se lleva consigo todos tus threads de worker y pools de conexiones.

retry = limit · timeout · exponential backoff · jittertry 1try 2try 3ok~1s~2s~4s + jitterno limit, no jitter → a retry stormService · bulkheadspool → paymentspool → searchCircuit breakeropen: fail fastPayments APIstuck / timing outSearch API
Arriba: retries con una pausa creciente y un desfase aleatorio. Abajo: pools separados (bulkheads) y un circuit breaker: una Payments API atascada no arrastra consigo a la búsqueda.
PatternRetry + Circuit Breaker + Bulkhead· resistencia a dependencias que fallan
Problema

Una dependencia se ralentiza o muere; los retries sin cabeza la rematan y se comen todos los recursos del servicio.

Idea

Retry con límite, timeout, backoff y jitter. Circuit breaker: dejar de llamar a lo que está muerto. Bulkhead: pools separados para que el fallo no se extienda.

Ejemplo

La API de pagos se cuelga: el breaker se abre y falla rápido, mientras el pool de búsqueda sigue funcionando.

Coste

Más ajustes y estados; hay que decidir cómo se degrada el sistema cuando una dependencia está caída.

Cuándo usarlo
Cualquier llamada de red a algo que pueda colgarse.
Relaciones

Los retries solo son seguros con Idempotency; ligado a at-least-once y backpressure.

SLI / SLO / SLA — los SLOs convierten la fiabilidad en un contrato

«Haremos lo posible» no es un horario de trenes. Un horario dice qué cuenta como normal y qué cuenta como fallo.

SLI es lo que mides: tasa de éxito, latencia, frescura. SLO es el objetivo: 99,9 % de peticiones exitosas en 30 días. SLA es una promesa al cliente con consecuencias.

El error budget te dice cuánta falta de fiabilidad puedes gastar. Si el presupuesto se agota, el equipo deja de perseguir funcionalidades y arregla la fiabilidad. Esa es la versión, en lenguaje de negocio, de la calidad de ingeniería.

SLI · indicatore.g. success rateSLO · objective99.9% over 30 daysSLA · agreementpromise + penaltyError budget = 100% − SLO = 0.1% ≈ 43 min per 30 daysspent on incidentsleftBudget leftship featuresBudget burnedstop features, fix reliability
El SLI es la medición, el SLO el objetivo, el SLA la promesa al cliente. Con un SLO del 99,9 % el error budget es el 0,1 %: unos 43 minutos por 30 días.
ConceptSLI / SLO / SLA· error budget
Problema

Nadie midió «fiable», así que la discusión funcionalidades-vs-calidad no termina nunca.

Idea

Medir (SLI), acordar un objetivo (SLO), mantener aparte la promesa al cliente (SLA). La distancia hasta el 100 % es el error budget.

Ejemplo

SLO: 99,9 % de peticiones exitosas en 30 días. Presupuesto agotado: las funcionalidades se pausan.

Coste

Hay que elegir con honestidad qué medir y mantener la regla cuando se acaba el presupuesto.

Cuándo usarlo

Cuando hay que hablar de fiabilidad con el negocio en un solo idioma.

Relaciones

Los SLIs suelen construirse sobre la Tail Latency; las alertas saltan por síntomas; es un NFR en números.

§ 16

No se puede añadir seguridad justo antes del release. Tiene que estar incorporada al modelo de acceso, a los datos, a la infraestructura y a los procesos.

Authentication vs Authorization — cosas distintas

Un pasaporte prueba quién eres. Un billete prueba adónde puedes ir. Uno no sustituye al otro.

Authentication (AuthN) responde a «¿quién es?». Authorization (AuthZ) responde a «¿qué se le permite hacer?». Confundirlas es peligroso: un usuario puede haber iniciado sesión correctamente y aun así no tener derecho a leer la factura de otro.

RBAC concede permisos mediante roles. ABAC considera atributos: dueño del recurso, tenant, región, estado del objeto. La auth basada en sesión es más fácil de revocar; JWT es más fácil de verificar sin base de datos, pero más difícil de revocar. La elección depende de las amenazas y del ciclo de vida.

passportticketRequesttoken / sessionAuthenticationwho is this?Authorizationwhat may they do?Resourceinvoice #42Session vs JWTrevoke vs verifyRBAC / ABACroles / attributes403not your invoice
Una petición pasa por dos pasos distintos: authentication («¿quién eres?»: el pasaporte) y authorization («¿qué puedes hacer?»: el billete). Haber iniciado sesión no significa tener permiso.
ConceptAuthentication vs Authorization· AuthN / AuthZ
Problema

«El usuario ha iniciado sesión» se confunde con «el usuario tiene permiso», y acaba leyendo datos ajenos.

Idea

Dos pasos separados: AuthN establece la identidad, AuthZ comprueba el derecho a un recurso concreto.

Ejemplo

Un cliente con sesión iniciada pide la factura #42 de otro cliente: AuthZ debe responder 403.

Coste

Elegir un modelo: RBAC es más simple, ABAC más preciso; las sesiones se revocan fácil, los JWT se verifican fácil pero se revocan mal.

Cuándo usarlo
En cualquier sistema donde los datos tengan dueño.
Relaciones

Una capa de la defense in depth; las amenazas de spoofing y elevation of privilege de STRIDE.

Threat Modeling — paranoia profesional

Un buen arquitecto piensa como un atacante no porque desconfíe de la gente, sino porque confía en la realidad.

El threat modeling es una búsqueda sistemática de amenazas antes del ataque. STRIDE ayuda a encontrarlas: spoofing, tampering, repudiation, information disclosure, denial of service, elevation of privilege. La defense in depth significa varias capas de protección: validación de entrada, authz, cifrado, audit log, rate limiting, least privilege.

La gestión de secretos no es «poner la clave en env y olvidarse». Hay que entender la rotación, el acceso, la auditoría, el blast radius y qué pasa durante una fuga.

STRIDE · find threatsSpoofingfake identityTamperingaltered dataRepudiation“it wasn’t me”Info disclosuredata leakDoSdenial of serviceElevationof privilegeDefense in depthrate limitinginput validationauthzleast privilegeencryptionaudit log
Izquierda: las seis clases de amenaza de STRIDE por las que pasar cada componente. Derecha: protección por capas; si una capa cae, las demás siguen en pie.
PracticeThreat Modeling· STRIDE, defense in depth
Problema

La seguridad se recuerda justo antes del release, cuando ya es tarde para cambiar el modelo de acceso.

Idea

Pasar el componente por STRIDE y poner varias capas de protección, no una única cerradura «principal».

Ejemplo

Una clave filtrada: qué abre (blast radius), qué tan rápido puedes rotarla, dónde aparece en la auditoría.

Coste
Tiempo para la revisión y disciplina en la gestión de secretos.
Cuándo usarlo
En el diseño de cada componente e integración nuevos.
Relaciones

AuthN vs AuthZ es una capa de protección; la observability y el audit log permiten detectar un ataque.

§ 17

No se puede arreglar lo que no se ve. El sistema tiene que explicar su propio estado sin arqueología en el código.

Observability — el monitoring te dice qué falla, la observability te ayuda a entender por qué

La luz de «check engine» es útil, pero el mecánico aún necesita indicadores, historial y herramientas de diagnóstico.

El monitoring responde a «algo va mal». La observability responde a «por qué». Los tres pilares de la observability: logs, metrics, traces. El structured logging permite consultar los logs. Las métricas muestran agregados. El distributed tracing sigue el camino de una petición por los servicios.

Un correlation ID es una cosita que salva noches: un único ID de petición fluye por gateway, servicio, cola, worker y downstream.

Logsstructured · queryableMetricsaggregatesTracesa request’s pathCorrelation ID: one request id through every hopGatewayreq-7f3aServicereq-7f3aQueuereq-7f3aWorkerreq-7f3aDownstreamreq-7f3amonitoring: something is wrong · observability: why
Tres pilares: logs, metrics, traces. Un correlation ID pasa por cada salto, así que se puede reconstruir todo el camino de la petición.
ConceptObservability· logs · metrics · traces, correlation ID
Problema

Algo se rompió de noche y la causa se busca con arqueología en el código.

Idea

El sistema explica su propio estado: logs estructurados, métricas agregadas, traces del camino de la petición.

Ejemplo

Con el request id req-7f3a encuentras la petición en el gateway, en la cola y en el worker, y ves dónde se atascó.

Coste

Herramientas, almacenamiento de datos y la disciplina de pasar el ID a todas partes.

Cuándo usarlo

Desde el primer día, sobre todo en un sistema distribuido con colas.

Relaciones

La fuente de datos de los SLIs y del Symptom-based Alerting; sin ella, el Profiling va a ciegas.

Symptom-based Alerting — alerta por síntomas

Al usuario no le importa que la CPU esté al 92 %. Le importa que el checkout no funciona.

Una buena alerta habla del dolor del usuario; esto es el symptom-based alerting: tasa de errores, latencia, pagos fallidos, datos obsoletos. Una mala alerta habla de una causa que puede ser perfectamente normal. Si las alertas hacen ruido, el equipo deja de confiar en ellas.

Un runbook responde a «qué hacer a las 3 de la madrugada». Un post-mortem responde a «cómo nos aseguramos de que no vuelva a pasar». Blameless: el objetivo es mejorar el sistema, no encontrar al culpable.

causessymptomsCPU 92%disk 70%GC pausesoften normal → noisenoisy alerts lose trusterror rate ↑latency ↑failed paymentsstale dataAlertuser painRunbookwhat to do at 3 a.m.Post-mortemblameless · fix the system
Las causas, como la CPU, suelen ser normales y hacen ruido. Las alertas se construyen sobre síntomas de dolor del usuario, seguidas de un runbook y un post-mortem blameless.
PracticeSymptom-based Alerting· runbook, post-mortem blameless
Problema

Las alertas saltan por causas, el equipo se acostumbra al ruido y se le pasa una caída real.

Idea

Despertar a una persona solo por dolor del usuario; cada alerta lleva su runbook.

Ejemplo

No «CPU al 92 %», sino «subieron los pagos fallidos», más un runbook: qué comprobar primero.

Coste
Hay que conocer tus síntomas y mantener los runbooks al día.
Cuándo usarlo

Para todo lo que el ingeniero de guardia tiene que arreglar de noche.

Relaciones

Los síntomas son SLIs; el post-mortem es la misma cultura escrita que los ADRs y los RFCs.

§ 18

Una decisión arquitectónica sin registrar desaparece junto con el contexto de su autor.

ADR — un Architecture Decision Record vence a la memoria

Un acuerdo oral vale hasta las primeras vacaciones, la primera renuncia o la primera discusión seis meses después.

Un Architecture Decision Record recoge el contexto, la decisión, las alternativas y las consecuencias. Un ADR no tiene que ser una novela. Un buen ADR responde: qué problema resolvíamos, qué elegimos, por qué no elegimos las alternativas, cuándo lo revisamos.

La documentación no está para la auditoría: está para el siguiente cambio. Un ingeniero nuevo tiene que entender no solo el «cómo», sino el «por qué».

New engineer6 months laterADR-007 · one decisionContext · what problemDecision · what we choseAlternatives · why not othersConsequences · what it costsRevisit · when to re-checkNext changeknows the why
Un ADR, una decisión: contexto, elección, alternativas, consecuencias y cuándo revisarla. Seis meses después una persona nueva conoce el «por qué».
ToolADR· Architecture Decision Record
Problema

La decisión vivía en la cabeza del autor; el autor se fue y nadie sabe por qué se hizo así.

Idea

Un registro corto por decisión: contexto, decisión, alternativas, consecuencias.

Ejemplo

«Elegimos PostgreSQL, no MongoDB: necesitamos transacciones; se revisa si aparecen cargas de tipo documento.»

Coste

Media hora de escritura. Más barato que la discusión seis meses después.

Cuándo usarlo
Para decisiones caras de revertir.
Relaciones

Registra Trade-offs y deuda; va junto al RFC; parte de Learning in Public.

C4 Model — un diagrama es una herramienta de trabajo, no una decoración

Un mapa de metro no muestra los cables ni los tornillos. Muestra líneas y transbordos. Eso basta para no perderse.

El C4 model te da cuatro niveles: Context, Container, Component, Code. Los tres primeros suelen bastar. Un sequence diagram es útil cuando importa el orden de las interacciones. El UML completo rara vez hace falta; los diagramas sueltos, sí.

La living documentation vive junto al código, se actualiza en el PR y se revisa. Un documento en un wiki olvidado se convierte enseguida en ficción histórica.

zoom in →Contextsystem + peopleContainerapps · DBs · queuesComponentmodules insideCodeclasses · rarelyLiving documentationnext to the code · updated in the PR · reviewedSequence diagramwhen the order mattersForgotten wiki→ historical fiction
Los cuatro niveles de zoom de C4; suelen bastar tres. La documentación viva está junto al código; un wiki olvidado se convierte en ficción.
ToolC4 Model· documentación viva
Problema

Los diagramas se dibujan para quedar bien: todo en una imagen, y un mes después miente.

Idea

Dibujar por nivel de zoom: Context → Container → Component (→ Code, rara vez).

Ejemplo

Context: el sistema, los usuarios, los servicios externos. Container: web, API, base de datos, cola.

Coste
Los diagramas hay que actualizarlos en el mismo PR que el código.
Cuándo usarlo

Cuando hay que explicar el sistema a una persona nueva o a otro equipo.

Relaciones

Muestra los Bounded Contexts y las fronteras; un sequence diagram cubre el orden de las llamadas.

§ 19

El arquitecto habla con ingenieros, producto, negocio, seguridad y legal. Cada audiencia oye un idioma distinto.

Risk Translation — traduce el riesgo al idioma de la audiencia

Un médico no usa solo nombres en latín con el paciente. Explica qué va a doler, cuánto dura el tratamiento y qué hay que evitar.

Esta es la práctica de la risk translation. A un ingeniero le puedes decir: «no tenemos idempotencia en el callback de pago». El negocio necesita oír: «si el webhook reintenta, podemos cobrar dos veces o enviar el producto dos veces; es un riesgo financiero y de reputación».

El stakeholder mapping te ayuda a ver a quién le importa qué: producto quiere time-to-market, seguridad quiere reducir riesgo, finanzas quiere un coste predecible, soporte quiere un comportamiento comprensible, ingeniería quiere mantenibilidad.

One technical riskno idempotency on the payment callbackTo engineersadd an idempotency keyTo businessmay charge twice → money + trustStakeholder map · who cares about whatProducttime-to-marketSecurityless riskFinancepredictable costSupportclear behaviourEngineeringmaintainability
El mismo riesgo suena distinto para los ingenieros y para el negocio. El mapa de stakeholders muestra qué importa a cada uno.
PracticeRisk Translation· stakeholder mapping
Problema
Un riesgo técnico suena a jerga y el negocio no lo oye.
Idea

Traducir el riesgo a consecuencias que importan a esta audiencia concreta.

Ejemplo

«Sin idempotencia en el callback» → «podemos cobrar dos veces: un riesgo financiero y de reputación».

Coste
Hay que saber qué le importa a cada stakeholder y hablar su idioma.
Cuándo usarlo
Cada vez que una decisión depende de gente ajena a ingeniería.
Relaciones

El ejemplo es Idempotency; el lado de negocio son los NFRs y el cost of delay.

RFC — una propuesta escrita baja la temperatura de una discusión

Una discusión en la pizarra suele ganarla el que más grita. Una propuesta escrita obliga a que los argumentos se sostengan aparte de la voz.

Un RFC (Request for Comments) describe el problema, las restricciones, las opciones, la solución elegida, los riesgos y el plan de despliegue. Un buen RFC invita a la crítica antes de que la decisión se convierta en norma.

Disagree and commit solo funciona después de una discusión honesta. Si no se escuchó al equipo, eso no es commit: es supresión.

RFC · a written proposalProblemConstraintsOptionsDecisionRisksRolloutDraftarguments on paperReviewcriticism welcomeDecidebefore it’s policyDisagree & commitonly if heardnot heard ≠ commit — it’s suppression
Las secciones de un RFC y el camino de una decisión: borrador → revisión con críticas → decidir → disagree and commit, pero solo si todos fueron escuchados.
PracticeRFC· Request for Comments, disagree and commit
Problema

La discusión en la pizarra la gana el que más grita, no el que más razón tiene.

Idea

Por escrito: problema, restricciones, opciones, decisión, riesgos, despliegue. La crítica llega antes de la decisión.

Ejemplo

Antes de pasar a una cola nueva: un RFC, una semana de comentarios, luego una decisión y un ADR.

Coste

Más lento que «decidir en una llamada»; necesita un responsable que lo lleve hasta una decisión.

Cuándo usarlo

Para decisiones que afectan a varios equipos o son caras de revertir.

Relaciones

El resultado va a un ADR; una herramienta de Influence without Authority.

§ 20

El arquitecto suele seguir siendo un contribuidor individual. Su autoridad viene de la claridad de pensamiento, la confianza y la capacidad de hacer más fuerte al equipo.

Influence without Authority

Un director de orquesta no toca todos los instrumentos, pero sin él la orquesta pronto se convierte en un conjunto de talentos que tocan piezas distintas.

Este es el concepto de influence without authority. El arquitecto no debe convertirse en un cuello de botella para cada decisión. Su trabajo es fijar principios, explicar fronteras, hacer crecer a la gente e intervenir donde el coste de un error es alto.

El mentoring de un arquitecto no es «haz lo que yo hago». Es enseñar las preguntas: qué alternativas has visto, a qué renunciaste, cómo vas a probar el riesgo, dónde termina la responsabilidad.

BottleneckArchitectteam Ateam Bteam Cevery decision waits in lineMultiplierArchitectprinciplesboundariesquestionsTeams decidegrown by mentoring
Izquierda: el arquitecto como cuello de botella; cada decisión espera en la cola. Derecha: un multiplicador; principios, fronteras y preguntas, mientras los equipos deciden.
ConceptInfluence without Authority· mentoring con preguntas
Problema

El arquitecto decide todo personalmente y se convierte en una cola para cada equipo.

Idea
Influir mediante principios, fronteras y preguntas, no con órdenes.
Ejemplo

En lugar de «hazlo así»: «¿qué alternativas viste y cómo vas a probar el riesgo?»

Coste

Más lento en el momento; necesita una confianza que lleva años construir.

Cuándo usarlo

Siempre que no tengas subordinados directos pero aun así haya que tomar decisiones.

Relaciones

Funciona a través de RFCs y ADRs; lo opuesto es el Ivory Tower Architect.

Delegation with Guardrails — delegar no es transferir la responsabilidad

Un capitán puede ceder el timón, pero no puede decir que el rumbo del barco ya no es asunto suyo.

Una parte de las decisiones arquitectónicas deben tomarlas los equipos. Si no, el arquitecto se convierte en una cola. Pero tiene que haber guardrails: principios, revisión, ADRs, restricciones de plataforma, quality gates.

El arquitecto interviene cuando una decisión es irreversible, rompe invariantes del sistema, crea riesgo de seguridad o afecta a varios equipos.

Guardrails: principles · review · ADR · gatesTeam decidesmost decisionsplatform constraints · quality gatesarchitect steps in if:irreversiblebreaks invariantssecurity riskmany teams affectedescalate
El equipo decide por su cuenta dentro de los guardrails. El arquitecto interviene solo ante las cuatro señales de la derecha.
PracticeDelegation with Guardrails· la responsabilidad se queda
Problema

O todo pasa por el arquitecto (una cola), o nadie es dueño del rumbo.

Idea

Los equipos deciden por su cuenta dentro de los guardrails; el arquitecto es dueño del rumbo e interviene ante señales claras.

Ejemplo

El equipo elige su librería de logging; cambiar el modelo de tenancy solo se hace con el arquitecto.

Coste

Los guardrails hay que formularlos, escribirlos y comprobarlos automáticamente cuando se pueda.

Cuándo usarlo
Cuando hay más de un equipo y un solo arquitecto.
Relaciones

La señal «irreversible» viene de Reversible vs Irreversible; los guardrails son ADRs y quality gates.

§ 21

La arquitectura solo tiene sentido en el contexto de un objetivo de negocio. Si no, es estética de ingeniería cara.

Non-functional Requirements — también son requisitos de negocio

Para una tienda, «el checkout funciona en el Black Friday» no es un detalle técnico: es dinero.

Los non-functional requirements (NFRs) —rendimiento, disponibilidad, seguridad, compliance, operabilidad— no son «caprichos técnicos». Son propiedades del producto. El arquitecto los traduce a impacto de negocio: ingresos perdidos, riesgo regulatorio, coste de soporte, velocidad de lanzamiento al mercado.

El cost of delay te ayuda a hablar no solo del coste de hacer el trabajo, sino del coste de esperar. A veces hace falta una inversión arquitectónica sin ROI inmediato, porque sin ella las siguientes funcionalidades empiezan a salir más caras.

PerformanceAvailabilitySecurityComplianceOperabilityBusiness impactthe architect translateslost revenueregulatory risksupport costspeed to marketCost of delay: waiting has a price, not only building
Izquierda: los requisitos no funcionales. Derecha: en qué se convierten para el negocio. El arquitecto es el traductor del medio.
ConceptNon-functional Requirements· NFRs, cost of delay
Problema

La calidad del sistema se trata como un «capricho técnico» y se sigue posponiendo.

Idea

Los NFRs son propiedades del producto; háblalos en ingresos, riesgo y coste.

Ejemplo
«El checkout sobrevive al Black Friday» es dinero, no un detalle.
Coste
Hay que estimar el impacto en números, aunque sea a grandes rasgos.
Cuándo usarlo

Cuando el trabajo arquitectónico compite con las funcionalidades por el tiempo.

Relaciones

En números: SLOs; el trabajo pospuesto: Technical Debt; el idioma: Risk Translation.

Build vs Buy — no es cuestión de orgullo

No toda empresa debería construir su propia central eléctrica solo para encender la luz.

Construir te da control y diferenciación. Comprar te da velocidad y reduce la carga operativa. El vendor lock-in es un riesgo real, pero por sí solo no es un argumento contra comprar. La pregunta: ¿cuánto cuesta salir si el proveedor cambia el precio, la API o la calidad?

El arquitecto ayuda a producto a ver el capability map: qué capacidades son el núcleo del negocio y cuáles conviene comprar.

Build · control + differentiationcore domainwhat customers pay you forBuy · speed + less opsauthpaymentsemailmonitoringVendor lock-in → ask about the exit costif the vendor changes price, API or quality — how hard is it to leave?
Construye el núcleo por el que los clientes te pagan; compra lo commodity. Para todo lo que compres, la pregunta clave es el coste de salida.
ConceptBuild vs Buy· capability map, vendor lock-in
Problema
Se construye por orgullo, o se compra todo sin plan de salida.
Idea

Construir lo que diferencia al negocio; comprar lo commodity. Para todo lo comprado, estimar el coste de salida.

Ejemplo

Tu propio motor de dominio: construir; envío de email o pagos: normalmente comprar.

Coste

Construir: tiempo y mantenimiento para siempre. Comprar: dependencia del precio, la API y la calidad del proveedor.

Cuándo usarlo
Antes de cada «escribamos el nuestro».
Relaciones

La trampa es el síndrome NIH; Dependency Inversion ayuda a aislar al proveedor.

§ 22

Cuando el código lo escriben agentes, el valor del arquitecto se desplaza hacia la especificación, el pensamiento arquitectónico y el control de calidad.

Specification-driven Development — la calidad de la spec se convierte en el cuello de botella

Si la cuadrilla de obra se vuelve diez veces más rápida, la restricción que manda deja de ser la velocidad de los ladrillos. Pasa a ser la calidad de los planos.

Los agentes de IA aceleran la implementación, pero no eliminan la arquitectura. Una tarea mal planteada simplemente se convierte en mal código más rápido. Specification-driven development significa que el artefacto principal es la especificación de comportamiento, fronteras, invariantes, tests y criterios de aceptación.

En un proceso AI-native, el arquitecto escribe menos código de bajo nivel y más prosa precisa. Revisa el diff, los tests, las fronteras arquitectónicas y la alineación con la spec.

Specbehaviourboundariesinvariantstestsacceptance criteriavague spec → bad code fasterAI agentfast executorCode + teststhe diffArchitect reviewagainst the specfix the spec, not only the code
La spec es el artefacto principal. El agente la convierte rápido en código; el arquitecto comprueba el código contra la spec y, si hay fallo, corrige la spec.
PracticeSpecification-driven Development· la spec como artefacto principal
Problema

Un agente escribe código diez veces más rápido, y construye lo equivocado igual de rápido.

Idea

El artefacto principal es la spec: comportamiento, fronteras, invariantes, tests, criterios de aceptación.

Ejemplo

En lugar de «construye pagos»: escenarios, errores, la invariante «un pago por pedido» y tests para ella.

Coste
El arquitecto escribe prosa más precisa y menos código.
Cuándo usarlo
Siempre que un agente de IA haga la implementación.
Relaciones

Lo comprueba Agent Output Review; las invariantes salen del API Contract y del Bounded Context.

Agent Output Review — el código de un agente merece la misma disciplina que el PR de una persona

Un junior rápido que escribe mil líneas por hora sigue necesitando revisión. La velocidad no hace correcto al código.

No puedes aceptar el código de un agente solo porque compila. Hacen falta tests, evals, fronteras de import, comprobaciones de tipos, revisión de seguridad. Las scenario evaluations importan especialmente: el sistema tiene que pasar casos reales, no solo el happy path.

Una organización AI-native gana no donde «todos hacen vibe-coding», sino donde hay especificaciones sólidas, iteraciones pequeñas, comprobaciones automatizadas y responsabilidad arquitectónica.

Agent PRcompiles ≠ correctQuality gatestestsscenario evals · not just happy pathimport boundariestype checkssecurity reviewMergeowned
El PR de un agente pasa por los mismos quality gates que el de una persona: tests, scenario evals, fronteras de import, tipos, revisión de seguridad.
PracticeAgent Output Review· quality gates para código de IA
Problema

El código del agente se acepta porque compila y suena seguro de sí mismo.

Idea

Los mismos quality gates automatizados y la misma revisión que para una persona.

Ejemplo

Las scenario evals detectan que el agente solo trató el happy path y olvidó el pago repetido.

Coste

Hay que construir de antemano las comprobaciones automáticas y las fronteras de import.

Cuándo usarlo
Cada PR de un agente, sin excepciones.
Relaciones

Comprueba la alineación con Specification-driven Development; las fronteras vienen de Dependency Inversion.

§ 23

El arquitecto puede ser peligroso justamente porque suena convincente. Conocer las trampas ahorra años.

Ivory Tower Architect

Alguien dibuja una ciudad perfecta en lo alto de la colina, pero nunca baja a ver por dónde camina la gente en realidad.

Este es el antipatrón del ivory tower architect: decisiones tomadas lejos del código, de la operación y del equipo. Los diagramas son preciosos, pero la implementación sufre. La cura es simple: leer PRs, mirar incidentes, hablar con los ingenieros, recorrer tú mismo el camino de un cambio.

Ivory towerpretty diagramsCureread PRs · watch incidents · talk · walk the pathCode / PRsIncidentsEngineersgapdecisions made far from code, operations and the team
La torre está lejos del suelo: del código, de los incidentes y de los ingenieros. La cura es bajar: leer PRs, mirar incidentes, hablar, recorrer el camino de un cambio.
Anti-patternIvory Tower Architect· arquitectura desde la colina
Síntoma
Diagramas preciosos que el equipo no puede implementar.
Por qué duele

Las decisiones ignoran el código real, la operación y a las personas.

Cura

Leer PRs, mirar incidentes, hablar con los ingenieros, recorrer tú mismo el camino de un cambio.

Relaciones

Lo opuesto a Influence without Authority; la forma por encima de la realidad es también Cargo Cult.

Resume-driven Development y Cargo Cult

Comprar un camión de bomberos porque impresiona a los vecinos es raro si no tienes agua ni bomberos.

El resume-driven development elige tecnologías por una línea en el CV. La cargo cult engineering copia la forma de la decisión de otro sin su razón. El síndrome NIH (Not Invented Here) te obliga a escribir lo tuyo donde una herramienta externa madura lo haría mejor.

Otra trampa es el technical perfectionism. La arquitectura perfecta que nunca llegó al usuario pierde frente a un sistema suficientemente bueno que se entrega y puede evolucionar.

The real problemstart hereResume-driven devtech for the CVCargo cultcopy the form, not the reasonNIH syndromebuild what you should buyPerfectionismperfect, never shipped
Cuatro trampas que te alejan del problema real: tecnología para el CV, copiar la forma, «construyamos el nuestro» y pulir sin fin.
Anti-patternResume-driven Development· cargo cult, NIH, perfeccionismo
Síntoma

La decisión se justifica por la moda, el ejemplo de otro o la belleza, no por un problema.

Por qué duele

Pagas el precio de una tecnología compleja sin su beneficio, o nunca llegas al usuario.

Ejemplo

Kubernetes y microservicios para un equipo de tres, «porque lo hace Netflix».

Cura
Partir del problema y nombrar con honestidad el precio de cada opción.
Relaciones

Se cura con Trade-offs y Build vs Buy; a menudo produce un Distributed Monolith.

§ 24

La arquitectura es un juego infinito. Las tecnologías cambian, pero la capacidad de hacer las preguntas correctas solo se fortalece.

T-shaped / M-shaped Skills — aprende de los sistemas, no del hype

Un cocinero no crece mirando anuncios de cuchillos, sino entendiendo los ingredientes, el calor, el tiempo y el sabor.

Vale la pena estudiar las tecnologías nuevas mediante preguntas: qué problema resuelven, qué precio introducen, dónde han fallado ya, cuáles son las alternativas, qué tiene que ser cierto para que resulten útiles.

New techthe hypewhat problem does it solve?what price does it add?where has it already failed?what are the alternatives?what must be true to help?Adoptit fitsSkip / waitnot yet
Cinco preguntas de filtro para cualquier tecnología nueva. Después decides: adoptarla ya o esperar.

Las T-shaped skills te dan profundidad en un área y amplitud en las vecinas. Las M-shaped skills aparecen en un arquitecto maduro: varios pilares profundos: datos, distribución, seguridad, producto, herramientas de IA.

T-shapedbreadth: neighbouring areasone deep areaM-shapedbreadthdatadistributionsecurityproductAI toolsa mature architect grows several deep pillars
T: un área profunda más amplitud. M: varios pilares profundos en un arquitecto maduro.
ConceptT-shaped / M-shaped Skills· aprender de los sistemas, no del hype
Problema

La gente aprende cada tecnología de moda, pero no gana profundidad ni criterio.

Idea

Estudiar las tecnologías mediante preguntas sobre el problema y el precio; cultivar varios pilares profundos.

Ejemplo

Una base de datos nueva: qué problema resuelve, dónde ha fallado ya, qué tiene que ser cierto para que nos ayude.

Coste
Más lento que leer anuncios; la profundidad lleva años.
Cuándo usarlo
Con cada tecnología nueva que aparezca en el radar.
Relaciones

Una defensa contra el Resume-driven Development; los pilares son los temas de este curso.

Learning in Public — acelera la madurez

Cuando explicas una decisión por escrito, los huecos de tu pensamiento aparecen antes de que los encuentre producción.

Learning in public significa aprender abiertamente, por escrito. Escribe ADRs, RFCs, notas de ingeniería, post-mortems, desgloses breves de decisiones. Aprende de arquitectos más fuertes que tú: no solo qué eligieron, sino cómo razonaron.

El arquitecto al que la gente imita normalmente no es el que más términos conoce. Es la persona junto a la cual el equipo empieza a hacer mejores preguntas.

Decideon a real systemWrite it downADR · RFC · notesFeedbackpost-mortems · peersBetter questionsfor you and the teamgaps show up before production
El ciclo: decidir → escribirlo → recibir feedback → hacer mejores preguntas. Los huecos de tu pensamiento aparecen antes que en producción.
PracticeLearning in Public· aprender por escrito
Problema

Producción encuentra los fallos de tu razonamiento antes que tus colegas.

Idea

Escribir las decisiones y los desgloses, compartirlos, aprender del feedback.

Ejemplo

ADRs, RFCs, notas de ingeniería, post-mortems, desgloses breves de decisiones.

Coste

Tiempo para escribir, y el coraje de enseñar un pensamiento sin terminar.

Cuándo usarlo
Todo el tiempo: así crece un arquitecto.
Relaciones

Usa ADRs, RFCs y post-mortems; hace más fuerte al equipo, igual que Influence without Authority.

Autoevaluación final
  • Puedo nombrar los trade-offs de una decisión sin defender mi ego.
  • Entiendo dónde vive la fuente de la verdad en el sistema.
  • Distingo las decisiones reversibles de las irreversibles.
  • Puedo explicar la arquitectura a ingeniería, producto y negocio con palabras distintas.
  • Escribo las decisiones de modo que se puedan entender aún dentro de un año.
  • No escondo la complejidad detrás de las palabras «best practice».

El mapa del curso: cómo se conecta todo

Un mapa de metro al final del viaje: ahora ves dónde se cruzan las líneas.

La mentalidad da forma a la estructura, a los datos y a la calidad. La estructura se registra en documentos, la calidad se verifica con seguridad y operaciones, y los documentos y los riesgos convencen al negocio. Todo junto escala hacia el trabajo AI-native y el crecimiento personal.

Mindsettrade-offs · debt · cognitive loadStructureboundaries · contractsData & distributiontruth · consistencyQualitylatency · scale · SLOshapesDocs & talkADR · C4 · RFCLead & businessinfluence · NFR · buySecurity & opsauthz · threats · alertsrecorded inverified byconvinceriskAI-native & growthspecs · review · anti-patterns · skillsscales into
Los ocho grupos de conceptos del curso y cómo se conectan: de la mentalidad a la estructura, los datos y la calidad, y de ahí a documentos, negocio, operaciones y crecimiento.

Chuleta: los 52 conceptos del curso

La mentalidad del arquitecto (1–4)

Long-term Thinkingpensar en años

Primero comprueba si el problema está bien planteado y cómo vivirá la decisión dentro de tres años.

Reversible vs Irreversibledos tipos de decisiones

Decide rápido lo que es fácil de deshacer; despacio lo que cambia la trayectoria del sistema.

Trade-offsun intercambio deliberado

Cada elección compra una propiedad a costa de otra. Una buena práctica sin contexto es un mal consejo.

Over- / Under-engineeringla complejidad es un impuesto

La complejidad se justifica solo cuando compra una propiedad importante. Mantén el punto medio.

Technical Debtun préstamo, no basura

Una decisión que te acelera ahora y cuesta más después.

Debt Interestla ralentización

La ralentización de cada cambio siguiente. La deuda en la zona caliente es la que más cuesta.

Cognitive Loadcabe en una cabeza

Cuánto contexto necesitas para cambiar un componente con seguridad. Quita la complejidad accidental.

Conway's Lawforma de la org = forma del sistema

Un sistema refleja la estructura de comunicación de la organización.

Estructura del sistema (5–7, 11)

Cohesion & Couplinguna sola cosa dentro, poco hacia fuera

Dentro de un componente, todo trata de una sola cosa; hacia fuera, saber lo mínimo de los demás.

Bounded Contextfrontera de DDD

Una frontera dentro de la cual las palabras tienen un solo significado.

Dependency Inversionlas dependencias apuntan hacia dentro

La lógica de negocio depende de abstracciones; los detalles se enchufan desde fuera (ports and adapters).

Abstractionexiste para absorber el cambio

Una capa se gana su sitio absorbiendo el cambio y permitiendo probar sin el mundo exterior, no quedando bonita.

API Contractel contrato por encima del transporte

Esquema, errores, versionado y compatibilidad importan más que REST vs GraphQL vs gRPC.

Idempotencyseguro de repetir

Repetir una operación da el mismo efecto final. Protección contra retries y duplicados.

Modular Monolithun despliegue, muros fuertes

Una aplicación con fronteras internas estrictas. A menudo, el mejor comienzo.

Distributed Monolithlo peor de ambos mundos

Servicios que solo se entregan juntos. El coste de la distribución sin la independencia.

Strangler Figmigrar pieza a pieza

Hacer crecer el sistema nuevo alrededor del viejo y mover el tráfico poco a poco, en lugar de una reescritura big-bang.

Datos y distribución (8–10, 12)

Data Modellos datos sobreviven al código

La decisión más cara: normalización, OLTP vs OLAP.

Event Sourcingel log de eventos es la verdad

El estado se reconstruye a partir de eventos: historial completo y auditoría, pero caro de operar y evolucionar.

CQRSseparar modelos de escritura y lectura

Los comandos y las consultas tienen cada uno su modelo; útil cuando lecturas y escrituras difieren mucho.

Single Source of Truthuna versión autorizada

De cada hecho sabes dónde vive la versión primaria; el resto son copias derivadas.

Cache Invalidationuna segunda verdad que miente

Velocidad a costa de frescura; la pregunta difícil es cuándo invalidar.

Optimistic vs Pessimistic Lockingcomprobar al escribir vs bloquear antes

Dos formas de evitar que ediciones concurrentes se pisen entre sí.

CAP / PACELCla red es incertidumbre

Durante una partición: consistencia o disponibilidad; si no: latencia o consistencia.

Consistency Modelsstrong, eventual, causal

No el modelo más estricto, sino el suficiente para el riesgo.

Sagauna cadena de pasos con compensaciones

Una transacción larga entre servicios, donde cada paso tiene un deshacer en lugar de un bloqueo global.

Queue vs Pub/Sub

Async desacopla en el tiempo, pero trae retrasos, duplicados y problemas de orden.

At-least-once Deliveryexactly-once es marketing

Un mensaje puede llegar dos veces; el consumidor debe ser idempotente. DLQ, backpressure.

Calidad del sistema (13–15)

Tail Latencyp95 / p99

Los usuarios sienten la cola, no el promedio.

Profilingmedir primero

Optimiza solo el hotspot que encontraste; Amdahl y Little fijan los límites.

Vertical vs Horizontal Scalingscale up / scale out

Una máquina grande, o muchas idénticas detrás de un load balancer.

Scale CubeX / Y / Z

Clonar, dividir por función, dividir por datos.

Retry + Circuit Breaker + Bulkheadresistencia

Retries con backoff y jitter, un breaker para dependencias muertas, pools aislados.

SLI / SLO / SLAerror budget

Medición, objetivo y promesa; el error budget decide entre funcionalidades y fiabilidad.

Seguridad y operaciones (16–17)

Authentication vs AuthorizationAuthN / AuthZ

«¿Quién eres?» y «¿qué puedes hacer?» son dos pasos distintos.

Threat ModelingSTRIDE, defense in depth

Encontrar las amenazas antes del ataque y defenderse por capas.

Observabilitylogs · metrics · traces

El sistema explica el «por qué»; un correlation ID une todo el camino.

Symptom-based Alertingrunbook, post-mortem

Alerta por el dolor del usuario; un runbook dice qué hacer; los post-mortems son blameless.

Documentos y comunicación (18–19)

ADRArchitecture Decision Record

Contexto, decisión, alternativas, consecuencias: uno por decisión.

C4 Modeldocumentación viva

Diagramas por nivel de zoom que viven junto al código.

Risk Translationstakeholder mapping

Un riesgo, palabras distintas para ingenieros y para el negocio.

RFCdisagree and commit

Una propuesta escrita, con crítica antes de la decisión.

Liderazgo y negocio (20–21)

Influence without Authoritymentoring

Principios, fronteras y preguntas en lugar de órdenes.

Delegation with Guardrailsla responsabilidad se queda

Los equipos deciden; el arquitecto interviene ante irreversibilidad, invariantes, seguridad e impacto en varios equipos.

Non-functional RequirementsNFRs, cost of delay

Propiedades del producto expresadas en ingresos, riesgo y coste.

Build vs Buycapability map

Construye el núcleo, compra lo commodity, conoce el coste de salida.

AI-native, trampas y crecimiento (22–24)

Specification-driven Developmentla spec como artefacto

Cuanto más rápido el ejecutor, más importa la precisión de la spec.

Agent Output Reviewquality gates

El código de un agente pasa las mismas comprobaciones que el PR de una persona.

Ivory Tower Architectarquitectura desde la colina

Decisiones tomadas lejos del código, de la operación y del equipo.

Resume-driven Developmentcargo cult, NIH, perfeccionismo

Tecnología para el CV, copiar la forma, construir lo que deberías comprar, pulir sin fin.

T-shaped / M-shaped Skillsaprender de los sistemas

Profundidad más amplitud; un arquitecto maduro tiene varios pilares profundos.

Learning in Publicaprender por escrito

Escribe las decisiones y ve los huecos de tu pensamiento antes que producción.

Un arquitecto es un ingeniero que aprendió a ver las consecuencias antes de que se convirtieran en un incidente.

Fin del curso · 24 módulos · la práctica empieza aquí.

Vuelve a leer este curso no como una referencia, sino como un conjunto de preguntas. La arquitectura empieza donde te detienes ante una decisión y nombras con honestidad el precio de cada opción.