Meetup Arkup Juin 2025
https://meetup-arkup-juin-2025.florat.net/
© 2025 Bertrand Florat – CC BY-SA 4.0

đŸ“· Le support est disponible Ă  :

https://meetup-arkup-juin-2025.florat.net/

ou simplement :

https://florat.net/

đŸ—łïž Sondage : Documentation as Code

Qui dans la salle


  • ✋ A dĂ©jĂ  entendu parler de "documentation as code" ?
  • 📄 Documente encore principalement avec des outils bureautiques ?
  • đŸ› ïž Utilise un outil comme Asciidoc, Markdown, PlantUML, Antora, MkDocs
 ?
  • 🧙 GĂ©nĂšre de la doc as code (depuis du code ou des diagrammes)
  • 🔁 A intĂ©grĂ© la doc dans un CI/CD, ou dans une PR/MR comme du code ?

🧭 Agenda (1H)

  • 0 - Les enjeux de la documentation (gĂ©nĂ©rale et d'architecture)
  • 1 - Les challenges de la documentation traditionnelle
  • 2 - La documentation d'architecture As Code
  • 3 - Les challenges de la doc As Code
  • 4 - Take-away & perspectives

📚 0 — Les enjeux de la documentation

(en général et en architecture en particulier)

📊 Temps passĂ© par un·e architecte Ă  produire de la documentation

  • Conception & rĂ©flexions techniques : 30–40 %
  • RĂ©daction de documentation : 20–30 % (15 % sur projets trĂšs agiles, 40 % dans les secteurs trĂšs rĂ©glementĂ©s)
  • RĂ©unions & arbitrages : 20–30 %
  • Communication & vulgarisation : 10–15 %
  • Veille technologique : 5–10 %

⚠ Disclaimer

  • Documentation : sujet particuliĂšrement incompris et mal maĂźtrisĂ© par les Ă©quipes.
  • Le plus souvent :
    • đŸ—‚ïž Trop de documentation...
    • 📉 Pas assez de documentation...
    • 📄 Pas le bon niveau de documentation...
    • ☠ Documentation morte (non Ă  jour, jamais lue)

📈 Le ROI de la documentation

  • Une activitĂ© qui dĂ©rape trĂšs facilement :

    • Documentation inutile, hors sujet, inmaintenable
    • CoĂ»t Ă©levĂ©, retour hypothĂ©tique voire nĂ©gatif
    • En Lean, on appelle ça du Muda (gaspillage)
  • Écrire une doc, c’est un engagement :

    • Beaucoup aiment Ă©crire, peu souhaitent maintenir
    • Écrire implique de maintenir dans la durĂ©e ⚠

📱 Pourquoi documenter ?

🌍 Communiquer des informations importantes

  • 📡 Dans l’espace :
    • Organisations distribuĂ©es, tĂ©lĂ©travail, dĂ©calage horaire

  • ⏳ Mais surtout dans le temps :
    • Pour les autres : TMA, futurs dĂ©veloppeurs, architectes

    • Pour soi-mĂȘme dans 6 mois 😅
    • Pour les transferts de compĂ©tences, etc.

đŸ›Ąïž Documenter pour avancer et cranter les sujets

  • Moins de malentendus ➔ Ă©conomies de temps, d’argent et de frustrations
  • Tracer les choix et leurs raisons (ex. : ADR) ➔ Ă©viter de reposer sans cesse les mĂȘmes questions
  • Economiser du temps et tester la motivation en renvoyant d'abord sur la doc

📌 Ce que la documentation doit contenir

  • TOUT ce qui est nĂ©cessaire, mais QUE ce qui est nĂ©cessaire

  • đŸ§Ș Tests de Litmus : Dois-je documenter ?

    • Une personne externe compĂ©tente dans le domaine a-t-elle besoin d’explications complĂ©mentaires au code/Ă©crans ? Si non ➔ pas de doc
    • Documenter essentiellement ce qui ne peut pas ĂȘtre devinĂ© (ex. : respect d’une rĂ©glementation)
    • RĂ©pondre Ă  la plupart des « WTF » d’une nouvelle personne sur le projet
    • Est-ce que je l’afficherais au mur dans l’open space ?

đŸš« Et ne doit pas :

  • Contenir du bullshit :

    • Historique, dĂ©tails inutiles, rĂšgles de l’art, Ă©lĂ©ments vagues ou trop gĂ©nĂ©raux
  • RĂ©pĂ©ter (principe DRY 🔄) :

    • PrĂ©fĂ©rer rĂ©fĂ©rencer les documents existants
  • Contenir des informations Ă©phĂ©mĂšres

  • Compenser du code peu explicite (voir Clean Code / Screaming Architecture 📖)

  • Être inadaptĂ©e Ă  son audience 🎯

📋 Petit exemple fonctionnel

Une application d’état civil permet de saisir les dates de naissance avec trois champs entiers et non pas un Date Picker

WTF ????

Que doit contenir (ou pas) la doc dans ce cas ?

💬 Avez-vous un problùme de doc ? Comptez les... :

🙄 "Ça doit ĂȘtre quelque part dans Confluence
"

😅 "Je l’ai fait, mais je ne sais plus comment
"

đŸ€” "Tu peux demander Ă  Maurice, c’est lui qui sait
"

đŸ«Ł "Ah oui, le guide de DEV
 mais il n’est plus Ă  jour depuis 2021
"

✅ Bonne documentation

  • Accessible : trouvable en deux clics ou via une recherche simple
  • Pertinente : adaptĂ©e au public (dĂ©veloppeur, ops, manager
)
  • Actionnable : apporte des exemples concrets, des commandes, des extraits de code
  • Vivante : maintenue Ă  jour, intĂ©grĂ©e dans les cycles de dĂ©veloppement

❌ Mauvaise documentation

  • Inaccessible : fichiers perdus, wiki abandonné 
  • EncyclopĂ©dique : trop de dĂ©tails inutiles, illisible
  • Vague : « Il faut configurer le proxy »  Mais comment ?
  • PĂ©rimĂ©e : dĂ©crit un monde qui n’existe plus

📖 La documentation vivante (Cyrille Martraire)

« Une documentation fiable, utile, et toujours à jour. »

✹ Principes clĂ©s

  • ✅ Fiable : toujours en phase avec le logiciel livrĂ©, Ă  tout moment
  • ⚙ À faible effort : facile Ă  maintenir, mĂȘme lors de changements
  • đŸ€ Collaborative : favorise les Ă©changes et le partage de savoir
  • 🔎 Porteuse de sens : met en lumiĂšre les enjeux, dĂ©clenche des retours et aide Ă  mieux dĂ©cider

đŸ—Łïž L'importance de L'UL (Ubiquitus Language)

  • UL issu du Domain-Driven Design (DDD) d’Eric Evans
  • Objectif : un langage partagĂ© entre dĂ©veloppeurs, experts mĂ©tier, testeurs et architectes
  • Utiliser les mĂȘmes termes mĂ©tier partout (code, doc, tests, diagrammes)
  • Éviter les synonymes et les variations
  • Favorise la comprĂ©hension entre les parties prenantes

❓ Quid de la documentation d’architecture en particulier ?

  • Tout ce qui a Ă©tĂ© dit prĂ©cĂ©demment s’applique aussi aux documents d’architecture

  • PrĂ©fĂ©rer les diagrammes au texte (UML, C4, BPMN, ArchiMate en particulier)

  • Ne pas hĂ©siter Ă  commenter les diagrammes (directement dans le diagramme ou dans le document parent avec des dĂ©tails pertinents : tips / warnings)

  • Être honnĂȘte :

    • Lister les hypothĂšses d’architecture et Ă©tudes en cours dans un chapitre « Points non statuĂ©s » pour chaque vue
    • L’incertitude doit ĂȘtre affichĂ©e, pas masquĂ©e

📚 Les documentations principales de l’architecte

  • đŸ—ïž Dossier d’Architecture (DA)
    Vue d’ensemble des choix, contextes, exigences et contraintes

  • 🧠 ADR – Architecture Decision Records
    Journal des dĂ©cisions d’architecture, horodatĂ©es et justifiĂ©es

  • 📝 Suivi des points d’architecture
    Comptes-rendus des réunions, discussions et arbitrages techniques

  • 🔐 Études techniques (sĂ©curitĂ©, performance, etc.) et bilans de POC
    Analyses approfondies pour justifier ou évaluer des solutions

  • đŸŽ€ Supports de prĂ©sentation
    Slides pour comitĂ©s d’architecture, parties prenantes, Ă©quipes

🛑 Les diagrammes : anti-patterns principaux

  • MĂ©lange de niveaux d’abstraction diffĂ©rents

  • Trop d’élĂ©ments (~ > 20)

  • MĂ©tarĂ©prĂ©sentations floues :

    • Pas de lĂ©gende ou difficile Ă  comprendre
    • Trop de couleurs, formes, types de flĂšches
  • FlĂšches Ă  double sens 🔁 (on ne sait pas qui initie la communication)

✅ Les diagrammes : bonnes pratiques principales

  • MĂ©tarĂ©prĂ©sentations simples, niveau d’abstraction homogĂšne, nombre raisonnable d’élĂ©ments

  • Actions explicites sur les flĂšches

    • Indiquer le type d’échange ou de flux
    • Indiquer la nature du flux (lecture / Ă©criture / exĂ©cution), si utile

Exemple C4 : diagramme de container

đŸ—ƒïž 1 - Le problĂšme avec la documentation traditionnelle

💡 Ce que j’entends par « documentation traditionnelle »

Répond à la plupart de ces critÚres :

  • Documents bureautiques binaires : Word, PDF, PowerPoint
 (mĂȘme partagĂ©s)

  • Statique et figĂ©e dĂšs sa publication

  • Mise Ă  jour fastidieuse → risque Ă©levĂ© de devenir rapidement obsolĂšte

  • TraçabilitĂ© des modifications faible ou manuelle

  • Peu intĂ©grĂ©e aux outils et processus de dĂ©veloppement

  • Existe uniquement comme livrable d’un processus, pas orientĂ©e produit

đŸ—ƒïž Faible Ă©volutivitĂ© et traçabilitĂ©

  • Peu ou pas de collaboration active avec les parties prenantes

    • DĂ©cisions prises en silo
    • Peu adaptĂ© aux revues par pair (suivi des modifications mais pas de MR)
  • Faible traçabilitĂ© des Ă©volutions, en particulier sur les diagrammes (binaires)

  • DifficultĂ© en cas de renommage ou de rĂ©organisation

    • RĂ©fĂ©rences croisĂ©es cassĂ©es
    • Renommages / refactorings risquĂ©s et peu pratiques sur un lot de documents

đŸ€– Une doc moins adaptĂ©e aux LLM

  • Documents bureautiques peu formels : structure faible, pas de validation possible du contenu ou des mĂ©tadonnĂ©es (type Git hooks)

  • Perte de sens en cas d’entraĂźnement de LLM

    • Contenu essentiellement binaire, peu structurĂ©, plus difficile Ă  exploiter par l’IA
    • Plus difficile de faire gĂ©nĂ©rer du contenu

🔒 Plus de risques de fuite

  • Aspiration de drives partagĂ©s
  • Export et diffusion incontrĂŽlĂ©s des fichiers
  • MĂ©tadonnĂ©es oubliĂ©es (ex. : devis pour un autre client
)
  • 📈 VolumĂ©trie importante (surtout en cas de multi-versions)

⏱ Des efforts de mise en page importants

  • Trop de temps consacrĂ© Ă  la mise en page du texte et au polissage des diagrammes
  • EsthĂ©tique privilĂ©giĂ©e au dĂ©triment du fond
  • CrĂ©ation de diagrammes figĂ©s nĂ©cessitant de lourdes reprises pour toute modification
  • Peu de rĂ©utilisation et pas de factorisation des reprĂ©sentations

🚀 2 – La Documentation As Code

đŸ›ïž Documentation traditionnelle vs As Code

Traditionnelle 📚 Vivante / As Code đŸ’»
Fichiers Word / PDF statiques Texte versionné (Git)
Peu ou pas de traçabilité Historique, tags et auteurs tracés
Rapide obsolescence Mise Ă  jour continue
Non intégrée aux workflows Intégrée dans le cycle DevOps
Lecture linéaire Navigation hypertexte
Diagrammes figés Diagrammes générés à partir du code
Peu collaborative Collaboration via revues de code / MR/PR

🎯 En rĂ©sumĂ© : passer d’un document que l’on subit Ă  un actif vivant et maĂźtrisĂ© du projet

🧰 Utiliser Git pour documenter efficacement

  • Historique complet : chaque modification est enregistrĂ©e
  • Tags : versionnez les jalons de votre documentation (v1.0, v2.0...)
  • Blame : savoir qui a Ă©crit quoi, et quand
  • Diffs : comparaison facile entre deux versions
  • Revue via merge request / pull request
  • Revenir dans le temps : checkout d’une version antĂ©rieure

đŸ„· Et au-delĂ  de Git de base

  • CI/CD pour valider / publier automatiquement votre doc (PDF, HTML
)
  • Git hooks : automatiser la mise Ă  jour d’index ou de mĂ©tadonnĂ©es
  • TraçabilitĂ© / conformitĂ© via signature GPG sur commits/tags (utile dans les environnements sensibles)

📄 L’intĂ©rĂȘt des langages de balisage lĂ©gers : AsciiDoc / Markdown

  • Lisibles en brut : pas besoin d’outil pour lire ou modifier
  • SimplicitĂ© : syntaxe intuitive pour Ă©crire vite
  • Faciles Ă  gĂ©nĂ©rer : ex. : spĂ©cifications exĂ©cutables, rapports de tests Spock
  • Faciles Ă  versionner : parfait pour Git (diffs propres, pas de binaire)
  • Bonne IntĂ©gration sur les plateformes : disponible de base sur Gitlab, Github...
  • Extensibles : AsciiDoc permet des blocs structurĂ©s (admonitions, macros, includes
)

🏆 Pourquoi AsciiDoc pour la doc technique avancĂ©e ?

  • Structure riche : sections, blocs, tableaux complexes
  • Macros & includes : contenu rĂ©utilisable, factorisable
  • Table des matiĂšres (TOC), glossaires, bibliographies
  • Admonitions : NOTE, TIP, CAUTION, etc.
  • Diagrammes intĂ©grĂ©s (avec plugins): PlantUML, Mermaid

  • Sorties variĂ©es : HTML5, PDF, DocBook


⚙ Comparaison d'outils de documentation As Code Open Source

Outil Format source Stack technique Points forts Limites
Docusaurus Markdown React + Node.js UX moderne, thÚmes, blog, versioning Moins adapté aux docs backend/archi
Antora AsciiDoc Ruby (Asciidoctor) Multi-repo, modulaire, orienté architecture Plus sobre, nécessite structuration stricte
MkDocs Markdown Python (YAML config) Léger, rapide, nombreux plugins Moins modulaire que Antora
AsciiDoc AsciiDoc Ruby (Asciidoctor) Syntaxe riche, blocs, admonitions, includes Moins répandu que Markdown

🎯 Quel outil pour quel usage ?

  • đŸ–„ïž Docusaurus : produit/API, design et navigation moderne
  • đŸ§± Antora : doc d'archi, microservices, Ă©quipes distribuĂ©es
  • 🚀 MkDocs : doc rapide Ă  mettre en place, mono-repo
  • 🔧 AsciiDoc seul : doc technique avancĂ©e, sans framework
💡 Remarque : Pour tirer profil des diffĂ©rents outils, pipelines, process mis en place, privilĂ©giez l'uniformisation du language light markup au sein d'un projet voire de l'organisation.

🚀 Antora : plateforme de doc modulaire

  • Organisation par composants, versions, modules
  • Multi-dĂ©pĂŽts Git : chaque Ă©quipe gĂšre sa doc dans son propre repo
  • Mise Ă  jour automatique des sources
  • Navigation unifiĂ©e sur un portail de documentation
  • ThĂ©matisation et publication pro (docs produit, API, guides
)

✅ Parfait pour la doc d’architecture, les microservices, et la documentation produit distribuĂ©e

✅ Les SpĂ©cifications ExĂ©cutables

  • Traduction directe d’une exigence en un test automatisĂ©
  • Structuration des tests en Gherkin (Given / When / Then)
  • Servent Ă  la fois Ă  :
    • Documenter les comportements attendus
    • VĂ©rifier en continu leur respect
  • Forme lisible par les humains : dĂ©veloppeurs, PO, QA


đŸ§Ș Exemple de spĂ©cification avec Spock

class CalculatriceSpec extends Specification {

  def "La somme de deux nombres – Gherkin style"() {
    given: "une calculatrice"
    def calculatrice = new Calculatrice()

    when: "je calcule la somme de #a et #b"
    def resultat = calculatrice.somme(a, b)

    then: "le rĂ©sultat doit ĂȘtre #result"
    resultat == result

    where:
    a  | b  || result
    1  | 2  || 3
    0  | 0  || 0
    -1 | 1  || 0
  }
}

📄 GĂ©nĂ©ration automatique de documentation

  • Avec un plugin Spock Reports + conversion AsciiDoc/HTML/PDF
  • Exemple de sortie :
== Spécification : CalculatriceSpec

=== la somme de #a et #b doit ĂȘtre #result

[cols="1,1,1"]
|===
| a | b | result
| 1 | 2 | 3
| 0 | 0 | 0
| -1 | 1 | 0
|===

đŸ„· Exemple de site Antora multi-dĂ©pĂŽts Ă  partir de documentation gĂ©nĂ©rĂ©e

Visualisation des spécifications sur un portail de documentation :

đŸ› ïž Outils de diagrammes textuels

  • Description des diagrammes en texte brut
  • Stockables dans Git, versionnables, diffables
  • IntĂ©grables dans les docs AsciiDoc/Markdown
  • GĂ©nĂ©rables automatiquement dans les pipelines CI/CD

Exemples populaires :

  • Mermaid : syntaxe simple, intĂ©grĂ© Ă  GitHub, Obsidian, VS Code...
  • PlantUML : trĂšs expressif, idĂ©al pour la modĂ©lisation logicielle (UML, C4
)
  • Kroki : plateforme qui agrĂšge plus de 20 moteurs de rendu de diagrammes

✍ Exemples de syntaxe

Mermaid (diagramme d'activité)

graph TD
  A[ Anyone ] -->|Can help | B( Go to github.com/yuzutech/kroki )
  B --> C{ How to contribute? }
  C --> D[ Reporting bugs ]
  C --> E[ Sharing ideas ]
  C --> F[ Advocating ]

PlantUML (use case)

@startuml
:Utilisateur: --> (S'authentifier)
(S'authentifier) --> (Accéder aux données)
@enduml

Résultat : un diagramme lisible, versionnable, reproductible !

⚙ IntĂ©grations populaires

  • IDE :

    • VS Code : extensions pour Mermaid, PlantUML, Graphviz, Kroki
    • IntelliJ IDEA : support natif de PlantUML, Mermaid via plugins
  • Plateformes :

    • GitHub, GitLab : prĂ©visualisation automatique intĂ©grĂ©e

đŸ§± Le modĂšle C4 — Diagrammes

Source : https://c4model.com/

đŸ‘· C4 dans la vraie vie

  • À coupler avec PlantUML (support intĂ©grĂ© nativement)
  • Mes diagrammes prĂ©fĂ©rĂ©s :
    • System Landscape (en remplacement du diagramme de contexte), utile pour l’architecture globale
    • Diagramme de conteneur : le plus utilisĂ© de loin
    • Diagramme de dĂ©ploiement : pour reprĂ©senter l'infrastructure
  • Les diagrammes dynamiques : version amĂ©liorĂ©e diagrammes de sĂ©quence UML
  • Éviter l’abus de diagrammes de composants (sur-documentation) et de code (niveau UML)
  • Utiliser les sprites (plusieurs milliers inclus dans PlantUML)
  • Parfois moins adaptĂ© qu’Archimate : urbanisation SI, EA, TOGAF
💡 Remarque : Je trouve le terme diagramme de conteneur confusant. J'utilise le terme diagramme d’unitĂ©s dĂ©ployables.

💡 Exemple de C4 en plantuml

@startuml
   !include <C4/C4_Container>
   !include <tupadr3/devicons2/chrome>
   !include <tupadr3/devicons2/java>
   !include <tupadr3/devicons2/postgresql>
   LAYOUT_LEFT_RIGHT()
   Container(browser, "Browser","Firefox or Chrome", $sprite="chrome")
   Container(api_a, "API A","Spring Boot", $sprite="java")
   ContainerDb(db_a, "Database A","Postgresql", $sprite="postgresql")
   Rel(browser,api_a,"HTTPS")
   Rel_R(api_a,db_a,"pg")
@enduml

đŸ„· La factorisation des diagrammes

Les diagrammes As Code permettent la factorisation de librairies (Ă  utiliser en plantuml avec remove @unlinked) :

fragments.iuml:

!startsub dmz
  Container(browser, "Browser","Firefox or Chrome", $sprite="chrome")
  Container(api_a, "API A","Spring Boot", $sprite="java")
  Container(api_b, "API B (hors contexte)","Python", $sprite="python")
!endsub
!startsub intranet
  ContainerDb(db_a, "Database A","Postgresql", $sprite="postgresql")  
!endsub

File diags-1.puml:
@startuml use-case-1
  remove @unlinked
  !includesub fragments.iuml!dmz
  !includesub fragments.iuml!intranet
    
  Rel(browser,api_a,"HTTPS")
  Rel_R(api_a,db_a,"pg")
@enduml

đŸ„· Pattern : diagrammes d'inventaire

  • Regrouper les unitĂ©s dĂ©ployables dans des librairies rĂ©utilisables, dĂ©coupĂ©es par zones fonctionnelles.
  • IntĂ©grer dans le DA (vue applicative) une big picture de l'inventaire, sans afficher les relations.

đŸ„· Pattern : diagrammes dynamiques

  • IntĂ©grer dans le DA (vue applicative) une big picture des principales dĂ©pendances applicatives.

đŸ„· Pattern : diagrammes de chaĂźne de liaison

  • Pour chaque feature, reprĂ©senter une chaĂźne de liaison synchrone composĂ©e d’appels successifs.

đŸ„· La notion de coordonnĂ©e d’architecture

  • Si un DA contient des dizaines voire des centaines de diagrammes, il devient difficile de s’y rĂ©fĂ©rer prĂ©cisĂ©ment (par exemple, pour discuter d’un flux en production).
  • Nous dĂ©coupons les features en x chaĂźnes de liaison synchrones de n appels.
  • Exemple de coordonnĂ©es pour un flux :
    Flux numĂ©ro 5 de la chaĂźne numĂ©ro 3 de la feature enregistrement de la commande → timeout sur com-3:5
    ➔ RĂ©fĂ©rence directe dans les tickets, post-mortems, alertes, etc.

đŸ„· La gĂ©nĂ©ration de matrice de flux depuis les diagrammes

Exemple réel (à lancer depuis la CI-CD ou à la main) sur un diagramme Plantuml:

# Vers queues
' cat diagrams/modules/dynamic.puml | grep Rel | awk -F'(' {'print $2'} |  sed 's/ //g' \
  | awk -F',' {'if ($1!=$2)print "| `"$1"` | `"$2"`"'}  | grep queue  | sed 's/_/-/g' | awk '!seen[$0]++'  | sort
# Depuis et vers api:
' cat diagrams/modules/dynamic.puml | grep Rel | awk -F'(' {'print $2'} |  sed 's/ //g' \
  |  awk -F',' {'if ($1!=$2)print "| `"$1"` | `"$2"`"'}  | grep api | grep -vE 'frontal|appelant|pdf|trusted' | sed 's/_/-/g' | awk '!seen[$0]++'  | sort
# Vers -fs ou -obj :
' cat diagrams/modules/dynamic.puml | grep Rel | awk -F'(' {'print $2'} |  sed 's/ //g' \
  |  awk -F',' {'if ($1!=$2)print "| `"$1"` | `"$2"`"'}  | grep -E '_fs|_obj' | sed 's/_/-/g' | awk '!seen[$0]++'  | sort
# Vers bases de données
' cat diagrams/modules/dynamic.puml | grep Rel | awk -F'(' {'print $2'} |  sed 's/ //g' \
  |  awk -F',' {'if ($2 ~ /ma_base$|mon_autre_base$/)print "| `"$1"` | `"$2"`"'}  |  awk '!seen[$0]++'  | sort

Exemple partiel de sortie Asciidoc prĂȘte Ă  coller dans le DA :

|====
|Source|Destination

| batch_xyz | base_1
| api_y | base_2
...

đŸ—‚ïž Le Dossier d’Architecture As Code

  • BasĂ© sur du light markup (idĂ©alement AsciiDoc)
  • Diagrammes textuels intĂ©grĂ©s (PlantUML, Mermaid
)
  • Utilisation de Git et des Merge Requests pour la collaboration
  • Peut ĂȘtre rendu et consolidĂ© dans un site Antora
  • “DĂ©veloppĂ©â€ dans un IDE (VS Code recommandĂ©)
  • Mis Ă  jour en continu, avec une revue annuelle complĂšte
  • Beaucoup d'admonitions (TIPS, WARNING...) : bon signe de l'utilitĂ© du DA

📘 Une proposition de modĂšle de DA sur Ă©tagĂšre

https://github.com/bflorat/modele-da


  • DĂ©coupe l’architecture solutions en cinq vues
  • Structure chaque vue en Contraintes, ENF et Solutions
  • Approche "check-list" : aide Ă  ne pas oublier les sujets importants
  • IntĂšgre l’incertitude (hypothĂšses / points Ă  statuer
)
  • Licence CC Attribution - Partage dans les mĂȘmes conditions
  • Existe aussi en version anglaise
  • PrĂȘt Ă  l’usage : modĂšles vierges, manuel utilisateur, outils d’export

  • Projet Open Source – Contributions bienvenues !

📄 Les ADR (Architecture Decision Records)

  • Un dossier d’architecture (DA) ne doit intĂ©grer que la solution retenue
  • L’historique des choix et leurs raisons figurent dans des ADR associĂ©s
  • Objectif : permettre la comprĂ©hension des dĂ©cisions a posteriori et faciliter leur partage
  • Un bon ADR doit ĂȘtre : court, clair, pertinent, accessible, traçable (Git), transparent
  • Plusieurs formats possibles — je recommande celui de ThoughtWorks :
    • 🕓 Historique et statut actuel, avec noms des validateurs
    • 📚 Contexte : description du problĂšme et des options envisagĂ©es, avec analyse rapide (forces/faiblesses ou SWOT)
    • ✅ DĂ©cision : choix clair, non ambigu (ex. : Solution 2 retenue)
    • 📌 ConsĂ©quences : impacts pratiques (besoin en budget, suivi particulier, nouveaux outils...)

✅ Exemple d'ADR

## Historique
Statut: `VALIDE`

* Proposé par Jean Dupont le 02/01/2020  
* ValidĂ© par l’architecte rĂ©fĂ©rent Marie Lefevre le 28 janvier 2020

## Contexte

Le projet nécessite la signature électronique de documents PDF produits par l'application.  
Deux approches ont été envisagées : déléguer la signature à un service externe via API, ou embarquer un composant de signature dans notre propre infrastructure.  
L’objectif est de garantir la conformitĂ© eIDAS, la traçabilitĂ©, et la rĂ©silience de l’opĂ©ration de signature dans le cadre de traitements massifs (jusqu'Ă  10 000 signatures/jour).

### Solution 1 : Utilisation d’un service externe de signature (ex : DocuSign, Yousign)

#### Forces
- Aucun composant de signature à maintenir cÎté client
- Conformité eIDAS assurée par le prestataire

#### Faiblesses
- Dépendance à un prestataire externe
- Coût unitaire à la signature

#### Opportunités
- PossibilitĂ© d’intĂ©grer un systĂšme de signature qualifiĂ©e Ă  terme
- Délégation des audits de sécurité et de conformité

#### Risques
- [rĂ©dhibitoire] NĂ©cessite une signature synchrone (en ligne) → problĂšme pour nos traitements batch
- Risque de saturation de l’API Ă  forte volumĂ©trie

### Solution 2 : IntĂ©gration d’une brique de signature locale (ex : DSS + HSM interne)
[...]

## Décision

La **Solution 2** est retenue.  
Elle offre une meilleure résilience et une intégration plus souple dans notre architecture technique, notamment pour les traitements par lot.

## Conséquences

- PrĂ©voir la montĂ©e en compĂ©tence de l’équipe sur le module DSS et l’API Java associĂ©e
[...]

đŸ„· Consolidation automatique des ADR

Grùce aux blocs structurés AsciiDoc, il est possible de consolider automatiquement le statut de toutes les ADR dans un tableau récapitulatif.

✅ IdĂ©al pour suivre les dĂ©cisions en cours, validĂ©es ou obsolĂštes
📊 GĂ©nĂ©rable automatiquement via un script ou une extension AsciiDoctor

.Table Liste et statuts des ADR RECE
[cols="2,1a,4a"]
|===
|ADR |Statut |Historique

|link:001-dedoublonnage-requetes.adoc[001-dedoublonnage-requetes]
|include::001-dedoublonnage-requetes.adoc[tags=statut]
|include::001-dedoublonnage-requetes.adoc[tags=historique]

|link:002-appels-synchrones.adoc[002-appels-synchrones]
|include::002-appels-synchrones.adoc[tags=statut]
|include::002-appels-synchrones.adoc[tags=historique]
...
|===

📝 Le compte-rendu d’un point d’architecture

  • « Commite » le point : sans CR, la rĂ©union n’a jamais eu lieu.
  • ComplĂšte les ADR et permet de justifier les dĂ©cisions ou de retracer l’historique.
  • Fondamental pour l’architecte : il clarifie les idĂ©es et documente les Ă©changes.
  • Une fois le CR validĂ©, mettre Ă  jour le DA et/ou les ADR concernĂ©s.
  • À rĂ©diger en light markup (de prĂ©fĂ©rence AsciiDoc)
    ➔ et Ă  conserver tous les CR, idĂ©alement dans des fichiers regroupĂ©s par thĂšme ou date, pour faciliter la recherche (ex : Ctrl+F)
  • Envoyer le lien du CR par e-mail (Ă©viter les piĂšces jointes)
  • Accepter les corrections ou complĂ©ments via Merge Request de prĂ©fĂ©rence.

đŸ§Ÿ Format conseillĂ© :

  1. Date
  2. Liste des participant·e·s
  3. Informations clés
  4. Décisions prises
  5. Actions à mener (formulées de façon SMART)

đŸ–„ïž Les supports de prĂ©sentation as code

🎯 Pourquoi prĂ©senter as code ?

  • Écriture textuelle simple (Markdown, AsciiDoc)
  • Versionnable avec Git
  • RĂ©utilisable et automatisable
  • IndĂ©pendant des outils propriĂ©taires (PowerPoint, Google Slides)
  • Compatible avec les LLM (mise en page, Ă©moticĂŽnes, rĂ©daction, orthographe)
    ➔ facile à parser pour alimenter un modùle d’architecture interne
    ➔ ProductivitĂ© x2
💡 Ce support a Ă©tĂ© rĂ©digĂ© avec Marp, assistĂ© de ChatGPT 4o et Mistral 7B

đŸ› ïž Outils Open Source populaires

Outil Langage Caractéristiques clés
Marp Markdown Compatible avec VS Code, export PDF/HTML
Reveal.js HTML/Markdown Hautement personnalisable avec JS/CSS
Asciidoctor Reveal.js AsciiDoc Reveal.js mais en Asciidoc

đŸ€– Tirer profit de la CI/CD pour la documentation As Code

  • Exports automatiques vers diffĂ©rents formats :

    • ✅ IdĂ©al : une archive contenant les HTML + diagrammes en SVG
    • 📄 PDF : rendu correct mais parfois imparfait (surtout pour les grands diagrammes)
    • ❌ Docx / ODT : peu recommandé 
  • Traitements automatisĂ©s :

    • Inclusion de texte, notices de copyright, filtrage selon le public cible...
    • DĂ©coupage en modules ou pages selon la structure du DA

đŸ€– Tirer profit de la CI/CD pour la documentation As Code (suite)

  • Analyses & contrĂŽles automatiques :

    • VĂ©rification d’élĂ©ments sensibles (copyright, donnĂ©es personnelles
)
    • Indicateurs d’avancement du remplissage d’un Dossier d’Architecture (taux de couverture
)
  • GĂ©nĂ©ration de documentation depuis le code :

    • Exemple : dĂ©tection d’annotations @Good dans le code ➔ export automatique vers une page de documentation Antora ➔ utile pour les nouveaux arrivants

🔎 La doc au plus prĂšs du code
 mais oĂč ?

  • Placer la conception dĂ©taillĂ©e directement dans le dĂ©pĂŽt Git du projet.
  • Pour un petit projet mono-module, intĂ©grer le DA dans le mĂȘme dĂ©pĂŽt que le code.
  • Pour la plupart des projets, il est prĂ©fĂ©rable de crĂ©er un dĂ©pĂŽt Git dĂ©diĂ© Ă  la documentation, regroupant :
    • le Dossier d’Architecture (DA)
    • le suivi (comptes-rendus)
    • les ADR
    • les Ă©tudes techniques

đŸ›°ïž Architecture As Code & Intelligence Artificielle

  • Texte ? Ça vous rappelle quelque chose ? ➔ les LLM !
  • Il est aujourd’hui tout Ă  fait possible de construire un chatbot d’architecture spĂ©cifique Ă  votre organisation.
  • Objectif :
    • Fournir aux dĂ©veloppeurs un accĂšs rapide et ludique aux rĂšgles d’architecture
    • RĂ©duire les malentendus, augmenter l’autonomie
    • Renforcer la transmission de savoirs implicites

🧾 Petit POC : ArchBot

  • POC en local
  • EntraĂźnĂ© sur des documents d’architecture AsciiDoc et PlantUML
  • Stack : RAG (Retrieval-Augmented Generation) basĂ© sur les modĂšles Mistral 7B ou DeepSeek-V2
  • RĂ©sultats mitigĂ©s, mais nettement meilleurs avec mistral-7b

🧾 Exemple d'utilisation

Pré-prompt

Tu es un assistant expert en architecture solutions qui répond UNIQUEMENT en français. 
Tu ne travaille que sur un seul projet : FOO. Tu t'appelles 'ArchBot'.
Tes rĂ©ponses doivent ĂȘtre prĂ©cises et basĂ©es sur les documents techniques fournis.
Si tu ne trouves pas d'information pertinente dans les documents, réponds simplement : 
"Je n'ai pas trouvé d'information pertinente sur ce sujet dans les documents."
Ne fais AUCUNE supposition ni invention.

Utilisation (GUI: Gradio)

🧹 3 - Les challenges de la documentation As Code

❄ Cela reste de la documentation froide

😓 La documentation, mĂȘme As Code, c’est difficile

  • NĂ©cessite de bonnes compĂ©tences rĂ©dactionnelles

  • Mais surtout : de l’empathie pour identifier le bon niveau de dĂ©tail
    (ni trop basique, ni trop complexe pour une personne normalement compétente dans le domaine)

  • Wiio’s Laws :

Communication usually fails except by accident.
If communication can fail, it will.
If communication cannot fail, it still most usually fails.
If communication seems to succeed in the intended way, there’s a misunderstanding.
If you are content with your message, communication certainly fails.
If a message can be interpreted in several ways, it will be interpreted in a manner that maximizes the damage.
[...]

đŸ˜± Épouvante chez les CP ou BA face au Markdown

  • Dans la plupart des cas (RETEX), il n’est pas envisageable de faire produire du light markup ou des diagrammes as code aux non-techniques.
  • Blocage frĂ©quent des non-techs face Ă  GitLab ou GitHub.
  • Notre solution : filiĂšre dĂ©diĂ©e pour ces profils sur un wiki de type Confluence-like comme xwiki ou BookStack, avec intĂ©gration diagrams.net (ex-Draw.io).
💡 MĂȘme si c’est conceptuellement moins satisfaisant et qu’il ne faut pas multiplier les outils, je ne crois pas Ă  une solution unique de documentation. L’approche Best of Breed est ici prĂ©fĂ©rable.

🔄 Comment transfĂ©rer le DA depuis GitLab vers nos prestataires ?

📩 1. Export via CI/CD

  • Utiliser une pipeline CI/CD pour gĂ©nĂ©rer automatiquement :
    • une archive, ou
    • un PDF du dossier d’architecture
  • Permet un transfert simple, traçable et reproductible

🔐 2. Pour les documents sensibles

  • PrĂ©fĂ©rer un accĂšs contrĂŽlĂ© au dĂ©pĂŽt Git
    • Restriction des droits d’accĂšs rĂ©seau et droits applicatifs
    • 🔍 Suivi des accĂšs et historique Git pour la traçabilitĂ©

✅ Comment s'assurer que le DA est lu et compris ?

🧭 Bonnes pratiques appliquĂ©es chez nous :

  • 📘 Livret d’accueil
    Contient les sections du DA à lire en fonction du rÎle (développeur, PO, ops
).

  • ❓ Quiz d’assimilation
    Environ 50 questions (30 min), suivi de 4 heures de dĂ©brief avec un architecte, un mois aprĂšs l’arrivĂ©e.

  • đŸ“© Communication proactive
    Envoi de mails ou messages à chaque évolution du DA, avec un lien direct ou un extrait ciblé.

🎯 Manque de contextualisation de certains modùles de DA

  • Certains modĂšles d’architecture (comme le mien) sont parfois trop gĂ©nĂ©riques, ce qui les rend chronophages et parfois intimidants pour leurs utilisateurs.

  • Il est essentiel de filtrer les sections en fonction du contexte :

    • Par typologie d’architecture
      (ex : applicative, technique, métier)
    • Par filiĂšre technologique
      (ex : projet mobile, cloud, legacy
)

🧭 OĂč commence le DA et oĂč s’arrĂȘte le guide de DEV ?

  • Le guide de dĂ©veloppement est produit et maintenu par les LeadTech et les Ă©quipes de dĂ©veloppement.
  • Le Dossier d’Architecture (DA) doit Ă©noncer les principes directeurs de dĂ©veloppement, sans entrer dans les dĂ©tails opĂ©rationnels ou les choix d’implĂ©mentation spĂ©cifiques.

đŸ§Ș Exemple : validation des performances en DEV (DoD)

  • Le DA spĂ©cifie :

    Les développeurs doivent réaliser des mini-benchmarks avec une montée en charge significative.

  • Le guide DEV prĂ©cise :

    OĂč trouver le template JMeter,
    Comment le configurer,
    Comment le lancer.

🧭 OĂč commence le DA et le DEX ?

  • Le DEX (Dossier d'Exploitation) doit rester lĂ©ger, surtout en contexte Infrastructure as Code :

    • Ne pas dĂ©tailler les manifestes ou les valeurs de configuration (dĂ©jĂ  prĂ©sentes dans le code).
  • Le DA se limite Ă  dĂ©crire les principes et les technologies utilisĂ©es,
    sans mentionner les machines spécifiques ni les chronogrammes.

đŸ’Ÿ Exemple : gestion des sauvegardes

  • Le DA spĂ©cifie :

    Une double sauvegarde de la base PostgreSQL :
    pg_dump + sauvegarde Veeam de la VM,
    Avec une politique de rétention :
    7 journaliĂšres / 5 hebdomadaires / 12 mensuelles / 2 annuelles.

  • Le DEX :

    Fait référence au DA
    DĂ©crit comment vĂ©rifier que les sauvegardes s’exĂ©cutent correctement

  • Le code (ex. : CronJob Kubernetes) :

    Contient l’expression cron exacte

🧠 4 - Takeaway — Ce qu'il faut retenir

  • La documentation d’architecture doit ĂȘtre vivante, utile, maintenue et adaptĂ©e Ă  son audience.
  • Architecture as Code = gain de traçabilitĂ©, maintenabilitĂ©, lisibilitĂ© et automatisation.
  • AsciiDoc + Git + CI/CD → combo gagnant pour une doc versionnĂ©e, rĂ©utilisable et collaborative.
  • Le DA donne les principes ; les guides DEV/DEX prĂ©cisent les dĂ©tails opĂ©rationnels.
  • ModĂšle recommandĂ© : DA structurĂ© en contraintes / ENF / solutions accompagnĂ© d'ADRs.

🚀 Un projet Open Source en perspective ?

  • Proposer une interface CLI et/ou un GUI et/ou un chatbot ? pour gĂ©nĂ©rer des templates de DA contextualisĂ©s
  • Pas de base de donnĂ©es nĂ©cessaire : tout est stockĂ© en texte dans un dĂ©pĂŽt Git
  • Chaque section du modĂšle est enrichie de mĂ©tadonnĂ©es pour permettre le filtrage intelligent
đŸ·{"id":"5a5f3bc5-7a1d-4f68-8385-8e1a19faf288", 
   "labels":["stockage_persistent", "niveau::avancé", "taille_projet::moyen", "taille_projet::grand"]}
# Gestion des transactions
[...]

đŸ·{"id":"a1e81580-8a2d-4d4d-8f99-6c9ae9ace122", 
   "labels":["greenit", "niveau::avancé"], 
   "link_to":"51bc1362-9c2f-4cd8-81d9-face77ed4dc6"}
# Écoconception
[...]

🔗 Liens utiles

🙏 Merci pour votre attention !

❓ Des questions ? retours, suggestions ?