Bibliothèque · Résumé et avis

The Hard Parts

De Ford, Richards, Sadalage et Dehghani. Ce qui arrive quand il n'y a plus de best practices : une méthode pour peser les compromis des architectures distribuées.

FR EN
Couverture de Software Architecture: The Hard Parts

Software Architecture: The Hard Parts

Software Architecture: The Hard Parts — Modern Trade-Off Analyses for Distributed Architectures

7.8 /10

« Le livre qui remplace « ça dépend » par une méthode : huit sagas nommées, des tableaux de compromis, zéro balle en argent. »

  • AuteursFord, Richards, Sadalage, Dehghani
  • VOO'Reilly, 2021 · 462 pages
  • ÉditionÉdition unique (2021), en anglais
  • Fiche~10 min de lecture
Notation du livre sur 5 dimensionsIdées9/10Applicable8/10Lisibilité6/10Actualité9/10Exemples7/10

Microservices, données, sagas : pas de best practice, seulement des compromis, et une méthode pour les peser.

Pourquoi ce livre

En écrivant Fundamentals of Software Architecture, Ford et Richards mettaient de côté les problèmes sans réponse propre, ceux qui n'offrent que des compromis salissants. La pile a reçu un nom, « the hard parts », puis deux experts données (Sadalage, et Dehghani, l'inventrice du data mesh) et un livre entier. Le titre a un double sens : hard comme difficile, et hard comme hardware, les parties dures à changer ensuite.

C'est l'étage logique au-dessus de Clean Architecture : Martin apprend à tracer des frontières ; ce livre raconte ce qui arrive quand chaque frontière tracée coûte quelque chose.

Les idées qui restent

1Pas de best practices, seulement le moins pire des compromis

Le chapitre d'ouverture pose le pari du livre : si une pratique était vraiment « best », tout le monde l'appliquerait et le problème serait ennuyeux. Les problèmes qui restent sont ceux sans réponse générale : « pour les architectes, chaque problème est un flocon de neige » (ch. 1). La compétence à construire n'est donc pas choisir le bon pattern, c'est peser : « ne cherchez pas le meilleur design ; visez la moins mauvaise combinaison de compromis » (ch. 1).

Deux outils portent cette discipline tout au long du livre. Les ADR (Architecture Decision Records : contexte, décision, conséquences, pour que le « pourquoi » survive aux personnes). Et les fitness functions : des règles d'architecture transformées en tests exécutables dans la CI, qui font échouer le build dès qu'on viole une frontière.

// une règle d'archi devient un test (ici ArchUnit, en Java)
noClasses().that().resideInAPackage("..domaine..")
  .should().dependOnClassesThat().resideInAPackage("..web..");
// le métier qui importe le contrôleur → la CI passe au rouge, pas une revue à attraper

Le livre suit ensuite une équipe fictive, la Sysops Squad, dont le monolithe de tickets vieillissant gèle pendant des heures et menace toute la ligne de business.

2Le quantum d'architecture : votre base partagée vous trahit

L'unité de mesure du livre : un quantum d'architecture est « un artefact déployable indépendamment, à forte cohésion fonctionnelle, fort couplage statique et couplage dynamique synchrone » (ch. 2). Concrètement : le plus petit morceau de votre système que vous pouvez déployer seul. Et le comptage est brutal : un monolithe vaut un quantum, évidemment, mais vingt « microservices » qui partagent une base de données aussi. Si le schéma change et que tout le monde doit bouger ensemble, vous avez un quantum, plus la facture réseau.

Dessous se cache la grille de lecture du livre pour le couplage à l'exécution, trois dimensions à deux valeurs chacune : communication (synchrone ou asynchrone), cohérence (atomique ou éventuelle), coordination (orchestrée ou chorégraphiée). Gardez ça en tête : le 2 × 2 × 2 revient à l'idée 7.

3Découper la base est plus dur que découper le code

« Casser une base de données est difficile : bien plus difficile, en fait, que casser la fonctionnalité applicative » (ch. 6). Le code a des imports qu'on peut lister ; la donnée a des clés étrangères, des vues, des triggers, et ce détail gênant qu'elle est l'actif le plus précieux de l'entreprise. L'argument du livre face à une DBA sceptique est chiffré : un monolithe à 200 connexions de base, redistribué sur 50 services avec leurs pools et leurs instances minimales, en réclame 1 000 à 1 700 pour la même charge.

La méthode tient en cinq étapes qui ne cassent jamais la prod : regrouper les tables en domaines de données, les déplacer dans des schémas séparés, démêler les connexions inter-domaines, puis (et seulement alors) déménager les schémas sur leurs propres serveurs, et basculer. Le slogan du chapitre : la donnée suit les domaines, pas la technologie.

