Pular para o conteúdo principal

Conceitointermediário

A Decisão

Visão Geral

A seção de decisão é a mais curta do ADR e a mais fácil de escrever mal. Ela precisa responder a uma pergunta com uma frase: o que foi decidido?

Três propriedades a definem:

voz ativa "vamos usar X", não "recomenda-se avaliar X"
escopo claro onde vale e onde não vale
sem hedge nenhum "provavelmente", "por enquanto", "salvo se"

O tamanho típico é de duas a cinco linhas. Se ela cresce, geralmente é porque virou implementação, ou porque são várias decisões.

Problema

O que se encontra em ADRs reais:

"Após avaliação, entende-se que PostgreSQL seria a opção mais adequada
para o contexto atual, podendo ser reavaliada conforme a evolução."

Isso não é uma decisão. Não se sabe se foi decidido, quem decidiu, se vale, nem para onde.

A linguagem defensiva tem causa: quem escreve teme comprometer-se e teme errar. Mas o ADR existe justamente para registrar um compromisso — e um compromisso registrado com hedge não pode ser nem seguido nem contestado.

E há um segundo problema, mais sutil: a decisão que descreve como em vez de o quê. Ela transforma o ADR em especificação, que envelhece na velocidade do código.

Conceitos Centrais

Voz ativa e comprometida

ruim "Recomenda-se o uso de PostgreSQL."
ruim "Foi decidido utilizar PostgreSQL."
ruim "PostgreSQL parece adequado."
bom "Vamos usar PostgreSQL como banco primário dos serviços de pedidos."

A segunda parece aceitável e não é: a voz passiva apaga quem decidiu, e é justamente essa informação que alguém vai querer daqui a dois anos.

A escolha de "vamos" ou "usaremos" não é estilística. Ela sinaliza que houve compromisso — o que distingue um ADR de uma avaliação técnica.

Escopo delimitado

Uma decisão sem escopo é impossível de aplicar e impossível de superar:

vago "Vamos usar Kafka."
claro "Vamos usar Kafka para os eventos de domínio entre os serviços de
pedidos, faturamento e estoque. Comunicação síncrona entre esses
serviços continua sendo HTTP. Outros domínios não são afetados."

O escopo responde a três perguntas: onde vale, onde não vale, e o que permanece como está.

A terceira é frequentemente omitida e evita a interpretação expansiva — a leitura de que a decisão substitui tudo que existia antes.

O quê, não como

decisão "Vamos separar o serviço de faturamento."
implementação "Vamos criar um repositório novo, com Spring Boot 3,
usando o gabarito X, com a esteira Y e o banco Z."

A segunda envelhece em meses e não é o que o ADR precisa preservar. Detalhes de implementação pertencem ao código ou a um documento de desenho.

A fronteira útil: se a informação muda sem que a decisão mude, ela é implementação.

Uma decisão por ADR

Quando a seção de decisão tem vários parágrafos com "e também", geralmente há decisões independentes acopladas:

"Vamos adotar Kafka, migrar o banco para PostgreSQL e separar o
serviço de faturamento."

Três decisões, três contextos, três conjuntos de alternativas, três possibilidades de superação independente. Registradas juntas, nenhuma pode ser revista sozinha.

O teste: uma delas poderia ser revertida sem as outras? Se sim, são ADRs separados.

Registrar quem decidiu

autores quem escreveu
decisores quem tinha autoridade e exerceu
consultados quem opinou sem decidir

A distinção entre autor e decisor importa em organizações grandes, onde quem escreve frequentemente não é quem decide. E o registro de consultados protege contra a leitura posterior de que a decisão foi unilateral.

Ver governança.

Discordância registrada

Quando há desacordo relevante e a decisão é tomada mesmo assim, registrar isso é mais valioso do que parece:

"Duas pessoas do time defenderam a alternativa B, por preocupação com
o custo operacional. A decisão foi tomada aceitando esse risco, com
revisão prevista em 6 meses."

Isso preserva a informação de que a objeção existia — o que é exatamente o que se quer saber se o risco se materializar. E torna o ADR honesto de um jeito que sustenta a prática melhor que a aparência de consenso.

Decisões de não fazer

Uma categoria subutilizada: registrar o que se decidiu não fazer.

"Vamos manter o monólito e não adotar microsserviços neste ciclo."
"Não vamos construir uma camada de cache distribuído."

Essas decisões são invisíveis no código — não há nada para apontar — e são exatamente as que serão revisitadas repetidamente sem registro.

A decisão precisa ser acionável

Um teste final antes de fechar a seção: alguém consegue agir com base nela sem perguntar nada?

não acionável "Vamos padronizar a comunicação entre serviços."
acionável "Comunicação entre serviços do domínio de pedidos passa a
ser HTTP com contrato declarado em OpenAPI, versionado no
repositório do produtor. Chamadas novas seguem isto a
partir de hoje; as existentes migram quando forem tocadas."

A diferença está em três elementos: o quê, onde vale e a partir de quando. O terceiro é o mais esquecido — uma decisão sem marco temporal deixa em aberto se o código existente precisa mudar, e essa ambiguidade costuma ser resolvida por cada time de um jeito.

