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.