Explica cómo definir límites, contratos y ownership de capacidades, datos, decisiones y operación para evitar responsabilidades compartidas y dependencias ocultas.
Última actualización
Actualizada
Nivel
Fundamentos
Un límite arquitectónico define qué responsabilidad, datos y decisiones pertenecen a una parte; un contrato define cómo pueden colaborar otras partes sin depender de sus internals; el ownership determina quién responde por su corrección y evolución.
Rate limits, disponibilidad, observabilidad y soporte.
Dos sistemas pueden usar el mismo JSON y seguir teniendo contratos incompatibles si uno interpreta confirmed como pago autorizado y otro como dinero capturado.
Ownership significa autoridad y responsabilidad, no solo “quién creó el código”.
Incluye:
Modelo y reglas.
Escritura de datos.
Contrato público.
Migraciones.
Seguridad.
SLO y operación.
Incidentes y evolución.
Ejemplo:
Texto
Orders
→ posee estados del pedido y su ciclo de vida
Inventory
→ posee disponibilidad, reservas y movimientos
Payments
→ posee intentos, autorizaciones y conciliación
Orders puede solicitar una reserva, pero no debería reducir directamente una columna de Inventario.
1. Orders recibe ConfirmOrder.
2. Verifica identidad, tenant y estado.
3. Solicita una reserva a Inventory.
4. Inventory valida disponibilidad y crea reservationId.
5. Orders registra la confirmación usando esa referencia.
6. Publica OrderConfirmed.
7. Otros consumidores reaccionan sin escribir internals de Orders.
Si los módulos son procesos separados, un timeout puede dejar resultado desconocido. El contrato debe incluir idempotencia, consulta de estado o reconciliación. La firma por sí sola no resuelve la incertidumbre.
Puede mantenerse dentro de un monolito modular si cada tabla tiene propietario y las escrituras cruzadas están prohibidas. La separación física no sustituye ownership.
Auditoría o identidad cruza límites. Define capacidades y políticas compartidas sin permitir que un módulo central conozca todas las reglas de negocio.