4La granularité est un équilibre, pas un seuil

Quelle taille pour un service ? Le livre refuse la question et la remplace par deux listes opposées. Six raisons de découper (les désintégrateurs) : périmètre mono-fonction, volatilité du code, besoins de montée en charge divergents, isolation des pannes, frontières de sécurité, extensibilité prévue. Quatre raisons de regrouper (les intégrateurs) : transactions de base de données, workflows bavards entre les morceaux, code partagé massif, données étroitement liées.

La démonstration tourne sur un service de notifications : envoyer SMS, emails et courriers papier semble cohérent, jusqu'à apprendre que les modèles de courrier changent chaque semaine quand le code SMS dort six mois (la volatilité dit : découpe), et que le système pousse 220 000 SMS par minute contre une lettre (la scalabilité dit : découpe). Mais cinq services client enchaînés dans un workflow additionnent 1 500 ms de latence réseau pure (le workflow dit : regroupe). « Le secret du bon niveau de granularité, c'est l'équilibre entre ces deux forces opposées » (ch. 7). Test bonus : si le service restant ne peut s'appeler que « Service Divers », le découpage était mauvais.

5La réutilisation, c'est du couplage en costume

La loi la plus citable du livre : « la réutilisation naît de l'abstraction, mais elle ne fonctionne que par la lenteur du changement » (ch. 8). On peut dépendre sans risque d'un OS, d'un framework, de JUnit : des abstractions qui changent lentement et de façon prévisible. Une classe Customer métier interne change à chaque sprint ; partagez-la entre services et chaque changement se propage partout. Cette phrase est l'autopsie du SOA des années 2000 et de son rêve du service Customer d'entreprise réutilisable, que le livre qualifie de désastre architectural.

