Pour qui ? Ma méthode Compétences Réalisations Avis Contact

L'illusion de la complexité

Complex means Skillful Fallacy

L'Illusion de la Complexité

Dans le monde du développement logiciel, il existe un phénomène discret mais toxique : l’illusion que la complexité est une preuve de compétence. Ce que l’on appelle, dans un clin d’œil critique, le “Complex means Skillful Fallacy”.

“Si je ne comprends pas, c’est que l’auteur est plus fort que moi.”

Cette pensée réflexe est dangereuse. Elle pousse à ériger la confusion en talent. Pourtant, quelqu’un qui produit du code incompréhensible n'est pas forcément meilleur. Il est souvent dangereux pour le projet.

Le piège des comparaisons LinkedIn

On voit émerger cette tendance inquiétante : comparer un code simple (attribué au "Junior") à un code abstrait et dense (attribué au "Senior"). Le message implicite ? “Le vrai niveau, c’est l'incompréhensible.”

🚨

C'est faux. L'incompréhensibilité n'est pas un gage de maîtrise. C'est souvent l'inverse.

Les visages de la complexité inutile

L'Architecture Exhibitionniste

Des couches entières ajoutées non pas par besoin, mais pour démontrer une "maîtrise". L’élégance fait place à l’exhibition.

La Syntaxe Ésotérique

Ternaires imbriquées, raccourcis obscurs... Tout est bon pour perdre le lecteur, comme s'il s'agissait d'un sport d'élite.

Le Nommage Flou

process(), handle(), doStuff(). Le brouillard est maintenu volontairement, comme un magicien gardant ses tours secrets.

L'Absence de Commentaires

Ou pire, les commentaires trompeurs. L’auteur sait ce qu’il a voulu faire, et cela lui suffit. Le reste de l’équipe improvisera.

Le Duel : Malin vs Clair

J’ai assisté à des guerres de tranchées techniques où chaque ligne de code était une tentative de prouver sa valeur. Voici un exemple caricatural mais révélateur :

Version "Malin" (Illisible)
function q(x){return[...x].map((z,i)=>x.charCodeAt(i)%2?z.toUpperCase():z).join('')}
Version "Claire" (Maintenable)
function capitalizeOddChars(input){
  return input.split('').map((char, i) => i % 2 ? char.toUpperCase() : char).join('');
}

Laquelle préférez-vous devoir déboguer dans six mois ?

Pourquoi cette illusion perdure ?

  • Biais cognitifs : Le biais d'autorité nous fait croire que ce qu'on ne comprend pas est supérieur.

  • Culture d'entreprise : La complexité rend "irremplaçable". C'est le fameux "Bus Factor".

  • Validation managériale : Valoriser les "sorciers du code" qui sauvent la mise dans l'urgence conforte ce système toxique.

Les Conséquences

  • ❌ Dette technique en flèche.
  • ❌ Bugs incrustés et résistants.
  • ❌ Onboarding interminable pour les recrues.
  • ❌ Formation de silos de connaissance (savoir tribal).
  • ❌ Énergie gaspillée à comprendre le code au lieu d'améliorer le produit.

Vers une culture technique responsable

Il est temps de renverser la logique. La simplicité est une forme suprême de sophistication. Les ingénieurs brillants sont ceux qui simplifient sans appauvrir, ceux qui écrivent du code qui "s’explique tout seul".

En tant que CTO, ne cherchez pas à créer une équipe de génies incompris. Cherchez à bâtir une équipe capable de se relire, de se remplacer, de s’entraider. Un système que l’on peut confier sans crainte.

"Simplifier, ce n’est pas trahir la technique. C’est lui rendre hommage."

FAQ : Qualité du Code

C'est une métrique informelle qui représente le nombre de membres clés de l'équipe qui, s'ils étaient "renversés par un bus" (ou partaient), mettraient le projet en péril. Un code complexe augmente ce risque car seul son auteur peut le maintenir. L'objectif est d'avoir un Bus Factor élevé (connaissance partagée).
Valorisez la lisibilité lors des Code Reviews. Félicitez un développeur qui a refactorisé un module complexe pour le rendre plus simple. Instaurez des normes de codage claires (KISS - Keep It Simple, Stupid) et faites de la documentation une partie intégrante de la "Definition of Done".
Non, certains problèmes SONT intrinsèquement complexes (algorithmes métier, optimisation bas niveau). La "complexité accidentelle" (celle qu'on ajoute inutilement) est à bannir. La "complexité essentielle" doit être gérée, encapsulée et documentée, mais pas éliminée si elle est nécessaire.

Partager cet article

L'oeil du CTO

" En tant que CTO, j’ai appris que la valeur d’un système ne réside pas dans sa sophistication apparente, mais dans sa capacité à durer, à être compris, et à évoluer avec ses équipes. Favoriser une culture où la lisibilité est considérée comme une compétence clé n’est pas un luxe : c’est un choix stratégique. Un code complexe peut impressionner à court terme, mais un code clair, lisible et maintenable crée de la résilience, de la fluidité, et de la confiance dans l’organisation. La mission d’un CTO ne consiste pas à valider des prouesses techniques isolées. Elle consiste à bâtir un environnement dans lequel chaque développeur peut contribuer, comprendre, et transmettre. Un environnement où l’équipe grandit ensemble, au lieu de dépendre d'individualités qui compliquent pour mieux exister. Ma conviction est simple : la véritable excellence technique, c’est celle qui se partage. Et le code qui se partage, c’est d’abord le code que l’on comprend. "