Explica cómo registrar decisiones arquitectónicas con contexto, drivers, alternativas, consecuencias, estado y señales de revisión mediante ADRs.
Última actualización
Actualizada
Nivel
Fundamentos
Una decisión arquitectónica no queda explicada por el código final. Para poder revisarla cuando cambien los drivers, debe conservar el problema, las alternativas consideradas, las consecuencias aceptadas y la evidencia que justificó elegirla.
Una arquitectura evoluciona mediante decisiones. Algunas son reversibles y locales; otras condicionan datos, equipos, contratos y operación durante años.
Un Architecture Decision Record —ADR— es un registro breve pero suficiente de una decisión importante. Su propósito no es producir burocracia, sino evitar que el equipo pierda el razonamiento y repita discusiones sin contexto.
Texto
contexto
→ fuerzas y restricciones
→ alternativas
→ decisión
→ consecuencias
→ evidencia y señales de revisión
El código muestra qué se implementó, pero rara vez explica:
Qué problema existía.
Qué restricciones limitaron opciones.
Qué alternativas se descartaron.
Qué costo se aceptó.
Qué supuesto podría invalidar la decisión.
Sin esa información, una persona puede “corregir” una decisión antigua y reintroducir el riesgo que intentaba evitar. También puede conservarla por inercia cuando sus condiciones ya cambiaron.
Registra decisiones con impacto amplio, alto costo de reversión o riesgo significativo:
Unidades de despliegue.
Ownership de datos.
Estrategia de integración.
Persistencia principal.
Compatibilidad de contratos.
Identidad y autorización.
Mecanismos de consistencia.
Estrategias de migración.
No necesitas un ADR para cada nombre de función o librería menor. El registro debe concentrarse en decisiones que otra persona razonablemente necesitaría comprender o cuestionar.
# ADR-007: Usar monolito modular como topología inicial## Estado
Aceptada
## Contexto
DomiSys es desarrollado por un equipo pequeño. El dominio todavía cambia y los flujos de inventario y pedidos necesitan transacciones locales. No existe una plataforma madura para operar múltiples servicios.
## Decisión
Desplegar una sola aplicación organizada en módulos por capacidad de negocio. Cada módulo tendrá API pública, ownership lógico de datos y reglas de dependencia verificadas.
## Alternativas- Microservicios: ofrecen independencia potencial, pero añaden red, consistencia eventual, observabilidad distribuida y operación que el equipo aún no necesita.
- Monolito organizado solo por capas técnicas: menor disciplina inicial, pero aumenta el riesgo de límites difusos.
## Consecuencias- Despliegue y debugging simples.
- Transacciones locales.
- Escalado conjunto.
- Se requieren pruebas de arquitectura para evitar imports y escrituras cruzadas.
## Señales de revisión- Equipos diferentes necesitan desplegar capacidades de forma independiente.
- Inventario presenta un perfil de escala claramente distinto.
- Un límite de dominio se mantiene estable y medido.
El ADR no promete que el monolito sea permanente. Explica por qué es correcto ahora y qué evidencia cambiaría la decisión.
preferencia:
“me gusta PostgreSQL”
decisión:
“PostgreSQL permite restricciones y transacciones necesarias para inventario,
el equipo sabe operarlo y el volumen estimado cabe dentro de una instancia gestionada”
Una decisión arquitectónica conecta una opción con drivers. Sin esa conexión solo existe una preferencia técnica.
Un ADR útil no enumera solo ventajas. Debe indicar qué se sacrifica.
Texto
usar eventos para notificaciones
optimiza:
desacoplamiento temporal y fan-out
sacrifica:
consistencia inmediata y simplicidad de diagnóstico
riesgo residual:
mensajes duplicados o retrasados
mitigación:
idempotencia, DLQ, trazas y reconciliación
No conviertas cada detalle trivial en un ADR. Usa documentación local, commits o convenciones para decisiones de bajo impacto y fácilmente reversibles.
Cohesión, acoplamiento y connascence aporta criterios para evaluar si los límites y dependencias elegidos localizan cambios o los propagan por todo el sistema.