Combien de fois ai-je entendu quelqu’un s’exclamer : « Mais pourquoi il a fait ça comme ça?! » en parlant du code ou de l’architecture produit(e) par une autre équipe ? Et combien de fois l’ai-je moi-même dit.
Ce genre de phrase peut être déclamé, avec plus ou moins de mauvaise humeur, dans 2 cas de figure:
Lorsque je me surprends à tomber dans l’un ou l’autre de ces cas de figure, je m’efforce de me taper sur les doigts pour me rappeler de temporiser – un minimum – mon jugement.
La première question à se poser est :
Une « pratique » est un ensemble de conventions ou de manières de faire partagé par une communauté, par exemple une équipe de développement ou une entreprise.
La pratique ne devient « bonne » que lorsqu’elle a fait la preuve de son efficacité de manière répétée. La question est donc de savoir par rapport à quoi on juge qu’elle est efficace.
En effet une bonne pratique n’est pas absolue. On peut résumer une bonne pratique comme étant la recette réputée efficace que l’on applique au croisement:
Tous ces éléments ne sont rien d’autre que des hypothèses de travail. Or le propre d’une hypothèse est qu’elle peut être invalidée. Soit d’emblée (ce qui peut souvent être le cas dans le cadres de PoCs par exemple), soit plus tard.
La dimension temps est donc centrale à deux titres :
Le problème ici est qu’on ne peut pas prédire l’avenir : on doit donc faire des choix en sachant que l’avenir peut nous donner tord. En revanche on sait très bien ausculter le passé et constater le présent. Et c’est là que le présentisme pointe le bout de son nez.
On peut donc être tenté de juger aujourd’hui une solution à partir de ce qu’on sait (ou croit savoir …) du passé et du présent et non de ce qu’on pensait savoir ou imaginait à l’époque.
A chaque fois que l’on se tape le front en lâchant un juron devant le code ou la solution d’un autre, il conviendrait en réalité de se demander :
Ces simples questions permettent d’éviter de tomber dans le piège du présentisme ou biais rétrospectif, c’est à dire de juger les décisions passées à la lumière des connaissances actuelles. Mais alors, comment être sûr de connaître les hypothèses initialement retenues ?
Documenter les décisions est généralement un bon point de départ. Dans le contexte du développement logiciel, une réponse peut être de rédiger des Architecture Decision Records (ADR), qui permettent d’archiver les décisions techniques, le contexte et les alternatives envisagées. Ils aident à contextualiser et comprendre les choix passés, permettant ainsi de faciliter la maintenance de la solution.
D’ailleurs, si les ADRs sont efficaces pour répondre à un besoin (documentation des choix passés), dans un contexte (le développement logiciel) et avec un objectif d’optimisation en tête (maximiser la maintenabililté), ne suis-je pas en train de dire que les ADRs sont … une bonne pratique ? 😬
En fin de compte, je dirais que choisir d’appliquer ou non telle ou telle pratique reste fondamentalement un pari sur l’avenir très fortement dépendant du contexte. Un pari que l’on juge relativement sûr étant données les hypothèses et les expériences passées, mais malgré tout ni plus ni moins qu’un pari.