Les diagrammes de boucle causale

Quelques éléments de langage pour mieux comprendre les systèmes.


Cet article fait suite à mon introduction au Systems Thinking.

Dans l’univers du Systems Thinking, il y a plusieurs façons de représenter un système.

En voici une petite liste non exhaustive:

  • Les diagrammes de boucle causale (Causal Loop Diagrams) illustrent les relations entre les différentes variables d’un système en s’appuyant sur des boucles de feedback: on peut facilement y lire les conséquences lorsqu’une variable change.

  • Les diagrammes de stocks et de flux (Stock-and-Flow Diagrams) représentent les accumulations de différentes variables dans un système et les flux entre eux. Vous pouvez vous les imaginer comme un ensemble de robinets et de baignoires qui communiquent entre eux.

  • Les diagrammes d’influence sont similaires aux diagrammes de boucle causale avec la particularité d’inclure des noeuds de décisions et des probabilités pour modéliser l’incertitude et l’impact des différentes décisions sur le système.

  • Les Process Maps représentent les différentes étapes d’un workflow: ils permettent d’identifier les évènements, les inputs, les outputs et les feedback loops. On les utilise souvent dans le contrôle de qualité pour répérer les goulots d’étranglement et imaginer comment optimiser les process (vous avez peut-être déjà entendu parler de Value Stream Map, c’est ce genre d’outil). Le Path to Production est une sorte de Process Map (souvent simplifié) qui représente les étapes de construction d’une application jusqu’à son déploiement en production.

Dans cet article et les suivants, je vais principalement me concentrer sur les diagrammes de boucle causale car ils sont assez simples à comprendre et peuvent être utiles dans de nombreux contextes.

Qu’est-ce qu’un diagramme de boucle causale ?

Les diagrammes de boucle causale ont été introduits pour la première fois dans les années 50 par Jay Forrester, un ingénieur à l’origine de la la dynamique des systèmes.

Les éléments de base d’un diagramme de boucle causale sont:

  • les variables
  • les liens de causalité
  • les boucles causales (feedback loops) que j’appellerai parfois (voire souvent) boucles de feedback

Variables

Une variable est un élément qui peut changer au cours du temps et qui influence le comportement du système. Elle peut être quantitative ou qualitative. Pour simplifier, dîtes-vous que c’est quelque chose qui peut soit augmenter, soit diminuer.

Lien de causalité

Lorsqu’un lien de causalité relie deux variables A et B, on dit qu’une variation de A cause une variation de B. On représente ce lien par une flèche de A vers B:

Lien de causalité

On associe en général une polarité à un lien.

La polarité est dite de renforcement (reinforcement) lorsque les variations de A et B vont dans la même direction. On la représente avec un + (ou un s qui signifie same)

Polarité de renforcement

Prenons l’exemple d’un système distribué dans lequel plus le nombre de requêtes utilisateur augmente, plus le temps de latence du réseau augmente. Voici comment on peut représenter ce lien:

Exemple de lien positif

La polarité est dite d’équilibrage (balancing) lorsque les variations vont dans des directions opposées. On le représente avec un - (ou un o qui signifie opposite).

Polarité d'équilibrage

Si on observe une application et que l’on constate que plus le nombre de tests augmente et plus le nombre d’anomalies en production diminue, alors on pourrait représenter le lien ainsi:

Exemple de lien négatif

Boucles de feedback

Le troisième élément des diagrammes de boucle causale sont donc (roulement de tambour)…les boucles causales appelées également boucles de rétroaction.

En tant que développeurs ou architectes, ce sont ces boucles que l’on doit identifier pour améliorer par exemple le design de nos systèmes.

Une boucle c’est simplement lorsque l’on a des variables liées entre elles qui forment un système fermé.

Example de boucle

Voici comment lire ce diagramme: Une variation de A entraîne une variation de B qui entraîne une variation de C qui elle-même génère une variation de A!

Il existe seulement deux types de boucles:

  • les boucles de renforcement (reinforcing feedback loop)
  • les boucles d’équilibrage (balancing feedback loop)

Les boucles de renforcement

