Technical debt

La dette technique rendue visible, y compris pour le développement logiciel Agile

15 juin 2021

Application modernization

Dans le monde du développement de logiciels, la dette technique n’est pas une inconnue. Elle représente le prix que vous payez pour les efforts supplémentaires que vous devrez livrer à l’avenir parce que vous n’optez pas ou ne pouvez pas opter, consciemment ou non, pour la meilleure solution mais pour la solution la plus acceptable à ce moment-là. Comme évoqué dans un blog précédent, les raisons de la dette technique peuvent être diverses et son existence n’est pas intrinsèquement mauvaise, voire insurmontable, tant que son niveau critique n’est pas dépassé.

Le malentendu réside cependant dans le fait que la dette technique est souvent associée à des systèmes hérités dits « obsolètes », plutôt qu’à des développements logiciels Agile « modernes ». Pourtant, c’est précisément le caractère itératif et incrémental d’Agile et la volonté d’atteindre les sprints présupposés qui créent le risque que vous soyez peut-être plus rapidement tenté de prendre des raccourcis ou des chemins de traverse et d’introduire ainsi une dette technique dans votre projet de logiciel. Il est donc important dans les projets Agile, d’être également conscient de la dette technique et des possibilités de sa constitution.

Complexité essentielle et accidentelle comme référence pour la dette technique

En soi, toute personne active dans le développement de logiciels a une certaine notion intuitive de la dette technique. Des concepts tels que la complexité essentielle et accidentelle peuvent aider à renforcer cette notion de manière concrète, comme critère de prise de conscience et de remédiation.

L’approche de la complexité essentielle et accidentelle nous vient de Fred Brooks1, qui affirme que le logiciel – la solution – a une certaine complexité essentielle inhérente à la complexité du problème que vous souhaitez résoudre avec celui-ci. En revanche, la complexité accidentelle est une complexité ajoutée, évitable. Il s’agit d’une conséquence d’une action humaine – volontaire ou involontaire –, ce qui nous amène au rapport avec la dette technique.

La complexité essentielle est intrinsèquement liée à la création de valeur est donc inévitable. Si vous y touchez ou si vous essayez de (trop) la limiter, cela entraîne souvent une simplification et une réduction de valeur, ce que vous voulez bien entendu éviter. Il s’agit donc surtout de minimiser la complexité accidentelle, précisément parce qu’elle n’apporte aucune valeur ajoutée, bien au contraire.

Ne jouez pas à cache-cache

Cela peut sembler simple ou évident, mais ce n’est certainement pas toujours le cas. Le développement de logiciels est souvent une donnée complexe. C’est pourquoi il est important de rendre transparentes la complexité accidentelle et la dette technique qu’elle engendre et, tout comme pour la complexité essentielle, de les répertorier et les rendre tangibles pour tous les stakeholders, y compris le business.

En reprenant aussi systématiquement la complexité accidentelle dans le Product backlog, vous créez cette transparence nécessaire. Le backlog est d’ailleurs un artefact vivant qui s'y prête parfaitement. Le Product Owner peut alors décider avec l’équipe de développement et en concertation avec le business à quelle dette technique il faut s’attaquer et quand, et à laquelle pas (encore). Il doit s’agir d’un choix délibéré, sachant qu’il y a une dette technique et que vous la traînerez avec vous si elle n’est pas éliminée.

Une priorisation Pareto (en bref, selon la règle 80/20 connue) en fonction de la création de valeur constitue à cet égard un principe sain. Car ramener l’intégralité de la dette technique à zéro est une illusion, notamment en raison de « l'économie » qui se cache derrière les faits. L’absence d’élimination d’une dette déterminée est d’ailleurs aussi un choix valable, du moment qu'il est délibéré.

Technical debt

Évitez une tour de Babel

Si la dette technique porte le label « technique », l’aspect technique n’est en fait qu’une des raisons pour lesquelles la dette technique naît. Elle peut apparaître partout dans le trajet et, souvent, le potentiel de la dette technique est déjà créé avant le développement effectif du logiciel, donc dans les phases qui précèdent.

Un moteur important au niveau stratégique peut par exemple être que la stratégie commerciale d’une entreprise n’est pas claire, de sorte que le département IT ne sait pas non plus très bien comment y faire face ou anticiper. L’IT et la stratégie ne sont peut-être pas suffisamment alignés, de sorte que l’accent est mis sur les mauvaises initiatives IT.

En d’autres termes, la dette technique est une responsabilité end-to-end tant de l’IT que du business. Et c'est là que le bât blesse parfois. Traditionnellement, et ce n’est d'ailleurs pas tout à fait incompréhensible, l’IT se penche surtout sur la solution, le logiciel, et le business surtout sur le problème, sur ce qui doit être résolu. Il est toutefois essentiel que les deux parties explorent ensemble le problème de manière approfondie et qu’elles en comprennent suffisamment la complexité essentielle avant qu’IT puisse procéder au développement de la solution de manière durable. Cela ne signifie pas que des études approfondies doivent être réalisées à l’avance, mais que l’on travaille de concert en mettant l’accent sur cette complexité. Ce qui est également parfaitement possible dans un contexte Agile.

Tant le business que l’IT doivent pour cela sortir quelque peu de leur zone de confort, un bon alignement ne pouvant se manifester que si les deux parties se donnent la peine de parler un langage commun et compréhensible et de créer un cadre démocratique d’équivalence.

La bonne nouvelle est... qu'il y a des solutions

En choisissant au préalable les bons catalyseurs qui formalisent l'alignement du business et de l'IT. Le Domain Driven Design, avec le cloud (micro-services) comme fondement architectural, par exemple. Le Domain Driven Design, DDD, est une approche de développement où le business et l’IT sont rapprochés à partir du noyau, la réflexion par domaine, au moyen d’un langage commun, appelé langage omniprésent. La communication et la collaboration occupent une place centrale et ont pour objectif de supprimer la friction entre les parties prenantes et d’augmenter l’agilité.

Dans ce cadre, l’accent est initialement mis sur le problème et plus tard seulement sur la solution technique qui est principalement considérée comme un facilitateur. En rendant la complexité essentielle accessible à tous, vous pouvez franchir de grandes étapes dans l’amélioration de la business agility de votre organisation. En même temps, la complexité accidentelle peut être mieux identifiée et évitée dans la mesure du possible. En impliquant le business en tant que partie prenante dans le développement du logiciel, le DDD permet de créer de la valeur plus rapidement et de réduire la marge d’erreur. C’est précisément en y accordant une attention explicite que le risque de complexité accidentelle est ainsi réduit au minimum. Mission accomplie, non ?

1 Frederick P. Brooks, 1987, “No silver Bullet - Essence and accident in software engineering”

Ne vous contentez pas de parcourir votre trajet de modernisation

Nous sommes à votre disposition pour transformer et optimiser vos applications et charges de travail IT à l'épreuve du temps.  

Découvrez tous les blogs
En savoir plus

Inscrivez-vous et recevez nos blogs dans votre boîte mail