Il existe un moment précis dans la vie d'un système logiciel où personne ne le comprend plus dans sa totalité. Ce moment passe souvent inaperçu. On continue à travailler dessus, à ajouter des fonctionnalités, à corriger des bugs — mais quelque chose a changé.

Le problème de la tête

La mémoire de travail humaine peut tenir environ 7 éléments simultanément. C'est le chiffre de George Miller, publié en 1956. La recherche plus récente suggère que ce nombre est encore plus bas pour des éléments complexes : entre 3 et 5.

“The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.” — Edsger W. Dijkstra

Complexité accidentelle vs essentielle

Fred Brooks distingue deux types de complexité : essentielle et accidentelle. La complexité essentielle est inhérente au problème qu'on résout. La complexité accidentelle, c'est ce qu'on ajoute par la façon dont on le résout.

Le coût cognitif caché

On parle souvent du coût technique de la dette technique. On parle moins du coût cognitif : le fait qu'un développeur qui rejoint un système complexe met des mois à être productif.

Ce qu'on peut réellement faire

La réponse honnête est : pas grand chose à l'échelle du système. Mais beaucoup à l'échelle de la décision individuelle.

Conclusion

On ne gagnera pas contre la complexité. Mais on peut choisir quelle complexité on accepte et laquelle on refuse.