En qualsevol sistema que duri més d'uns mesos sorgeix la mateixa pregunta incòmoda: "per què vam fer això així?". La persona que va prendre la decisió ja no hi és, el context s'ha perdut i l'equip actual dubta entre respectar l'elecció o llençar-la per la borda sense entendre-la. La governança arquitectònica existeix per respondre aquesta pregunta i per assegurar coherència tècnica sense convertir-se en un fre burocràtic. Tradicionalment, governança evocava comitès pesats, documents de centenars de pàgines i un "arquitecte cap" que aprovava tot. Avui busquem el contrari: una governança lleugera, distribuïda i basada en decisions documentades de forma senzilla. L'eina estrella d'aquest enfocament són els Architecture Decision Records (ADR). En aquesta lliçó veurem què és la governança lleugera, com escriure ADR amb una plantilla, com funcionen els comitès d'arquitectura moderns i com definir estàndards que ajudin en comptes d'estorbar.

Contingut

  1. Què és la governança arquitectònica
  2. Governança pesada vs lleugera
  3. Architecture Decision Records (ADR)
  4. Plantilla d'ADR
  5. Exemple complet d'ADR
  6. Comitès d'arquitectura moderns
  7. Estàndards i guies (golden paths)
  8. Errors Comuns i Consells
  9. Exercicis
  10. Conclusió

  1. Què és la governança arquitectònica

La governança arquitectònica és el conjunt de pràctiques que asseguren que les decisions tècniques d'una organització siguin coherents, estiguin alineades amb els objectius de negoci i es mantinguin en el temps. Cobreix tres preguntes:

  • Qui decideix? Com es distribueix l'autoritat tècnica.
  • Com es decideix? El procés per prendre i documentar decisions.
  • Com s'assegura el compliment? Com es verifica que el que s'ha decidit es respecta.

L'objectiu no és controlar la gent, sinó reduir el cost de la coherència: que un equip no reinventi la roda, que les decisions importants no es prenguin a la lleugera i que el coneixement sobrevisqui a la rotació de persones. Una bona governança és invisible quan funciona i dolorosa només quan falta.

  1. Governança pesada vs lleugera

Aspecte Governança pesada (tradicional) Governança lleugera (moderna)
Autoritat Centralitzada en un arquitecte/comitè Distribuïda; equips amb autonomia
Decisions Aprovades per endavant per un òrgan Preses per qui les implementa, documentades
Documentació Documents extensos, sovint obsolets ADR breus versionats amb el codi
Compliment Revisions manuals, "portes" Automatitzat (fitness functions, linters)
Velocitat Lenta; el comitè és un coll d'ampolla Ràpida; el comitè assessora, no bloqueja
Risc Decisions desconnectades de la realitat Requereix maduresa i cultura d'equip