Modelo Mental

Uma frase, na voz ativa, com escopo. Se não cabe em cinco linhas, são várias decisões ou é implementação.

Quando Usar

  • Em todo ADR.
  • Com escopo explícito sempre que a decisão puder ser lida de forma expansiva.
  • Registrando discordância quando ela existiu.

Quando Não Usar

Com hedge. "Provavelmente", "por ora", "sujeito a revisão" — a revisão é o mecanismo de superação, não uma ressalva.

Em voz passiva.

Descrevendo implementação.

Com várias decisões juntas.

Sem escopo, quando o sistema tem mais de um domínio.

Como proposta. Uma proposta tem status proposto; a seção de decisão continua afirmativa.

Alternativas

  • Y-Statement — comprime contexto, decisão e consequência numa frase estruturada.
  • Decisão implícita no título — para casos triviais, o título já é a decisão, e a seção detalha o escopo.
  • Referência a um padrão — quando a decisão é adotar algo já definido em outro lugar. Ver padrões.

Trade-offs

Escopo estreitoAmplo
Aplicação claraMenos ADRs
Mais ADRsAmbíguo na aplicação
Superável isoladamenteSuperação em bloco
Discordância registradaConsenso aparente
Honesto e útil depoisMenos atrito imediato
Preserva a objeçãoParece mais sólido
Exige maturidade do timeFácil

Modos de Falha

Hedge. A decisão não pode ser seguida nem contestada.

Voz passiva. Ninguém decidiu.

Sem escopo. Aplicada onde não deveria, ou ignorada onde deveria.

Implementação registrada. O ADR envelhece com o código.

Várias decisões juntas. Nenhuma revisável sozinha.

Discordância apagada. Quando o risco se materializa, ninguém sabe que era previsto.

Erros Comuns

Escrever a decisão como conclusão de uma análise, em vez de como compromisso.

Omitir o que não muda — o que abre espaço para interpretação expansiva.

Não registrar decisores.

Não registrar decisões de não fazer.

Suavizar a decisão para reduzir atrito na revisão — o que transfere o atrito para o futuro.

Exemplo Real

Uma empresa de serviços financeiros tinha um ADR de 2022 com a seguinte decisão:

"Adotar arquitetura orientada a eventos para desacoplar os serviços."

Sem escopo, sem delimitação, sem dizer o que permanecia.

Dois anos depois, uma auditoria interna encontrou o efeito:

serviços que adotaram eventos para tudo, inclusive consultas 4
serviços que ignoraram a decisão 6
serviços com abordagem mista sem critério 9
interpretações distintas do ADR encontradas em entrevistas 5

Os quatro primeiros eram os mais problemáticos: consultas síncronas simples tinham sido convertidas em pares de eventos requisição-resposta, com correlação manual e tempo de resposta de segundos. Ver integração orientada a eventos.

A investigação mostrou que o ADR original tinha sido escrito depois de uma discussão em que o escopo estava claro para os presentes: eventos para propagação de mudança de estado entre domínios, mantendo HTTP síncrono para consultas. Nada disso foi escrito.

O ADR foi superado por outro, com decisão delimitada:

"Vamos usar eventos de domínio para propagar mudanças de estado entre
os domínios de pedidos, faturamento e estoque.

Não vamos usar eventos para consulta: leitura entre serviços continua
sendo HTTP síncrono.

Domínios fora dos três citados não são afetados por esta decisão.

Duas pessoas defenderam estender a decisão a todos os domínios; a
objeção foi de que os demais não têm volume que justifique o custo
operacional. Reavaliar quando algum deles passar de 50 eventos/s."

E uma regra de escrita foi adotada: toda decisão precisa de uma frase começando com "não vamos". A justificativa foi empírica — dos 12 ADRs que tinham gerado interpretação divergente, 11 não delimitavam o que ficava de fora.

A correção dos quatro serviços levou sete meses. O tempo de resposta das consultas convertidas caiu de 2,4 s para 90 ms.

Na retrospectiva: o ADR original não estava errado. Ele estava incompleto de uma forma que só era visível para quem não participou da conversa — que é exatamente o público do documento.

Conceitos Relacionados

Exercício Prático

Pegue três ADRs do seu time e verifique se cada um diz explicitamente o que não muda.

Depois pergunte a duas pessoas que não participaram qual é o escopo de cada decisão. A divergência entre as respostas mede o que faltou.

Perguntas de Entrevista

  • Por que voz passiva é um problema numa seção de decisão?
  • Por que delimitar o que não muda evita interpretação expansiva?
  • Quando registrar discordância vale mais que registrar consenso?

Para Aprofundar

  • Nygard, Michael. Documenting Architecture Decisions. 2011.
  • Keeling, Michael. Design It!. Pragmatic Bookshelf, 2017.
  • Ford, Neal et al. Software Architecture: The Hard Parts. O'Reilly, 2021.
Terminou de ler este documento?Seu progresso fica salvo apenas neste navegador.