Slide 1

Slide 1 text

Dette technique : Entropie logicielle & Complexité accidentelle

Slide 2

Slide 2 text

Crash Report 365 millions de ligne de code 745 applications 160 entreprises 10 secteurs métier 35 % des défauts impactant la sécurité ou la stabilité coût estimé de la dette technique : $3.61 / ligne de code

Slide 3

Slide 3 text

« the ticking time bomb of technical debt is ticking louder and louder, and the clock is counting down faster and faster » Gartner — A ticking bomb

Slide 4

Slide 4 text

« the obligations incurred by a software organization when it chooses an expedient design or construction approach that increases complexity and is more costly in the long term. » Définition de Ward Cunningham

Slide 5

Slide 5 text

Votre dette technique est-elle intentionnelle ?

Slide 6

Slide 6 text

Dette Technique, Entropie Logicielle & Complexité Accidentelle @lilobase www.arpinum.fr Mon twitter

Slide 7

Slide 7 text

La dette technique c’est quoi finalement ?

Slide 8

Slide 8 text

La dette technique est indispensable à un projet Elle permet d’acheter une augmentation rapide de ROI pour le projet Mais avec un taux d’intérêt (élevé) Elle doit donc être générée consciemment, avec parcimonie et avec l’accord du PO

Slide 9

Slide 9 text

La dette technique est indispensable à un projet Les développeurs doivent donc être extrêmement explicites sur la prise de dette Ils ont le dernier mot sur le 
 remboursement de celle-ci La gestion de la dette technique demande une réelle expérience dans le développement

Slide 10

Slide 10 text

Mais la dette technique n’est pas une excuse ! Normalisation of deviance (et vous avez été payés pour l’écrire)

Slide 11

Slide 11 text

Mais si ce n’est pas de la dette, qu’est ce que j’ai ?

Slide 12

Slide 12 text

De la pourriture logicielle Du code toxique Un code source décrépit Il est temps d’utiliser les vrais mots.

Slide 13

Slide 13 text

Lehman’s Laws • "Continuing Change" — a system must be continually adapted or it becomes progressively less satisfactory • "Continuing Growth" — the functional content of a system must be continually increased to maintain user satisfaction over its lifetime • "Increasing Complexity" — as a system evolves, its complexity increases unless work is done to maintain or reduce it • "Declining Quality" — the quality of a system will appear to be declining unless it is rigorously maintained and adapted to operational environment changes

Slide 14

Slide 14 text

