Saltar al contenido principal

Uso y formato de Architecture Decision Records (ADR)

Objetivo​

Este documento define cuándo, cómo y por qué registrar decisiones arquitectónicas mediante Architecture Decision Records (ADR).

El objetivo de los ADR no es documentar todo, sino preservar decisiones importantes que afectan la forma, evolución y calidad del sistema a lo largo del tiempo.

Un ADR responde a una necesidad fundamental del software:

La arquitectura cambia, pero la memoria humana no escala.

Qué es un ADR​

Un ADR es un documento breve que captura:

  • El contexto de una decisión
  • La decisión tomada
  • Las alternativas consideradas
  • Las consecuencias técnicas

No describe implementación detallada, sino criterio arquitectónico.

Un ADR bien escrito permite que alguien que no estuvo presente entienda:

  • Por qué se tomó la decisión
  • Qué se intentaba optimizar
  • Qué se aceptó como costo

Qué NO es un ADR​

No es:

  • Un manual de uso
  • Un documento de diseño detallado
  • Un commit message largo
  • Un acta burocrática

Si un ADR explica cómo escribir el código, está mal enfocado. Debe explicar por qué el código existe así.

Por qué los ADRs son necesarios​

En sistemas reales ocurre lo siguiente:

  • Las decisiones se toman bajo presión
  • El contexto se pierde con el tiempo
  • Las personas cambian
  • Las suposiciones se olvidan

Sin ADRs:

  • Se reabren debates ya resueltos
  • Se toman decisiones contradictorias
  • Se repiten errores pasados
  • Aparece el “siempre se hizo así”

Un ADR es un antídoto contra el olvido técnico.

Cuándo crear un ADR​

No todas las decisiones requieren ADR.

Un ADR es recomendable cuando la decisión:

  • Afecta múltiples componentes
  • Impacta atributos de calidad
  • Es costosa de revertir
  • Introduce una dependencia relevante
  • Cambia la forma de trabajar del sistema

Ejemplos típicos:

  • Elección de arquitectura (monolito, modular, microservicios)
  • Selección de base de datos
  • Estrategia de autenticación
  • Patrón de manejo de estado
  • Estrategia de comunicación entre servicios

Decisiones triviales no necesitan memoria eterna.

Estructura estándar de un ADR​

Un ADR debe ser simple, legible y consistente. Un formato común y efectivo incluye los siguientes apartados.

1. Título​

Debe ser claro y específico.

Ejemplo: “Uso de base de datos relacional para el core transaccional”

2. Estado​

Indica la vigencia de la decisión:

  • Propuesta
  • Aceptada
  • Deprecada
  • Reemplazada

Esto permite entender si la decisión sigue activa o fue superada.

3. Contexto​

Describe el problema que se intenta resolver.

Incluye:

  • Necesidades del sistema
  • Restricciones conocidas
  • Suposiciones relevantes
  • Momento temporal

Este apartado responde a: ¿Qué estaba pasando cuando se tomó esta decisión?

4. Decisión​

Describe claramente qué se decidió.

Debe ser concreta y sin ambigüedad. No debe justificar todavía; solo declarar.

Ejemplo: “Se utilizará una base de datos relacional para las operaciones transaccionales críticas.”

5. Alternativas consideradas​

Lista las opciones evaluadas y por qué no fueron elegidas.

Esto es clave para:

  • Evitar repetir discusiones
  • Entender trade-offs
  • Revaluar si el contexto cambia

Aquí vive el pensamiento arquitectónico real.

6. Consecuencias​

Describe los efectos de la decisión:

  • Beneficios esperados
  • Costos asumidos
  • Riesgos aceptados
  • Impacto en atributos de calidad

Toda decisión tiene consecuencias; el ADR las hace explícitas.

Dónde viven los ADRs​

Los ADRs deben vivir:

  • Cerca del código
  • Versionados
  • Accesibles para todos

Opciones comunes:

  • Carpeta /docs/adr
  • Repositorio de documentación
  • Sitio de documentación técnica

Un ADR que no se puede encontrar es historia perdida.

ADRs como documentos vivos​

Un ADR no es inmutable.

Puede:

  • Ser actualizado
  • Ser reemplazado por otro
  • Ser marcado como obsoleto

Cuando una decisión cambia, se registra un nuevo ADR, no se reescribe la historia.

La evolución es parte del diseño.

Antipatrones comunes con ADRs​

  • Escribir ADRs después del desastre
  • Usarlos solo para decisiones obvias
  • Convertirlos en documentos extensos
  • No actualizarlos nunca
  • Escribirlos solo para “cumplir”

Un ADR inútil es peor que ninguno.

ADRs y cultura técnica​

Los ADRs fomentan:

  • Pensamiento crítico
  • Discusión estructurada
  • Transparencia técnica
  • Aprendizaje colectivo

No son control, son comunicación técnica asincrónica.

Cuando alguien lee un ADR y dice: “Ahora entiendo por qué esto es así”

El ADR cumplió su función.

Relación con los atributos de calidad​

Cada ADR debería responder implícitamente:

  • ¿Qué atributos de calidad se priorizaron?
  • ¿Cuáles se sacrificaron?
  • ¿Por qué ese trade-off fue aceptable?

Si un ADR no toca calidad, probablemente documenta algo irrelevante.

Cierre conceptual​

La arquitectura no se define solo por decisiones, sino por decisiones recordadas.

Los ADRs permiten:

  • Evolucionar sin amnesia
  • Cambiar sin improvisar
  • Enseñar sin repetir errores

Un sistema sin ADRs depende de la memoria de las personas. Un sistema con ADRs construye memoria propia.