Une boucle de renforcement est une structure dans laquelle une variation de A dans un sens entraîne une variation de A dans le même sens lorsqu’on accomplit le tour de la boucle. En gros, “plus A augmente (diminue) alors A augmente (diminue) encore plus”.

boucle de renforcement

Prenons le cas d’une plateforme type Facebook ou Twitter: si un utilisateur avec un certain nombre de followers publie du contenu intéressant, ses followers vont interagir avec son contenu via des commentaires positifs, augmentant sa visibilité et attirant ainsi plus de followers.

exemple twitter

Les boucles de renforcement sont la base de ce que l’on appelle cercles vicieux ou virtueux. Une boucle vertueuse produit un effet désirable à l’inverse d’un cercle vicieux.

Dans l’exemple de la plateforme Twitter, on a décrit le cercle vertueux. Le cercle vicieux serait: si le nombre de followers diminue, le nombre de commentaires positifs diminue et la visibilité également ce qui entraine une diminution du nombre de followers et ainsi de suite.

Selon la façon dont on lira la boucle, on racontera donc soit le développement soit la détérioration du système.

Si vous vous souvenez de l’iceberg de mon précédent article (je vous pardonne si ce n’est pas le cas, il date de l’année dernière), lorsqu’on accumule les évènements relatifs à un système, on peut observer son évolution au cours du temps et identifier des patterns.

Le pattern correspondant à une boucle de renforcement se traduira graphiquement par une courbe exponentielle comme ci-dessous: si vous en voyez une quelque part, c’est probablement qu’il y a une boucle de renforcement en dessous.

graphe boucle de renforcement

Dans l’article mentionné, je citais cet exemple de complexité logicielle qui est typiquement un exemple de boucle de renforcement

Plus la complexité du code augmente, plus on met de temps à intégrer un nouveau modèle d’avion, et plus la complexité du code augmente.

diagramme exemple

Vous imaginez bien que si on ne fait rien pour contrebalancer les effets d’une boucle de renforcement, des effets négatifs peuvent apparaître à un certain moment et causer des dégâts très importants.

Les boucles d’équilibrage

Une boucle d’équilibrage est une structure dans laquelle une variation de A dans un sens entraîne une variation de A dans le sens opposé lorsqu’on accomplit le tour de la boucle. Ici, c’est donc “plus A augmente (diminue) alors plus A diminue (augmente)“.

boucle d'équilibrage

Considérons un système distribué. Lorsque le nombre de requêtes utilisateurs augmente, le temps de réponse de l’application augmente également, ce qui entraîne une augmentation du nombre de requêtes en attente dans le load balancer. Le load balancer va alors détecter cette augmentation et provisionner plus de serveurs pour répartir la charge. La répartition de la charge sur plus de serveurs va avoir pour conséquence de réduire le temps de réponse de l’application.

exemple load balancer

Les boucles d’équilibrage servent à stabiliser un système et aident souvent à éviter qu’un système “déraille” s’il n’était constitué que de boucles de renforcement.

Graphiquement, les graphes pour ce type de boucle seront en général logarithmiques ou oscillatoires.

graphe boucle d'équilibrage

L’astuce pour déterminer si une boucle est de renforcement ou d’équilibrage est de compter le nombre de - dans le diagramme: si ce nombre est pair, il s’agit d’une boucle de renforcement sinon c’est que vous avez affaire à une boucle d’équilibrage.

Dans la réalité, un système va en général contenir à la fois des boucles de renforcement et d’équilibrage.

Les délais dans les boucles de feedback

Jusqu’à présent, on a considéré que les effets d’une variable se répercutaient sur la suivante de façon immédiate. Dans la réalité, il peut exister un délai entre une variation et la conséquence de cette variation.

J’ai prévu d’en parler plus en détail dans un prochain article car c’est un élément très important à considérer lorsqu’on étudie un système.

Pour conclure, les diagrammes de boucle causale sont un outil très puissant utilisé dans de nombreux domaines qui nous aident à mieux comprendre les systèmes et identifier des axes d’amélioration.

J’espère que cela vous a plu et vous aidera à représenter quelques liens entre des variables identifiées dans votre contexte.

Ressources

Pour approfondir le sujet, voici quelques références:


© 2023 Du côté de chez Fouad. Tous droits réservés.