26 Novembre 2023
Dans un dernier article, le concept de Dette Technique était comparé à celui de risque. A cette occasion, la notion de risque était très brièvement introduite. Cet article se propose de revenir sur cette définition succincte et de la détailler pour montrer comment les risques techniques peuvent être gérés sur un projet et comment cette gestion peut être le levier d'une amélioration des pratiques de développement logiciel.
Qu'est-ce qu'un risque technique ?
Un risque peut être défini comme la possibilité d'occurrence d'un événement indésirable. Dans le cadre d'un projet de développement logiciel, on pourrait compléter la définition en précisant que cet événement indésirable dégrade la qualité du produit logiciel ou l'efficacité de sa réalisation.
Sur la base de cette définition, un risque peut être caractérisé avec les informations suivantes :
Cette caractérisation fait apparaître deux éléments qui sont de nature descriptive et deux éléments qui relèvent d'une quantification. Compte tenu de la difficulté de quantification des risques, de nombreuses méthodes de gestion des risques proposent une échelle de valeur simplifiée proposant 3 à 5 niveaux.
Pour l'impact, on aura a par exemple par ordre croissant d'importance :
Côté probabilité d’occurrence, on aura par exemple par ordre croissant :
Pour préciser l'échelle de valeur, il n'est pas rare d'y voir associés quelques repères numériques. Par exemple, on pourra indiquer qu'un niveau de probabilité "Presque certain" sera utilisé si on estime la probabilité supérieure à 90% et qu'un niveau "Probable" traduit une probabilité entre 70% et 90%. En ce qui concerne l'échelle d'impact, donner des repères suppose d'introduire une catégorisation du risque. Par exemple, on pourra considérer que l'impact d'un risque se traduit par un retard de livraison de certaines fonctionnalités, auquel cas l'unité des repères de mesure de l'impact peut être un nombre de jours ou de semaines. Parmi les catégories classiques d'impact, on trouvera par exemple : le planning, les efforts, le coût, la conformité fonctionnelle, la conformité technique (par exemple non-respect d'exigences de sécurité ou de performances), la satisfaction des utilisateurs...
Cette catégorisation n'est pas ce qui distingue les risques techniques d'une autre famille de risques, celle des risques organisationnels. C'est plutôt dans l'origine du risque qu'on doit chercher à préciser ce qui fait d'un risque, un risque technique. En effet, dans un projet de développement logiciel, on peut distinguer la définition du produit à réaliser de l'organisation qui permet de le réaliser. Il arrive fréquemment que ces risques soient gérés de manière séparée parce que les responsables de la définition du produit et de l'organisation relèvent de personnes différentes.
Comment gérer les risques techniques ?
La caractérisation des risques évoquée ci-dessus suggère qu'il est nécessaire d'identifier et de suivre les risques. Cette nécessité est basée sur le postulat qu'il est plus efficace d'anticiper un problème que d'en subir les impacts sans y être préparé.
Gérer les risques techniques commence par une activité d'identification et de valorisation des risques.
Une fois le risque identifié et caractérisé, se pose la question de la façon de le gérer. Plusieurs options s'offrent à nous :
Notons que les stratégies d'évitement et de mitigation peuvent être complémentaires : on peut chercher à la fois à réduire la probabilité d'occurrence du risque et son impact s'il était avéré. En jouant sur ces deux axes, on peut ainsi ramener un risque d'importance élevée dans une zone d'acceptabilité.
Prioriser et exécuter un plan d'actions
Les options évoquées ci-dessus pour gérer un risque donnent lieu à des actions : accepter, éviter ou mitiger. Ces actions alimentent un plan d'actions qui va devoir être géré. En effet, si une action d'évitement ou de mitigation d'un risque a un impact sur son importance, il vient aussi avec un coût comprenant au moins l'effort de mise en oeuvre. Les questions qui vont alors se poser sont :
Les actions identifiées pour éviter ou mitiger les risques doivent ainsi être traitées comme toute activité du projet : on doit en estimer l'effort, identifier les compétences requises pour la mener, vérifier la disponibilité des ressources et évaluer les coûts complémentaires (par exemple l'achat de licence d'un outil, ou la sollicitation d'une expertise externe à l'équipe). Une fois les actions du plan caractérisées, on peut alors mesurer leur ROI ("return on investment" ou retour sur investissement) pour vérifier que le jeu en vaut la chandelle. Même si nous sommes républicains, nous pouvons ici accepter que le ROI désigne les actions à réaliser et dans quel ordre.
Mais la question du ROI est loin d'être simple à adresser. A ce stade, j'ai en effet introduit des éléments non directement comparables. Si on reprend l'exemple proposé ci-dessus, le risque pèse sur la maintenabilité de la solution et est susceptible de mobiliser des actions se traduisant par des efforts supplémentaires et éventuellement par le prix d'une licence d'un logiciel tiers. Comment comparer maintenabilité, efforts et prix de licence ? Ma position sur ce sujet (dont je suis assez convaincu qu'elle ne fait pas consensus) consiste à tout ramener sur la même unité : l'Euro.
Je pense en effet que la plupart des critères de gestion des risques peuvent se ramener d'une manière ou d'une autre à une question financière. C'est évident si on parle d'acheter une licence. Mais c'est assez facilement transposable si on parle d'efforts et compétences à mobiliser puisque nos organisations valorisent un coût journalier moyen des collaborateurs. Dans le cas d'un décalage planning, il est aussi possible de projeter l'impact en euros si on considère l'impact financier d'un décalage d'un jalon de paiement, ou si le décalage induit une pénalité de retard. Dans le cas d'une non-conformité fonctionnelle, on peut évaluer l'impact sur la rentabilité du service rendu par le logiciel développé.
On peut également jouer sur des risques dérivés pour caractériser l'impact financier d'un risque technique. Dans le cas du problème de maintenabilité évoqué plus haut, on peut en effet le traduire par une perte fonctionnelle qui ne serait plus résolue sur la durée de vie complète du logiciel. Et si cette situation est inacceptable, par une estimation des coûts de remplacement du composant logiciel concerné.
Si on parvient à quantifier l'impact d'un risque et les actions associées, on peut alors évaluer leur ROI en pondérant l'impact du risque par sa probabilité d'occurrence. Si un risque présente 50% de chances de produire un événement dont l'impact est estimé à 10k€, alors l'impact pondéré est de 5k€. Si j'identifie une action de mitigation, dont la mise en oeuvre me coûte 1k€, mais qui permet d'amortir l'impact du risque de 5k€, alors je peux investir pour ramener mon risque à 2,5k€. Dans ce cas le ROI est de 1,5k€. Cette action pourrait par ailleurs être mise en balance avec une action d'évitement de 2k€ permettant de ramener la probabilité du risque à 10%. Dans ce cas, le risque pondéré est révisé à 1k€ et mon ROI est de 2k€.
Cette approche de la gestion de risque suppose de s'appuyer sur estimation du risque qui va au-delà de la caractérisation de la probabilité et de l'impact sur une échelle à 5 niveaux. Il faut en effet se projeter sur des valeurs absolues qu'il n'est pas toujours simple d'évaluer. Cette réserve appelle ainsi deux remarques :
Le Software Craftsmansip et le risque
L'analyse de risques permet de faire émerger des actions techniques qui vont dans le sens d'un produit de qualité et pérenne. En ce sens, c'est une activité convergente avec les valeurs du Software Craftsmanship, en particulier pour ce qui concerne nos ambitions de réaliser des logiciels bien conçus et d'apporter de la valeur en continu. Le partage des retours d'expérience, comme moyen d'identifier et caractériser les risques, est aussi vertueux du point de vue de la volonté de créer une communauté de professionnels. Mais, il n'est en général pas bien difficile de se convaincre entre crafters de la nécessité de mener telle ou telle action pour répondre à ces enjeux. Là où la gestion des risques peut en revanche aider, c'est dans la capacité qu'elle apporte à convaincre les parties prenantes moins sensibles aux enjeux techniques.
Le recherche d'excellence qui motive le Crafter se heurte souvent à une objection de sur-qualité de la part des parties prenantes qui tiennent les cordons de la bourse. Cette objection est parfois tout à fait justifiée. Mais lorsqu'elle ne l'est pas, le Crafter peine à convaincre du bien-fondé de ses propositions. Le pilotage par le risque peut alors être un levier de conviction essentiel : argumenter sur la plus-value des propositions de manière rationnelle, idéalement de manière chiffrée. Cette remarque doit se comprendre à la fois du point de vue des pratiques que l'on associe au Software Craftsmanship et du point de vue des choix techniques.
Une gestion rigoureuse des risques est un atout précieux pour le Crafter qui souhaite argumenter en faveur des solutions qui lui semblent les mieux adaptées au contexte de ses réalisations. Et si cette gestion n'est pas toujours placée sous sa responsabilité, il lui sera utile de s'y intéresser et d'y contribuer dès qu'il le peut. Pas seulement Pour l'Amour du Risque.