Quatre options honnêtes sont pesées : copier le code (très bien pour du code qui ne change jamais), la bibliothèque partagée (sécurité à la compilation, douleurs de versioning), le service partagé (bon pour le code volatile, mais un risque d'exécution pour tout le monde), et les sidecars pour la plomberie opérationnelle (logs, monitoring, auth), seul endroit où la réutilisation est inconditionnellement bon marché parce qu'elle ne porte aucune logique métier.

6ACID ne survit pas à la distribution

Le chapitre que toute équipe microservices devrait lire avant le premier incident : dès qu'une transaction métier traverse plusieurs services, chaque lettre d'ACID meurt en silence. Pas de rollback global (chaque service committe sa part), pas d'isolation (les données commitées sont visibles avant la fin de la « transaction »), pas de clés étrangères entre services. À la place, vous obtenez BASE : disponibilité de base, état flou en cours de route, cohérence éventuelle.

Comme il n'y a plus de rollback automatique, c'est à VOUS d'écrire la marche arrière, à la main, étape par étape, ce qu'on appelle une saga :

try {
  paiement.debiter()      // service 1 : commité tout de suite, pas de rollback global
  stock.reserver()        // service 2 : échoue ici…
} catch {
  paiement.rembourser()   // …on doit COMPENSER l'étape 1 à la main (et si ça échoue ?)
}

Trois patterns livrent cet « éventuel » : un batch de fond qui réconcilie (lent, et il piétine tous les bounded contexts, les périmètres métier autonomes), un orchestrateur qui appelle tout le monde pendant que l'utilisateur attend (cohérent, mais la compensation peut elle-même échouer), ou des événements sur un broker durable (réactif et découplé, mais le chemin d'erreur finit en dead letter queue, la file des messages échoués qu'un humain doit traiter). Le clin d'œil récurrent du livre vient du titre culte de Gregor Hohpe : « Starbucks n'utilise pas le two-phase commit ». Vous non plus, donc.

7Les huit sagas : donner un nom à ses ennuis

Croisez les trois dimensions d'exécution (sync/async × atomique/éventuel × orchestré/chorégraphié) et vous obtenez exactement huit sagas transactionnelles possibles. Le livre nomme chacune d'après le genre d'histoire dans laquelle elle vous embarque, et ces noms travaillent vraiment en réunion.

Le diagnostic derrière les couleurs : l'atomicité distribuée est la colonne qui coûte. « Les transactions distribuées présentent une foule de difficultés et il vaut mieux les éviter quand c'est possible » (ch. 12). La Horror Story mérite son nom parce qu'elle est bien intentionnée : un architecte accélère une Epic Saga trop lente avec de l'async et sans coordinateur, tout en gardant l'atomicité, et atterrit sur la pire complexité du tableau.

8Construisez votre propre analyse, et fuyez les évangélistes

Le dernier chapitre replie tout le livre en une méthode réutilisable en trois pas : trouver quelles parties sont enchevêtrées (ce qui change ensemble), analyser comment elles se couplent, puis évaluer en jouant des scénarios « et si » concrets tirés de votre domaine. Avec deux garde-fous : les listes MECE (Mutually Exclusive, Collectively Exhaustive : des options qui ne se chevauchent pas et qui couvrent tous les cas, pour comparer du comparable sans rien oublier) et le piège du hors-contexte (un gagnant générique peut perdre lourdement dès que vos vraies contraintes entrent dans la pièce).

Et une loi qui explique des années de frustration : « un architecte ne peut jamais réduire le couplage sémantique par l'implémentation, mais il peut l'aggraver » (ch. 11). Si le workflow métier est intrinsèquement emmêlé, aucune technologie ne le démêle ; les outils ne peuvent que refléter le domaine ou ajouter de la complexité accidentelle par-dessus. D'où le conseil de clôture : « un architecte apporte de la vraie valeur non pas en chassant balle en argent après balle en argent, mais en affûtant sa capacité à analyser les compromis à mesure qu'ils se présentent » (ch. 15).

🎨 Illustration à générer : copier ce prompt dans ChatGPT :

Flat illustration, warm ivory background (#faf7f2), muted green and terracotta palette, no text, minimalist editorial style, a flashy street vendor with a slicked mustache selling shiny silver bullets from an ornate cart, while next to him a calm architect ignores the show and carefully weighs two small building blocks on an old-fashioned balance scale, deadpan humor, 3:2 aspect ratio

Légende prévue : « Les balles en argent se vendent mieux. La balance marche mieux. Le livre fait 460 pages du côté de la balance. »

Trois choses que je ne savais pas

Mon avis, honnêtement

Ce livre a réussi quelque chose de rare : il m'a réconcilié avec « ça dépend ». Pas comme une esquive, mais comme le début d'une méthode : ça dépend de quoi, pesé comment, décidé par qui. Les huit noms de sagas valent à eux seuls le prix d'entrée ; « on a construit une Horror Story » est un diagnostic qu'une équipe entière comprend en trois secondes.

Les défauts honnêtes : c'est dense, visiblement écrit à quatre mains, et les dialogues de la Sysops Squad tournent à la telenovela d'architecture (des personnages s'extasient devant des tableaux de compromis). Le livre s'appuie aussi sur son prequel, Fundamentals of Software Architecture, et l'annexe vous y renvoie ouvertement pour les bases. C'est un deuxième livre sur le sujet, pas un premier.

Mais si vous vivez des systèmes distribués au quotidien, c'est le genre de livre le plus utile qui soit : celui qui vous donne les questions, pas les réponses, et qui rend les questions réutilisables.

Odilon

Toujours valable en 2026 ?

Étrangement, plus pertinent hors microservices qu'à sa sortie. L'analyse orchestration contre chorégraphie se lit aujourd'hui comme un manuel pour les systèmes d'agents IA : mêmes compromis, mêmes explosions du chemin d'erreur, même besoin d'un médiateur quand le workflow devient sémantiquement complexe. Le buzz du data mesh est retombé depuis 2021 (les organisations ont découvert que la partie sociotechnique était la partie dure), ce que la méthode du livre elle-même aurait prédit. Et la thèse centrale vieillit comme la pierre : les cycles de hype produisent des balles en argent à heure fixe ; la compétence d'analyse leur survit à toutes.

Pour qui ?

Lisez-le si

  • Vous concevez ou opérez des systèmes distribués et chaque décision ressemble à un duel entre options valables
  • Votre équipe s'apprête à découper un monolithe, surtout sa base de données
  • Il vous faut du vocabulaire pour répondre à « on n'a qu'à tout passer en asynchrone »
  • Vous écrivez des ADR, ou rêvez que votre équipe en écrive

Passez votre chemin si

  • Vous construisez des monolithes qui vous servent bien : cette douleur est optionnelle
  • Vous n'avez pas encore lu un livre de fondamentaux d'architecture : c'est le tome deux
  • Vous voulez des recettes : tout le propos du livre est qu'il n'y en a pas

Pour aller plus loin

Les réalités du déploiement se pratiquent dans mon cours déploiement. Côté bibliothèque, Clean Architecture trace les frontières que ce livre fait payer, Designing Data-Intensive Applications creuse le versant données des mêmes batailles, Team Topologies traite la moitié organisationnelle de la question des quanta, et The Design of Web APIs couvre le chapitre contrats côté consommateur.

Commentaires (0)

Voir toute la bibliothèque

D'autres fiches arrivent : un livre à la fois, la substantifique moelle seulement.