De RFC a ADR: Chegando à Decisão e Mantendo o Raciocínio
Um RFC geralmente trata de alcançar um acordo; um ADR registra o acordo uma vez alcançado — e a razão pela qual os ADRs apodrecem é que o debate acontece em comentários de chat e pull-request enquanto o registro é escrito depois, de memória, por uma pessoa. Para executar o fluxo de RFC para ADR de modo que o registro não faça parte do debate: declare a proposta como uma reivindicação raiz (o título do futuro ADR); adicione contexto como argumentos pró separados para que cada força possa ser desafiada individualmente; dê a cada opção considerada seu próprio nó irmão com seus próprios prós e contras — incluindo as rejeitadas; execute a rodada de comentários do RFC como cadeias (cadeias de Q&A para esclarecimentos, cadeias de Revisão para objeções — cada uma um diálogo de quatro turnos entre revisor e autor da opção, com N revisores significando N cadeias paralelas; cadeias de Compromisso para reconciliar divisões, onde uma cadeia concluída registra a tentativa, independentemente de ter sido resolvida ou não); faça com que os tomadores de decisão avaliem as opções como evidência de onde o grupo estava — a avaliação não é a decisão, um humano nomeado ainda a chama; registre as consequências aceitas como filhos contrários da opção escolhida; e modele a substituição vinculando uma decisão posterior àquela que substitui, mantendo a antiga legível. A semeadura a partir de ADRs markdown existentes ou transcrições pesadas em decisões funciona por meio de extração de IA com proveniência registrada. Limites honestos: isso não substitui ADRs rastreados por repositórios (exporte e comite o registro); não há um campo de status de ADR embutido, então proposto/aceito/substituído é uma convenção que você mantém; uma cadeia concluída não significa que as partes concordaram — o que torna o desacordo e compromisso legível.
Um RFC geralmente trata de alcançar um acordo; um ADR registra o acordo uma vez alcançado. ADRs apodrecem porque o processo de alcançar o acordo acontece em chat e o registro acontece depois, de memória. Execute ambos em uma única estrutura:
- A proposta é uma reivindicação raiz; forças de contexto são separadas, argumentos pró desafiáveis; cada opção — incluindo as rejeitadas — recebe seu próprio nó
- A rodada RFC é cadeias: Perguntas e Respostas para esclarecer, Revisão para objetar, Compromisso para reconciliar — diálogos de quatro turnos, N revisores = N cadeias paralelas
- A avaliação não é a decisão: os tomadores de decisão avaliam como evidência; um humano nomeado a chama — e escreve o porquê, especialmente contra a sala
- O ADR é a árvore: nada é transcrito, então nada se perde na transcrição — exporte para o repositório se sua organização exigir isso
A decisão que ninguém conseguiu reconstruir
O novo líder técnico faz uma pergunta razoável: por que todos os serviços se comunicam com o sistema de faturamento através daquela fila? Há um ADR — ADR-014, quatro frases, escrito há onze meses. Contexto: "precisávamos de uma integração de faturamento confiável." Decisão: "usar a fila." Consequências: "alguma latência adicional." É tecnicamente um registro. Não responde a nada.
Você estava lá, então sabe o que o ADR-014 não diz: a discussão de três semanas em dois canais do Slack e um thread de PR acalorado; a opção de API síncrona que perdeu por causa de um limite de taxa que desde então foi aumentado; a objeção do engenheiro da equipe que foi respondida com um benchmark que ninguém consegue encontrar agora. O debate aconteceu. O registro foi escrito depois, de memória, por uma pessoa, em uma sexta-feira.
Este é o modo de falha documentado e quase universal de uma prática genuinamente boa. A orientação prescritiva da AWS e os documentos Well-Architected da Microsoft recomendam ambos os ADRs — e ambos notam a dor: mantê-los atualizados leva tempo, e gerenciá-los se torna complexo à medida que as equipes e as escolhas se multiplicam. A causa raiz é estrutural: o debate e o registro vivem em lugares diferentes, então o registro é sempre uma transcrição com perda de informações. A solução é torná-los o mesmo lugar. A prática não é específica de engenharia, ou mesmo específica de ADR. O Google exige um documento de design — problema, abordagem proposta, alternativas consideradas, trade-offs — escrito e revisado antes que um trabalho técnico significativo comece, uma prática estabelecida no próprio Software Engineering at Google da empresa. É a mesma disciplina que um ADR, aplicada um passo antes: o ADR registra a escolha que um documento de design argumentou. Os dois falham da mesma maneira pela mesma razão, e ambos são corrigidos pelo mesmo movimento — mantenha o argumento onde o registro vive, em vez de transcrever um no outro depois. Leia cada passo abaixo como cobrindo ambos os artefatos.
Por que os ADRs apodrecem
Uma frase do próprio material da comunidade ADR carrega todo o diagnóstico: um RFC geralmente trata de alcançar um acordo; um ADR registra o acordo uma vez alcançado. Dois artefatos, dois momentos — e tudo entre eles vaza. As alternativas que eram "obviamente" erradas não são registradas (até que deixem de ser óbvias). A objeção que moldou o design final sobrevive apenas como um comentário de PR em um thread fechado. A seção de contexto é escrita por último, da pior forma, por quem perdeu o jogo do não-é. Reuniões que deveriam ter produzido decisões produzem resumos em vez disso, e o raciocínio que torna uma decisão durável — a coisa da qual toda a cadeia de qualidade de decisão depende — é exatamente o que a transcrição descarta.
O que você precisa
Uma discussão do Argumentree por RFC. Se você tiver um corpus existente de ADRs em markdown ou uma transcrição de reunião com muitas decisões, faça o upload — a extração de IA transforma isso em argumentos estruturados de prós e contras com os trechos de origem anexados, carimbados como extraídos, para que as reivindicações importadas nunca sejam confundidas com as atuais (como a extração funciona).
Passo 1–3: A proposta, o contexto, as opções
- 1Declare a proposta como a reivindicação principal — a decisão proposta, não uma pergunta: "Rotearemos todas as gravações de faturamento através de uma fila durável." Esta frase é o título do futuro ADR. Ponto de verificação: raiz existe, uma frase, autoria do proponente.
- 2Contexto como argumentos pró-separados. Cada força que torna a decisão necessária — o requisito de confiabilidade, o limite de taxa do sistema de faturamento, o mandato de auditoria — é seu próprio argumento sob a raiz. Um parágrafo "Contexto" monolítico não pode ser contestado; três reivindicações de contexto separadas podem ser questionadas, confirmadas ou refutadas individualmente. Ponto de verificação: ≥2 argumentos de contexto, cada um uma força.
- 3Cada opção tem seu próprio nó. A fila, a API síncrona, o trabalho em lote — argumentos irmãos, cada um com seus próprios filhos prós e contras. Prós/contras são relativos ao pai, então as desvantagens de uma opção estão ligadas a essa opção, não à decisão. Inclua as opções que você espera rejeitar: o irmão rejeitado é o que responde à pergunta do próximo ano "por que não apenas...". Ponto de verificação: cada opção que um leitor pode perguntar existe.
Passo 4–6: A rodada RFC que deixa um registro
Agora a rodada de revisão — normalmente a parte que se dispersa em chats, comentários e corredores. Aqui ela ocorre como três tipos de intercâmbio estruturado, cada um um diálogo de quatro turnos entre um revisor e o autor da opção:
Cadeia de perguntas e respostas — esclarecer
"O que acontece com os clientes síncronos existentes?" O autor da opção responde, o revisor faz um acompanhamento, o autor responde novamente — completo. Nenhuma opção deve levar uma pergunta não respondida para a decisão.
Revisão da cadeia — objeto
Um revisor avalia uma opção como insustentável; o autor responde; acompanhamento; resposta. N revisores = N cadeias paralelas sobre a mesma opção — cada objeção é sua própria troca atribuível, não um comentário perdido em um thread compartilhado.
Cadeia de compromisso — reconciliar
Dois campos se dividem? Um propõe a opção do meio ao outro autor. Se resolver, você tem um novo nó de opção. Se não resolver, a cadeia completada é o registro de que foi tentado — o que vale quase tanto.
Concluído ≠ acordado
Uma cadeia que chega a completada significa que a troca seguiu seu curso — pergunta feita e respondida duas vezes — não que as partes concordaram. Mantenha essa distinção; isso vai importar.
Passo 7: Decidindo — e o que a classificação não é
Os tomadores de decisão avaliam as opções: uma rotulada com cada classificação. A distribuição é uma evidência genuína — onde a sala estava, registrado, antes da chamada. Mas a classificação não é a decisão. Um humano nomeado ainda decide, e se a chamada for contra a distribuição, o nó de decisão é onde isso é explicado. (Quem esse humano nomeado deve ser, e como atribuir o papel antes do debate em vez de depois, é uma disciplina própria — veja o tutorial sobre direitos de decisão.)
A pergunta para sua equipe
Quem decidiu sua última escolha arquitetônica — e você pode provar isso? Não quem estava na reunião: quem tomou a decisão, e onde está seu raciocínio escrito?
Passo 8–9: O ADR que você não precisou escrever
Aqui está o resultado. O registro não é um documento que você escreve depois — é o nó da opção escolhida mais tudo o que já está anexado a ele: os argumentos de contexto (Context), os irmãos rejeitados (Options Considered), as cadeias completadas (a discussão, com autores), as classificações (onde a sala estava) e o argumento da decisão com sua justificativa (Decision). Nada é transcrito, então nada se perde na transcrição.
- 1Registre as consequências que você está aceitando. As desvantagens conhecidas — a latência adicional, o ônus operacional da fila — continuam como consequências indesejadas da opção escolhida, reconhecidas pelo decisor. Anotá-las é o que torna isso uma decisão em vez de uma preferência. Ponto de verificação: ≥1 consequência aceita registrada.
- 2Exporte se sua organização exigir ADRs rastreados por repositório. Muitas exigem, corretamente — o ADR em markdown ao lado do código permanece como o artefato de conformidade. Escreva o resumo de quatro seções da árvore (cinco minutos, não uma sexta-feira), vincule de volta à discussão para o debate completo. Ponto de verificação: o ADR do repositório cita a árvore; a árvore contém o raciocínio.
Discordar e se comprometer, oficialmente
O padrão que a Amazon tornou famoso — discordar e se comprometer — tem um problema de legibilidade: como alguém pode saber depois que a discordância foi real, ouvida e respondida, em vez de ser ignorada? A mecânica da cadeia responde a isso. Uma cadeia de Revisão que passou por suas quatro etapas completas e foi finalizada sem acordo é precisamente o recibo: a objeção foi feita, respondida, pressionada e respondida novamente, registrado, antes que o dissidente se comprometesse. O dissidente está documentado como tendo sido ouvido — o que torna o compromisso posterior razoável em vez de meramente obediente.
Não interprete a conclusão como consenso.
Concluído significa que a troca terminou, não que alguém mudou de ideia. Se você relatar a conclusão da cadeia como um acordo, você fabricará um falso consenso e queimará a confiança que o mecanismo existe para construir. A leitura honesta: consultado, respondido, ainda oposto, comprometido de qualquer maneira — todos os quatro fatos visíveis.
Passo 10: Substituição sem exclusão
Decisões envelhecem. Quando o limite de taxa que matou a opção síncrona é elevado, a decisão correta é uma nova decisão que faz referência à que está substituindo — um novo argumento ligado ao nó do ADR-014, afirmando o que mudou. A antiga decisão permanece legível; seu raciocínio é exatamente o motivo pelo qual a nova decisão sabe o que está revogando.
Uma lacuna honesta a ser gerida explicitamente: não há um campo de status ADR embutido. Proposto / aceito / substituído não é um estado de primeira classe em um argumento — a substituição é modelada por meio de links, e a convenção é sua para manter. Declare isso no acordo de trabalho da sua equipe em vez de assumir que o produto o impõe.
Limitações honestas
- ✗Isso não substitui os ADRs no seu repositório se a sua organização exigir que eles sejam versionados ao lado do código. Exporte e faça o commit do resumo; use a árvore para a parte em que o markdown é ruim — o debate.
- ✗No campo de status ADR. Proposto/aceito/superado é uma convenção de ligação que você mantém, não algo que o produto impõe.
- ✗Uma cadeia é quatro voltas. Um profundo desacordo arquitetônico precisará de uma chamada; a cadeia é o registro do que já foi tentado antes dela.
- ✗Avaliações são um único valor rotulado, não uma pontuação multi-critério ponderada.
- ✗Não faz ninguém escrever um bom contexto. A estrutura reduz o custo de um bom registro; não suplanta o julgamento.
Aulas práticas
- ✓Um RFC, uma discussão. Resista à mega-árvore que cobre toda a arquitetura do trimestre — links de supersessão conectam decisões melhor do que a aninhamento.
- ✓Semear a partir do que existe. Um transcript carregado de decisões ou sua antiga pasta ADR, extraída, dá ao debate um bom começo — rotulado como importado, para que os argumentos ao vivo permaneçam distinguíveis.
- ✓Coloque os nomes dos revisores em suas correntes e os deixe lá. A atribuição é a responsabilidade; objeções arquitetônicas anônimas envelhecem em folclore.
- ✓A seção de consequências é do decisor, de mais ninguém. Os contras aceitos escritos pela pessoa que os aceitou têm um peso diferente das advertências de um revisor.
ADR-014, a versão que responde
Voltando à pergunta do novo líder técnico. Na versão reconstruída, o ADR-014 é um nó: a decisão da fila com sua justificativa, três forças de contexto (uma agora obsoleta — visivelmente), um irmão de API síncrona rejeitado cujo nome fatal menciona o antigo limite de taxa, quatro cadeias de Revisão concluídas, incluindo a do engenheiro responsável, e o benchmark anexado como evidência. O líder técnico lê por dez minutos, vê que o limite de taxa foi alterado e abre uma proposta substitutiva vinculada ao antigo nó. Ninguém escava no Slack. Essa é toda a promessa: as cadeias chegam ao acordo, a árvore o registra — e o registro responde a perguntas que você não sabia que seriam feitas.
Fontes e leituras adicionais
- Nygard, M. (2011). Documentando Decisões de Arquitetura. Blog da Cognitect.O ensaio que popularizou os ADRs: contexto, decisão, consequências, mantido com o código.
- Orientação Prescritiva da AWS — Registros de decisão arquitetônica.A estruturação RFC-vs-ADR e a dor de manutenção documentada que este tutorial existe para corrigir.
- Microsoft Azure Well-Architected Framework — Registros de decisões de arquitetura.Prática de ADR no contexto da revisão Well-Architected.
- A organização ADR no GitHub (adr.github.io).Modelos, ferramentas e as convenções acumuladas da comunidade — incluindo a prática do campo de status que este tutorial modela por meio de links.
Perguntas Frequentes
Qual é a diferença entre um RFC e um ADR?
Um RFC (pedido de comentários) é o processo de alcançar um acordo: uma proposta é circulada, alternativas são discutidas, objeções são levantadas e respondidas. Um ADR (registro de decisão de arquitetura) documenta o acordo uma vez alcançado: contexto, opções consideradas, decisão, consequências, status. O modo de falha de executá-los como artefatos separados é que tudo entre eles vaza — o debate acontece em chats e comentários de PR enquanto o registro é escrito posteriormente de memória. Executar o RFC como uma árvore de argumentos estruturada faz com que o ADR surja do próprio debate: nada é transcrito, então nada se perde na transcrição.
Por que os ADRs ficam obsoletos ou param de ser emitidos?
Porque escrevê-los é um trabalho de transcrição. O raciocínio genuíno acontece em threads do Slack, comentários de revisão e reuniões; depois, uma pessoa reconstrói uma seção de Contexto da memória, geralmente de forma breve e por último. As próprias orientações da AWS e da Microsoft notam a dor: os ADRs levam tempo para serem escritos e atualizados, e a gestão se torna complexa à medida que as decisões se multiplicam. As equipes não param de acreditar nos ADRs — elas param de pagar o imposto de transcrição. Fazer com que o debate e o registro sejam a mesma estrutura remove o imposto.
Como você realiza uma rodada de revisão de RFC com um registro?
Três movimentos estruturados, cada um um diálogo de quatro turnos com o autor da opção. Cadeias de perguntas e respostas para esclarecimento: pergunta, resposta, acompanhamento, resposta. Cadeias de revisão para objeções: avaliação, resposta, acompanhamento, resposta — com N revisores abrindo N cadeias paralelas sobre a mesma opção em vez de um único thread compartilhado, para que cada objeção permaneça atribuível e respondida. Cadeias de compromisso para divisões: um lado propõe a posição intermediária ao outro, e independentemente de resolver ou não, a cadeia completada registra que foi tentada. O ponto de verificação antes de decidir: nenhuma opção carrega uma pergunta sem resposta, e toda objeção substancial existe como uma cadeia completada.
Como funciona 'discordar e se comprometer' com registros de decisão?
A mecânica da cadeia a torna legível. Uma cadeia de Revisão que percorre seu curso completo — objeção, resposta, acompanhamento, resposta — e se completa sem acordo é o recibo de que a dissidência foi real, ouvida e respondida antes que o dissidente se comprometesse. Criticamente, completado não significa acordado: significa que a troca terminou. Relatar a conclusão como consenso fabrica um falso acordo e destrói o valor do mecanismo. O registro honesto mostra quatro fatos de uma só vez: consultado, respondido, ainda oposto, comprometido de qualquer maneira — que é exatamente o que torna o compromisso após a discordância razoável.
Os registros de decisão devem substituir os ADRs no repositório de código?
Não — e este tutorial diz isso explicitamente. Se a sua organização exige ADRs controlados por versão ao lado do código (muitas fazem isso, corretamente, por conformidade e acesso offline), mantenha-os: escreva o resumo em markdown de quatro seções a partir da árvore em cinco minutos e vincule-o de volta à discussão. A divisão de trabalho é clara: o ADR do repositório é o artefato de conformidade durável; a árvore contém o que o markdown não é bom — o debate ao vivo, as opções rejeitadas com suas justificativas, as objeções e suas respostas, e as classificações.
Como você marca um ADR como substituído?
Por convenção, não por um campo — e vale ser honesto que não há um status proposto/aceito/substituído embutido em um argumento. Modele a substituição criando a nova decisão como seu próprio argumento vinculado ao que ela substitui, declarando o que mudou (o limite de taxa elevado, o novo requisito). A antiga decisão permanece legível — deletá-la destruiria exatamente o raciocínio que a nova decisão precisa referenciar. Declare a convenção no acordo de trabalho da sua equipe para que seja mantida deliberadamente.
Pare de transcrever decisões. Comece a mantê-las.
Execute seu próximo RFC como uma árvore: opções com seu raciocínio, objeções como cadeias respondidas e um ADR que se escreve sozinho.
Iniciar teste gratuito de 14 dias