Trade-off analysis¶
Rendre les compromis explicites pour que les décisions soient collectives, pas individuelles.
Pourquoi les compromis sont inevitables¶
Aucune option architecturale n'est objectivement supérieure. Chaque choix est un ensemble de compromis. La matrice de décision rend ces compromis explicites et structure la conversation d'équipe — sans elle, le choix revient souvent à l'option que la personne la plus influente dans la salle connait le mieux.
L'architecture est l'art de maximiser le nombre de décisions non prises (Robert C. Martin) — mais les décisions qui restent sont des compromis. Performance contre coût. Simplicité contre flexibilite. Vitesse de livraison contre robustesse. Chaque choix sacrifie quelque chose — le trade-off analysis rend ce sacrifice explicite.
Architecture Significant Requirements (ASR)¶
Avant d'analyser des trade-offs, il faut identifier les exigences qui pilotent reellement l'architecture. Toutes les exigences ne sont pas architecturalement significatives. Un ASR est une exigence dont la satisfaction nécessité un choix structurel — un choix qui ne peut pas être modifie facilement après coup.
Critères de significance¶
Une exigence est architecturalement significative si :
- Elle impacte la structure du système (decomposition, patterns, technologies)
- Elle contraint les choix technologiques (performance, scalabilité, sécurité)
- Elle est difficile à satisfaire à posteriori (disponibilité, conformité)
- Elle généré des risques importants si elle n'est pas satisfaite
Identifier les ASR¶
graph TD
REQ[Toutes les exigences] --"filtre"--> F1{Impacte la structure ?}
F1 --"oui"--> ASR[ASR identifie]
F1 --"non"--> F2{Contraint les technologies ?}
F2 --"oui"--> ASR
F2 --"non"--> F3{Difficile a changer apres ?}
F3 --"oui"--> ASR
F3 --"non"--> NASR[Exigence non-ASR] Exemples d'ASR vs exigences ordinaires¶
| Exigence | ASR ? | Justification |
|---|---|---|
| Latence p99 < 50ms | Oui | Impose des choix de cache, de protocole, de topologie |
| 99.99% de disponibilité | Oui | Impose multi-region, réplication synchrone |
| L'utilisateur peut changer sa photo | Non | Feature standard, pas de choix structurel |
| Conformité RGPD | Oui | Impacte le stockage, l'audit, le droit à l'effacement |
| Export CSV des commandes | Non | Implémentation localisee, pas de conséquence architecturale |
| 10 000 utilisateurs simultanés | Oui | Impose du stateless, du load balancing, du caching |
Quality Attribute Workshop (QAW)¶
Le QAW est une méthode structurée pour identifier et prioriser les attributs qualité (quality attributes) qui pilotent l'architecture. Développé par le Software Engineering Institute (SEI), il précédé le travail de conception.
Déroulement du QAW¶
| Étape | Activité | Participants | Durée |
|---|---|---|---|
| 1 | Présentation de la vision métier | Sponsor, Product Owner | 30 min |
| 2 | Présentation de l'architecture existante | Architecte | 30 min |
| 3 | Identification des quality attribute drivers | Toutes les parties prenantes | 1h |
| 4 | Brainstorming de scenarios | Toutes les parties prenantes | 1h |
| 5 | Consolidation et priorisation | Vote par points (dot voting) | 30 min |
| 6 | Raffinement des scenarios prioritaires | Architecte + parties prenantes clés | 1h |
Format d'un scenario qualité¶
Chaque scenario suit une structure en six parties :
| Partie | Description | Exemple |
|---|---|---|
| Source | Qui ou quoi déclenche le scenario | Un utilisateur |
| Stimulus | L'événement ou la condition | Envoie 100 commandes par seconde |
| Artefact | Le composant concerne | Le service de commande |
| Environnement | Les conditions d'exécution | En heure de pointe, charge normale du reste du SI |
| Réponse | Le comportement attendu | Toutes les commandes sont traitees |
| Mesure | Le critère de succès | Latence p99 < 200ms, aucune commande perdue |
Exemple de scenario priorise¶
Scenario S-003 (priorité haute) : pendant les soldes d'hiver (environnement), les utilisateurs (source) passent 500 commandes par minute (stimulus) sur le service de commande (artefact). Le système traite toutes les commandes (réponse) avec une latence p99 < 300ms et zero perte de données (mesure).
Ce scenario est un ASR : il pilote le choix entre stateless et stateful, impose du caching et du load balancing, et orienté le choix de la base de données vers un moteur capable de gérer cette charge.
Méthode de trade-off analysis¶
Étapes¶
- Lister les critères pertinents pour le contexte du projet
- Attribuer un poids à chaque critère — la somme doit egaliser a 1.0 (ou 100%)
- Noter chaque option sur chaque critère de 1 (très mauvais) a 5 (excellent)
- Calculer le score pondere pour chaque option
- Discuter les ecarts — la matrice ne décidé pas, elle révélé les hypothèses implicites
La valeur n'est pas dans le score final. Elle est dans le debat sur les poids : si deux personnes proposent des poids très différents pour un même critère, c'est que leurs priorités divergent — et c'est ce desaccord qu'il faut résoudre avant d'aller plus loin.
Choisir les bons critères¶
Les critères doivent refléter les priorités réelles du projet, pas des critères génériques. Exemples par contexte :
- Startup early-stage : time-to-market, simplicité, facilite de recrutement
- Scale-up : scalabilité, observabilité, isolation des défaillances
- Entreprise : conformité, intégration systèmes existants, support vendor
- Équipe petite : charge opérationnelle, maturité de la technologie, documentation disponible
Exemple 1 : choix du style d'architecture (startup)¶
Contexte : API backend pour une startup en phase de croissance, équipe de 5 développeurs full-stack, budget ops limite a 800 EUR/mois, time-to-market critique pour la prochaine levee de fonds.
| Critère | Poids | Monolithe modulaire | Microservices | Serverless |
|---|---|---|---|---|
| Complexité initiale | 25% | 5 | 2 | 3 |
| Scalabilité indépendante | 15% | 2 | 5 | 4 |
| Coût opérationnel | 20% | 4 | 2 | 4 |
| Time-to-market | 25% | 5 | 2 | 3 |
| Recrutement / onboarding | 15% | 4 | 3 | 3 |
| Score pondere | 4.20 | 2.60 | 3.35 |
Calcul des scores ponderes :
- Monolithe : (5x0.25) + (2x0.15) + (4x0.20) + (5x0.25) + (4x0.15) = 1.25 + 0.30 + 0.80 + 1.25 + 0.60 = 4.20
- Microservices : (2x0.25) + (5x0.15) + (2x0.20) + (2x0.25) + (3x0.15) = 0.50 + 0.75 + 0.40 + 0.50 + 0.45 = 2.60
- Serverless : (3x0.25) + (4x0.15) + (4x0.20) + (3x0.25) + (3x0.15) = 0.75 + 0.60 + 0.80 + 0.75 + 0.45 = 3.35
Exemple 2 : choix du style d'architecture (scale-up)¶
Contexte : plateforme SaaS B2B avec 200 clients, équipe de 25 développeurs en 4 squads, croissance de 30% par trimestre, SLA de 99.95% contractuel.
| Critère | Poids | Monolithe modulaire | Microservices | Serverless |
|---|---|---|---|---|
| Scalabilité indépendante | 30% | 2 | 5 | 4 |
| Isolation des défaillances | 25% | 2 | 5 | 4 |
| Coût opérationnel | 10% | 4 | 2 | 3 |
| Autonomie des équipes | 20% | 2 | 5 | 3 |
| Observabilité | 15% | 3 | 4 | 3 |
| Score pondere | 2.35 | 4.55 | 3.55 |
Les mêmes options, des poids différents, un résultat inverse. Le contexte a change — la décision aussi. C'est exactement le mécanisme attendu.
Exemple 3 : choix du style d'architecture (enterprise)¶
Contexte : grande entreprise du secteur bancaire, 500 développeurs, conformité PCI-DSS et reglementations bancaires, SI existant de 200 applications, intégration avec des mainframes.
| Critère | Poids | SOA classique | Microservices | Event-driven |
|---|---|---|---|---|
| Conformité reglementaire | 25% | 5 | 3 | 3 |
| Intégration avec le legacy | 20% | 5 | 2 | 4 |
| Scalabilité | 15% | 3 | 5 | 4 |
| Traçabilité des transactions | 20% | 4 | 3 | 5 |
| Support vendor long terme | 20% | 5 | 3 | 3 |
| Score pondere | 4.50 | 3.05 | 3.80 |
Dans un contexte enterprise, la conformité et l'intégration avec l'existant dominent les critères. Le SOA classique, souvent moque dans les conferences tech, reste le choix rationnel quand ces facteurs pesent plus que la scalabilité.
Sensitivity points et trade-off points¶
Ces concepts, issus du framework ATAM (Architecture Tradeoff Analysis Method) du SEI, aident à identifier les zones critiques d'une architecture.
Sensitivity points¶
Un sensitivity point est un élément de l'architecture ou un petit changement dans un parametre produit un grand changement dans un attribut qualité.
| Sensitivity point | Attribut impacte | Exemple |
|---|---|---|
| Taille du pool de connexions DB | Performance | 50 → 100 connexions = latence divisee par 3 |
| Durée du TTL du cache | Cohérence vs performance | 5s → 60s = perf +40% mais données stales |
| Nombre de replicas du service | Disponibilité | 2 → 3 replicas = passage de 99.9% a 99.95% |
| Timeout des appels inter-services | Résilience | 1s → 5s = risque de cascade de timeouts |
Trade-off points¶
Un trade-off point est un élément ou la satisfaction d'un attribut qualité dégradé un autre attribut qualité. C'est le cœur du compromis architectural.
| Trade-off point | Attribut amélioré | Attribut dégradé | Exemple |
|---|---|---|---|
| Ajout d'un cache distribué | Performance | Cohérence des données | Latence -60% mais données potentiellement stales |
| Réplication multi-region | Disponibilité | Coût, cohérence | 99.99% mais coût x3 et latence d'écriture |
| Chiffrement at-rest | Sécurité | Performance | Conformité PCI-DSS mais overhead I/O +15% |
| Decomposition en microservices | Scalabilité | Complexité ops | Scaling indépendant mais observabilité a gérer |
graph TD
ARCH[Decision architecturale] --"ameliore"--> QA1[Attribut qualite A]
ARCH --"degrade"--> QA2[Attribut qualite B]
QA1 --"mesure par"--> M1[Metrique A]
QA2 --"mesure par"--> M2[Metrique B]
M1 --"arbitre par"--> TP[Trade-off point]
M2 --"arbitre par"--> TP Le debat sur les poids¶
La matrice ne décidé pas — elle structure la conversation et rend les trade-offs explicites. Si l'équipe estime que la scalabilité indépendante est plus critique que le time-to-market parce que la croissance est prévue très rapide, les poids changent et le résultat aussi. C'est précisément l'objectif : forcer l'explicitation des priorités avant de choisir, pas après.
Un bon signe : si tout le monde est d'accord sur les poids avant de noter les options, la décision sera acceptee collectivement même par ceux qui preferaient une autre option. Le debat sur les notes ("est-ce que les microservices meritent vraiment 2 sur la scalabilité ?") est secondaire par rapport au debat sur les poids ("est-ce que le time-to-market vaut vraiment 25% pour notre contexte ?").
Pieges a éviter¶
- Trop de critères : au-delà de 7 critères, les poids deviennent insignifiants. Garder 4 a 6 critères discriminants.
- Poids uniformes : si tous les poids sont a 20%, la matrice ne discrimine rien. Au moins un critère doit peser significativement plus.
- Notes complaisantes : noter 3/5 partout evite les desaccords mais rend la matrice inutile. Forcer les ecarts.
- Ignorer le debat : le score est un support de discussion, pas un verdict. Si le résultat semble faux, le problème est dans les poids, pas dans le calcul.
Documenter le trade-off¶
Chaque trade-off analysis significative merite un ADR. L'ADR capture non seulement la décision finale mais aussi la matrice, les poids et le raisonnement.
Structure recommandee¶
# ADR-NNN : Choix du style d'architecture
**Statut :** accepted
**Date :** YYYY-MM-DD
## Contexte
Description du contexte et des contraintes.
## ASR identifies
- ASR-1 : description
- ASR-2 : description
## Matrice de trade-off
[La matrice complete avec poids et scores]
## Sensitivity points identifies
- SP-1 : description et impact
- SP-2 : description et impact
## Decision
Option choisie et justification basee sur les poids.
## Consequences
Positif et negatif, avec reference aux trade-off points.
ATAM en aperçu¶
L'Architecture Tradeoff Analysis Method (ATAM) est la méthode formelle du SEI pour évaluer les trade-offs d'une architecture. Elle est plus lourde que la simple matrice de décision mais plus rigoureuse.
L'ATAM se déroulé en neuf étapes :
- Présentation de l'ATAM
- Présentation des drivers métier
- Présentation de l'architecture
- Identification des approches architecturales
- Génération de l'arbre de qualité (utility tree)
- Analyse des approches architecturales
- Brainstorming et priorisation des scenarios
- Analyse des scenarios priorises
- Présentation des résultats
ATAM est un investissement
Un ATAM complet prend 2 a 3 jours avec 10 a 15 participants. C'est un investissement justifie pour les systèmes critiques ou les décisions structurantes a fort impact. Pour les projets courants, la matrice de décision ponderee offre 80% de la valeur avec 20% de l'effort.
Chapitre suivant : Modeliser — du métier au modèle, par intention.