La governança lleugera no significa "cadascú fa el que vol". Significa moure la decisió al lloc on hi ha el coneixement (l'equip que construeix), però exigint que les decisions rellevants es documentin i es verifiquin. El comitè passa de porter a facilitador.

  1. Architecture Decision Records (ADR)

Un Architecture Decision Record (registre de decisió arquitectònica), idea popularitzada per Michael Nygard el 2011, és un document curt que captura una decisió arquitectònica significativa: el context en què es va prendre, la decisió en si i les seves conseqüències. Característiques clau:

  • Un per decisió. No és un document mestre, sinó una col·lecció de fitxes petites.
  • Immutable. Un ADR no s'edita un cop acceptat; si la decisió canvia, se n'escriu un de nou que substitueix l'anterior (estat "Reemplaçat per ADR-00X").
  • Versionat amb el codi. Viu al repositori, normalment a docs/adr/, perquè evolucioni al costat del sistema i es revisi en els pull requests.
  • Breu. Una o dues pàgines. Si necessites més, probablement siguin diverses decisions.

Què mereix un ADR? Decisions que són costoses de revertir o que afecten molts: triar un estil arquitectònic, una base de dades, un protocol de comunicació, una política d'autenticació, etc. No documentis amb ADR el nom d'una variable.

  1. Plantilla d'ADR

Una plantilla minimalista i molt utilitzada, en Markdown:

# ADR-001: <Títol curt i imperatiu de la decisió>

## Estat
Proposat | Acceptat | Rebutjat | Obsolet | Reemplaçat per ADR-00X

## Context
Quina situació o problema ens obliga a decidir? Forces en joc,
restriccions tècniques i de negoci, supòsits. Fets, no opinions.

## Decisió
"Decidim <X> per a <objectiu>." Una afirmació clara en veu activa.

## Conseqüències
Resultats positius i negatius de la decisió. Què es torna més fàcil,
què es torna més difícil, quins riscos assumim i quin deute generem.

## Alternatives considerades
Altres opcions avaluades i per què es van descartar.

Repassem cada secció i per què importa:

  • Estat: permet saber d'un cop d'ull si la decisió segueix vigent. El flux típic és ProposatAcceptat; més endavant pot passar a Reemplaçat.
  • Context: és la part més valuosa d'aquí a dos anys. Explica les forces que van portar a decidir. Sense context, una decisió correcta sembla arbitrària.
  • Decisió: l'afirmació concreta. En veu activa ("Decidim fer servir PostgreSQL") perquè no hi hagi ambigüitat sobre què es va triar.
  • Conseqüències: l'honestedat aquí és or. Tota decisió té un cost; anomenar-lo evita que l'equip futur se senti enganyat.
  • Alternatives considerades: demostra que es va pensar. Evita que algú proposi d'aquí a un any una opció ja descartada per bones raons.

  1. Exemple complet d'ADR

# ADR-007: Adoptar comunicació asíncrona per esdeveniments entre Comandes i Facturació

## Estat
Acceptat (2026-03-12)

## Context
El mòdul de Facturació s'invocava de forma síncrona des de Comandes en
confirmar una compra. Quan Facturació està lenta o caiguda, la confirmació
de la comanda falla, encara que el pagament ja s'ha cobrat. En pics de campanya hem
vist timeouts i comandes perdudes. Negoci exigeix que confirmar la comanda no
depengui de la disponibilitat de Facturació.

## Decisió
Decidim desacoblar Comandes i Facturació mitjançant esdeveniments asíncrons.
Comandes publicarà un esdeveniment `PedidoConfirmado` en un broker de missatgeria
(RabbitMQ). Facturació el consumirà i generarà la factura de forma diferida.

## Conseqüències
Positives:
- Confirmar una comanda ja no depèn de Facturació: més disponibilitat.
- Facturació pot processar al seu ritme i reintentar davant de fallades.

Negatives:
- La factura ja no és immediata: consistència eventual. El client veurà
  "factura en procés" durant segons.
- Augmenta la complexitat operativa: cal monitoritzar el broker i les cues.
- Necessitem idempotència a Facturació per no duplicar factures si l'
  esdeveniment es reentrega.

## Alternatives considerades
- Mantenir síncron amb reintents i circuit breaker: redueix el problema però
  no l'elimina; la confirmació segueix acoblada a Facturació.
- Crida síncrona amb timeout curt i cua interna: afegeix complexitat sense les
  garanties del broker.

Observa com l'exemple aplica la plantilla amb dades reals: el context narra un problema concret (timeouts en campanya), la decisió és inequívoca (esdeveniments via RabbitMQ) i les conseqüències no amaguen el cost (consistència eventual, necessitat d'idempotència). Qualsevol que llegeixi això d'aquí a dos anys entendrà per què Facturació és asíncrona i no intentarà "arreglar-ho" tornant-la síncrona.

  1. Comitès d'arquitectura moderns