Parlons d’entropie Dans la théorie de la communication, nombre qui mesure l'incertitude de la nature d'un message donné à partir de celui qui le précède (L'entropie est nulle lorsqu'il n'existe pas d’incertitude). définition larousse « tendance naturelle d’un système à se désordonner »

Slide 15

Slide 15 text

Et c’est un phénomène naturel La seule façon de ne pas augmenter l’entropie est de ne pas ajouter de ligne de code Ajout de code Augmentation de l’entropie Décrépitude du code source

Slide 16

Slide 16 text

L’entropie peut être accélérée ou ralentie Entropie Complexité accidentelle Refactoring accélère ralentit

Slide 17

Slide 17 text

La complexité accidentelle Complexité accidentelle Complexité obligatoire Complexité essentielle La complexité d’un logiciel dépend de trois facteurs Complexité accidentelle Complexité obligatoire Complexité essentielle Une bonne conception cherche à minimiser la complexité accidentelle

Slide 18

Slide 18 text

Et c’est un processus inexorable Ajout de code Augmentation de l’entropie Pourriture du code source Code legacy

Slide 19

Slide 19 text

Et c’est un processus inexorable Le logiciel n’est plus viable économiquement Certains projets arrivent à ce stade avant même la mise en production Pour les projets critiques cela peut prendre très très longtemps Il coûte plus cher à maintenir qu’il ne rapporte Ajouter une fonctionnalité coûte plus cher que ce qu’elle rapporterait

Slide 20

Slide 20 text

Pour les projets critiques cela peut prendre très très longtemps Et c’est un processus inexorable TMA / souffrance pour les développeurs le code source est complètement pourri et le logiciel cherche à mourir Il continue à rapporter plus d’argent qu’il ne coûte

Slide 21

Slide 21 text

La complexité n’a pas une scalabilité linéaire Complexité Taille du système

Slide 22

Slide 22 text

C’est un processus inexorable, qui ne peut être stoppé Il faut donc limiter la taille d’une code base En maitrisant sa complexité Il faut donc assembler des modules simples et indépendants les uns des autres

Slide 23

Slide 23 text

Et ce n’est pas une architecture micro-service, c’est du découplage !

Slide 24

Slide 24 text

Mais alors, la décrépitude de mon code, elle vient d’où ?

Slide 25

Slide 25 text

Ne pas confondre cause et symptôme Code illisible, bug, etc. sont des symptômes Les causes réelles se trouvent dans les pratiques, la culture de l’équipe Supprimer le « mauvais » code source ne résoudra jamais l’origine du problème de qualité du code

Slide 26

Slide 26 text

Les mêmes causes produisent les mêmes effets « The same cause always produces the same effect, and the same effect never arises but from the same cause. »

Slide 27

Slide 27 text

« les organisations qui définissent des systèmes ... sont contraintes de les produire sous des designs qui sont des copies de la structure de communication de leur organisation. » La loi de Conway

Slide 28

Slide 28 text

De l’agilité managériale On change en cours de route le fonctionnel du logiciel (on a le droit on fait du scrum) L’équipe n’a pas l’expérience pour construire de façon incrémentale l’architecture Les développeurs accélèrent l’entropie du logiciel accélérant le phénomène de pourrissement

Slide 29

Slide 29 text

Faire des choses génériques TECHNIQUE MÉTIER GÉNÉRIQUE SPÉCIFIQUE Framework technique Framework d’entreprise DDD

Slide 30

Slide 30 text

Être générique « au cas où » « An important result […] is a movement toward simplicity of design. Before I used refactoring, I always looked for flexible solutions. I would wonder how any requirement would change during the life of the system. Because changes were expensive, I would look to build a design that would stand up to the changes I could foresee. The problem with building a flexible solution is that flexible solutions are more complex than simple ones. […] Building flexibility in all these places makes the overall system a lot more complex and expensive to maintain. » - Fowler, Refactoring

Slide 31

Slide 31 text

La première fois n’est jamais terrible Il faut être conscient que l’on ne découvrira pas le domaine métier dès le début Il faut pouvoir facilement refactorer le code existant au fur et à mesure de la découverte du domaine Pour pouvoir refactorer, il est important d’avoir des tests unitaires pour vérifier la non-regression.

Slide 32

Slide 32 text

Il faut donc éviter de faire « durcir » le code Utilisation de seams pour pouvoir étendre facilement le code source : • injection de dépendance • évènements « A good heuristic is that decisions that makes things easier, clearer while keeping options open are the best at reducing development costs. » - mozaicworks

Slide 33

Slide 33 text

Il faut donc éviter de faire « durcir » le code « Software is meant to be soft (easy to change) as opposed to hardware »

Slide 34

Slide 34 text

Dissociation entre le métier et son implémentation Un développeur n’est pas un traducteur
 métier -> technique Son métier est d’implémenter au plus près le métier dans le code source Un expert métier doit pouvoir comprendre ce que fait le code source (DDD)

Slide 35

Slide 35 text

Quand on a un marteau, tout ressemble à des clous Le développeur choisit un outil technique (framework) Il va contraindre son métier à s’adapter à l’outillage technique Il va créer de la distance entre le métier et son implémentation logicielle

Slide 36

Slide 36 text

Quand on a un marteau, tout ressemble à des clous Forte distance entre le métier et son implémentation logicielle Cela va rendre difficile la composition et l’évolution de l’existant pour s’adapter aux changements du métier La technique doit venir en support du métier et s’y adapter et non l’inverse

Slide 37

Slide 37 text

Manque de découplage Afin de pouvoir maintenir la taille du code source sous une taille critique, il faut créer de petits modules Cet avantage est totalement détruit si vous commencez à avoir des modules dépendants les un des autres Une des première cause de dépendance est la dépendance via la base de donnée

Slide 38

Slide 38 text

Manque de découplage C1 C2 C3 X X Complexity = Si pas de découplage Avec du découplage C1 C2 C3 + + Complexity =

Slide 39

Slide 39 text

Tentative de suppression des duplication Il est de bon ton dans notre industrie d’essayer de supprimer les duplications Deux choses sont équivalentes si elles partagent la même intention dans le même contexte En essayant de rassembler ces deux intentions, vous complexifiez et couplez deux codes qui n’ont rien à voir

Slide 40

Slide 40 text

Essayer d’optimiser prématurément L’optimisation est un problème complexe qui ajoute souvent de la complexité Optimiser avant même d’avoir identifié les causes des problèmes de performance est donc contre indiqué L’optimisation peut aussi être une notion de « cleverness »

Slide 41

Slide 41 text

Cargo Culting

Slide 42

Slide 42 text

Travailler sur un code source existant sans accélérer l’entropie

Slide 43

Slide 43 text

La règle des boy-scouts « Always leave the campground cleaner than you found it. » - Robert C. Martin

Slide 44

Slide 44 text

Le syndrome du second système « This second is the most dangerous system a man ever designs. […] The general tendency is to over-design the second system, using all the ideas and frills that were cautiously sidetracked on the first one. » - Fred Brooks

Slide 45

Slide 45 text

Le projet de « refonte » • Vos refactoring doivent aussi 
 être guidés par le métier • Redécouvrer vos Bounded Contexts • N’oubliez pas l’anti-corruption layer • Ne partez pas from scratch • Ne faîtes pas de « big bang » refactoring

Slide 46

Slide 46 text

Soyez intransigeant

Slide 47

Slide 47 text

Pour aller plus loin

Slide 48

Slide 48 text

Merci ! @lilobase www.arpinum.fr Si vous voulez 
 travailler avec nous Le 7 décembre : bordeaux.ncrafts.io