Le «point de complexité excessive» est désigné en anglais comme:
OH MON DIEU QU'EST-CE QUE CE CRAP.
Le problème est que cela peut s'appliquer à quelque chose qui est en fait simple, mais qui est mis en œuvre d'une manière si horrible que vous avez la même réaction.
Il peut donc être difficile de distinguer quelque chose de très complexe de quelque chose de très horrible.
CEPENDANT: Ce qui a tendance à arriver à tous les logiciels est un processus un peu comme ceci:
Étape 1: Avoir une belle spécification, faire une belle conception, mettre en œuvre de belles choses. Tout le monde est content.
À la fin de l'étape 1: les développeurs se félicitent de la merveilleuse élégance de leur conception et s'en vont heureux en pensant "J'ai un héritage merveilleux ici pour que d'autres ajoutent des choses à l'avenir, ce sera merveilleux et le monde sera un meilleur endroit."
Étape 2: Certaines modifications sont apportées, des choses sont ajoutées, de nouvelles fonctions sont incluses. L'architecture et la structure de l'étape 1 ont rendu ce processus assez indolore. [Mais oups, le "facteur de cruauté" a juste augmenté un peu.]
À la fin de l'étape 2: les développeurs se félicitent de la merveilleuse élégance de leur conception et s'en vont heureux en pensant "Gee, je suis tellement intelligent d'avoir fait toutes ces indemnités à l'étape 1. Cela s'est si bien passé. J'ai un merveilleux héritage ici pour que d'autres ajoutent des choses à l'avenir, ce sera merveilleux et le monde sera un meilleur endroit. "
Étape 3: Plus de modifications sont apportées, plus de choses sont ajoutées, plus de nouvelles fonctions, un tas de choses sont modifiées, les commentaires des utilisateurs sont réellement écoutés.
À la fin de l'étape 3: les développeurs se félicitent de la merveilleuse élégance de leur conception, et s'en vont assez heureux en pensant "Gee cette architecture est assez bonne pour permettre à tant de changements de s'insérer facilement. Mais je suis un peu mécontent à propos de X et Y et Z. Ils pourraient être nettoyés un peu maintenant. Mais !!! Ahhh !!! Je suis si intelligent d'avoir fait toutes ces allocations à l'étape 1. Cela s'est si bien passé. J'ai un merveilleux héritage ici pour d'autres à ajouter des choses à l'avenir, ce sera merveilleux et le monde sera un meilleur endroit. "
Étape 4: tout comme l'étape 3. Sauf:
À la fin de l'étape 4: les développeurs pensent: "Ce truc qui était si bon devient UGLY à entretenir. Il a vraiment besoin de changements sérieux. Je n'aime pas vraiment travailler là-dessus. Il a besoin de refactoring. Je me demande ce que le patron dira quand je lui dirai qu'il a besoin de 6 semaines et qu'il n'y aura rien à voir pour les utilisateurs à la fin de cela ... mais j'aurai encore 5 ans de portée de modification future délicieuse en faisant cela .... hmmm .. . le temps d'aller au pub pour un peu de bière. "
Étape 5: Un tas de modifications doivent être apportées.
Et PENDANT l'étape 5, les développeurs se disent: "Ce code est nul. Qui a écrit cela? Ils devraient être abattus. C'est horrible. Nous devons le RÉÉCRIRE."
L'étape 5 est fatale. C'est là que le facteur de cruauté est devenu si mauvais que le code ne peut pas simplement avoir quelques changements de plus, il doit avoir de gros changements.
Le problème à l'étape 5 est le désir de le jeter et de recommencer. La raison pour laquelle cela est fatal est "The Netscape Factor". Allez sur Google. Les entreprises meurent à ce stade, car recommencer signifie que vous commencez avec environ 50% d'hypothèses au lieu de faits, 150% d'enthousiasme au lieu de connaissances, 200% d'arrogance au lieu d'humilité ("Ces gars-là étaient tellement stupides!"). Et vous introduisez un tas de nouveaux bugs.
La meilleure chose à faire est de refactoriser. Changez un peu à la fois. Si l'architecture se fatigue un peu, corrigez-la. Ajoutez, étendez, améliorez. Progressivement. À chaque étape du parcours, testez, testez et testez encore plus. Des changements incrémentiels comme celui-ci signifient que 10 ans plus tard, le code actuel et original est comme une hache de grand-père ("il avait 10 nouvelles têtes et 3 nouvelles poignées mais c'est toujours une hache de grand-père"). En d'autres termes, il ne reste pas grand-chose en commun. Mais vous êtes passé de l'ancien au nouveau progressivement et avec soin. Cela réduit les risques, et pour les clients, cela réduit le facteur d'énervement.