El comitè d'arquitectura no ha desaparegut, però ha canviat de paper. En el model modern sol organitzar-se com un ART (Architecture Review Team) o, més informalment, una guild d'arquitectura:

  • Composició rotatòria: no només "arquitectes", sinó enginyers sènior de diversos equips. Evita la torre de vori i reparteix el coneixement.
  • Funció assessora, no de porter: revisa ADR proposats, aporta perspectiva transversal i detecta encavalcaments o incoherències, però rarament bloqueja.
  • Cadència lleugera: reunions curtes i freqüents, idealment sobre ADR ja escrits (es revisa un document, no s'improvisa en una pissarra).
  • Decisions per consens informat: si no hi ha acord, l'equip que assumeix el cost decideix, deixant-ho registrat.
graph TD
    Equipo[Equip proposa ADR] --> PR[Pull Request amb l'ADR]
    PR --> Guild[Guild d'Arquitectura revisa]
    Guild -->|comentaris| PR
    Guild -->|sense objeccions de pes| Acept[Estat: Acceptat]
    Acept --> Repo[(Repositori docs/adr)]

El flux del diagrama integra la governança en el procés de desenvolupament: l'ADR es proposa com un pull request, es discuteix com qualsevol canvi de codi i, en aprovar-se, queda versionat. La governança deixa de ser un esdeveniment a part i es torna part de la feina diària.

  1. Estàndards i guies (golden paths)

Perquè els equips tinguin autonomia sense caos, l'organització defineix estàndards i golden paths (camins daurats):

  • Estàndard: una regla que s'ha de complir ("tota API REST exposa OpenAPI", "els logs surten en JSON"). Idealment, verificable de forma automàtica.
  • Golden path (camí daurat): la forma recomanada i suportada de fer una cosa comuna (plantilla de microservei, pipeline de CI/CD llest). No és obligatori, però és el camí fàcil: qui se'n surt, assumeix el cost.
  • Guia: recomanació sense obligatorietat ("preferim injecció per constructor").

La clau és distingir el que és obligatori i automatitzable del que és recomanat. Com més es pugui verificar amb eines (linters, fitness functions, plantilles), menys cal vigilar a mà. Un bon estàndard no es documenta en un PDF: es codifica en una comprovació que fa fallar el build si s'incompleix.

# Exemple: un estàndard codificat com a check al pipeline de CI
# "Tota imatge de contenidor ha de declarar un usuari no-root"
verificar-usuario-no-root:
  stage: seguridad
  script:
    - test "$(grep -c '^USER ' Dockerfile)" -ge 1 || (echo "Falta directiva USER" && exit 1)

Aquest fragment converteix un estàndard de seguretat ("no executar com a root") en una comprovació que fa fallar el build si el Dockerfile no inclou una directiva USER. És governança executable: ningú no ha de recordar la regla ni revisar-la a mà, perquè el pipeline la imposa. Veurem aquesta filosofia portada a l'extrem en la propera lliçó sobre fitness functions.

  1. Errors Comuns i Consells

  • Documentació que ningú no llegeix ni manté. Un wiki gegant i obsolet és pitjor que res. Prefereix ADR curts versionats amb el codi.
  • Editar ADR acceptats. Trenca la traçabilitat històrica. Si la decisió canvia, escriu un ADR nou que reemplaci l'anterior.
  • Comitè que bloqueja tot. Si cada decisió necessita aprovació prèvia d'un òrgan central, el lliurament es paralitza. El comitè assessora; l'equip decideix i documenta.
  • Documentar decisions trivials. Reserva els ADR per a decisions cares de revertir o que afecten molts. No documentis el format d'una data amb un ADR.
  • Estàndards només sobre paper. Si un estàndard no es pot verificar automàticament, s'incomplirà en silenci. Codifica'l sempre que puguis.
  • Consell: numera els ADR de forma seqüencial i mai no reutilitzis números. L'històric complet, inclosos els rebutjats i reemplaçats, és part del valor.

  1. Exercicis

Exercici 1. Decideix quines d'aquestes decisions mereixen un ADR i quines no: (a) triar entre REST i gRPC per a la comunicació entre serveis; (b) el nom del paquet arrel; (c) fer servir autenticació amb JWT; (d) l'ordre dels imports.

Exercici 2. Escriu un ADR seguint la plantilla per a aquesta decisió: "l'equip farà servir PostgreSQL com a base de dades principal en comptes de MongoDB". Inventa un context raonable.

Exercici 3. La teva organització vol garantir que tots els serveis exposin un endpoint /health. Ho plantejaries com a guia, estàndard o golden path? Com ho verificaries?

Solucions

Solució 1. Mereixen ADR: (a) i (c), perquè són decisions costoses de revertir i afecten tots els equips. No mereixen ADR: (b) i (d), que són convencions trivials; van en una guia d'estil o en el linter, no en un ADR.

Solució 2. (Exemple) Estat: Acceptat. Context: necessitem transaccions ACID i relacions fortes entre comandes, línies i clients; l'equip domina SQL i no preveiem dades sense esquema. Decisió: decidim fer servir PostgreSQL com a base de dades principal. Conseqüències: guanyem integritat referencial i transaccions; renunciem a la flexibilitat d'esquema de MongoDB i assumim que dades molt variables requeririen columnes JSONB. Alternatives: MongoDB (descartat: no necessitem esquema flexible i perdríem transaccions multidocument fàcils).

Solució 3. El millor és un estàndard ("tot servei exposa /health") reforçat amb un golden path (la plantilla de servei ja inclou l'endpoint, així complir-lo és gratis). La verificació s'automatitza: un test de contracte en CI que arrenca el servei i comprova que /health respon 200, fent fallar el build si no.

  1. Conclusió

La governança arquitectònica moderna aposta per ser lleugera, distribuïda i executable: moure les decisions a l'equip que té el coneixement, documentar-les amb ADR breus i immutables versionats al costat del codi, i convertir el comitè en un assessor en comptes d'un porter. Hem vist com escriure ADR amb una plantilla i un exemple complet, com operen les guilds d'arquitectura i com els estàndards guanyen força quan es codifiquen en comprovacions automàtiques en comptes de quedar-se sobre paper. Aquesta darrera idea —verificar l'arquitectura automàticament— és el pont perfecte cap a la lliçó següent: Fitness Functions i Arquitectura Evolutiva, on aprendrem a escriure proves que comproven que l'arquitectura es manté sana a mesura que el sistema evoluciona.

Curs d'Arquitectura d'Aplicacions

Mòdul 1: Fonaments de l'Arquitectura d'Aplicacions

Mòdul 2: Principis i Tàctiques de Disseny

Mòdul 3: Estils i Patrons Arquitectònics

Mòdul 4: Arquitectures Distribuïdes i Microserveis

Mòdul 5: Arquitectures Dirigides per Esdeveniments i Missatgeria

Mòdul 6: Disseny Dirigit pel Domini (DDD)

Mòdul 7: Dades i Persistència

Mòdul 8: Arquitectura al Núvol i Desplegament

Mòdul 9: Qualitat, Seguretat i Observabilitat

Mòdul 10: Evolució, Governança i Casos Pràctics

© Copyright 2026. Tots els drets reservats