4 février 2009
Imprimer ce billet

Pourquoi les projets agiles ne peuvent pas (vraiment) être menés au forfait

En matière de sous-traitance du développement logiciel, la pratique contractuelle la plus fréquente est celle dite du projet au forfait. La notion de forfait n’a, en principe, pas de rapport avec le processus de développement ou les pratiques d’ingénierie utilisée dans la réalisation du projet. Il s’agit simplement, dans l’esprit des contractants, de fixer les contours exacts de leur relation commerciale, et de définir leurs obligations mutuelles – en terme de coûts, de délais, de mode de paiement et de livraison. Dans un État de droit, et pour autant qu’elles ne soient pas abusives, ces dispositions contractuelles ont force de loi, et protègent efficacement les parties prenantes.

A bien y regarder cependant la neutralité du forfait vis à vis du processus de développement est moins évidente. Conçu historiquement pour satisfaire aux exigences de mise en concurrence des fournisseurs du Département de la Défense américain, le contrat au forfait est né du même substrat que le processus de développement en cascade – initialement décrit en 1970 par Winston W. Royce dans Managing the developpement of large software systems.

Ce processus de développement est aujourd’hui fortement remis en question, sous le constat empirique de son échec relatif, et sous l’impulsion des méthodes agiles. Je pense quant à moi que la « cascade » sera perçue dans quelques années comme l’aveuglement juvénile d’une industrie encore adolescente, à la recherche de son identité.

La question qui nous intéresse ici est de savoir si le projet au forfait survivra à la cascade. Autrement dit s’il est possible de mener au forfait un projet agile sous-traité. Certains le pensent, et certains intégrateurs proposent au demeurant de tels contrats. J’entends quant à moi démontrer ici que l’agilité et le forfait reposent sur des logiques financières radicalement antinomiques, qui les rendent difficilement conciliables.

Un petit tour du côté de l’étymologie devrait alerter les adeptes du forfait. Forfait vient du vieux français fors faire qui signifie… faire du mal !

Dans un contrat au forfait, le client définit ce qu’il souhaite sous la forme d’un cahier des charges. En retour, le fournisseur doit s’engage à livrer ce qui est décrit pour un coût et dans un délai fixes – les deux faisant l’objet d’une négociation initiale ou d’une mise en concurrence.

Ce contrat n’est pas franchement équitable : il est conçu pour protéger le client et fait porter très fortement le risque sur le fournisseur, qui doit s’engager sur un délai, sur un coût et sur un périmètre (fixé par le cahier de charges). L’efficacité réelle de cette protection reste cependant en grande partie illusoire : il n’est pas rare que le déploiement d’une application relève de l’intérêt vital d’une organisation et que l’abandon suivi d’un contentieux judiciaire ne soit pas une véritable option, quels que soient les recours légaux qu’autorise le contrat.

De leur côté, et très schématiquement, les méthodes agiles reposent sur un mode de développement que l’on dit incrémental. Le développement est réalisé en cycles courts, de durée fixe, au terme desquels un logiciel partiel mais opérationnel est livré. Le périmètre de chaque cycle est déterminé au début du cycle, ou peu avant. Les autres fonctionnalités sont maintenues dans un Product Backlog qui est par principe ouvert au changement. En d’autres termes, si au cours du projet certains besoins apparaissent, changent ou disparaissent, ces modifications sont intégrées dans le Product Backlog, et potentiellement implémentées dans le cycle suivant. La réalisation incrémentale permet en outre une gestion des priorités : les fonctionnalités les plus importantes (celles qui ont le plus de valeur) sont placées en haut de la liste, et implémentées en premier. Ce pilotage par la valeur, couplé au caractère incrémental de la réalisation est au cœur de la logique financière des projets agiles – nous y reviendrons.

En somme, pour adhérer aux paradigmes des méthodes agiles, l’un des termes du contrat forfaitaire classique doit être abandonné : le périmètre fixe, généralement incarné par des spécifications techniques et fonctionnelles détaillées.

C’est cet abandon qui me semble improbable.

Pour bien comprendre en quoi cet abandon est incompatible avec un contrat forfaitaire, un petit détour par la la micro-économie est nécessaire.

Le développement incrémental permet de produire en premier lieu les fonctionnalités ayant la plus grande valeur d’usage pour le client (c’est lui qui fixe les priorités). Cette caractéristique renvoi à ce que les économistes appellent l’utilité marginale décroissante.
Le concept d’utilité marginale décroissante est classiquement illustré par le phénomène de la soif : lorsque vous êtes assoiffé, la première gorgée d’eau vous procure une très forte satisfaction (une très grande utilité, donc). A mesure que vous vous désaltérez, chaque nouveau verre vous apporte une satisfaction moindre que le précédent. Si vous devez payer chaque verre, vous cesserez de boire dès que le coût du verre vous semblera excessif en regard de la satisfaction de le boire. Si le verre est gratuit, vous boirez jusqu’à étanchement total de la soif – c’est-à-dire jusqu’au stade où un verre supplémentaire vous causerait du désagrément (il faut vraiment arréter, sinon il est possible d’en mourir !).

Le développement incrémental produit le même phénomène : les fonctionnalités à plus forte valeur ajoutée sont produites en premier. Il est donc naturel que la valeur ajoutée des cycles successifs diminue.

Le graphique suivant illustre schématiquement ce principe d’utilité marginale décroissante :

Utilité marginale croissante

A chaque cycle, la valeur totale du logiciel augmente, mais la variation de valeur entre deux cycles successifs (c’est-à-dire la valeur marginale) diminue.

Cette vision est bien sûr très stylisée (j’ai utilisée un fonction linéaire de l’utilité marginale pour construire le graphe). Dans la réalité, la valeur marginale est nettement plus variable : au cours du développement, certains besoins à forte valeur ajoutée peuvent émerger ; ils seront intégrés au cycle suivant, augmentant sensiblement son utilité marginale. Symétriquement, certaines fonctionnalités déjà développées peuvent se révéler décevantes : leur valeur d’usage est moindre que celle escomptée – ce qui réduit d’autant la valeur acquise.

Ajoutons qu’au même titre que la satisfaction marginale du buveur d’eau, la valeur marginale du développement peut devenir négative : en effet, toute fonctionnalité une fois développée et déployée possède un coût de possession intrinsèque (ressources, maintenance, supervision, etc.) qui peut dépasser sa valeur propre. Une fonctionnalité inutile dans un logiciel possède typiquement cette caractéristique (il suffit d’être utilisateur des dernières versions de Microsoft Office pour se faire une idée précise de ce phénomène).

En micro-économie, la notion d’utilité marginale décroissante est utile pour expliquer le fonctionnement élémentaire des marchés. Si vous devez payer vos verres d’eau, vous cesserez de boire – et donc de payer – dès que le prix d’un verre vous semblera supérieur à son utilité marginale.

Le même principe est en oeuvre dans un projet agile : le développement devrait prendre fin lorsque le coût d’un cycle supplémentaire excède sa valeur marginale.

Or avec un forfait, ce moment n’arrive jamais !

Je m’explique, vous allez voir, c’est très simple.

Dans un forfait, le prix total est négocié frontalement, et peut donc être considéré en théorie comme un invariant. A contrario, les dépenses totales du fournisseur augmentant avec le temps, sa marge est directement dépendante de la durée des développements (et de ses coûts journaliers).
S’il applique un processus de développement incrémental, il se trouve dans la situation décrite par ce graphique (pour simplifier, on suppose que chaque cycle implique la même dépense que le précédent) :

Equilibres

A chaque nouveau cycle, la dépense totale du fournisseur augmente, et sa marge totale baisse en proportion. Au-delà d’un certain seuil, sa marge devient négative, et il travaille à perte. Pour sa survie, il est indispensable que le projet prenne fin avant le franchissement de ce seuil fatidique.

Logiquement, lorsque la valeur totale du logiciel atteint le prix du forfait, le projet devrait s’interrompre (cet événement a lieu après le 8ème cycle dans notre modèle). A ce moment, la marge du fournisseur est positive, et le client a obtenu une valeur d’usage à hauteur de son investissement. Malheureusement, rien n’incite dans ce modèle le client à déclarer le projet achevé. En effet, ici, le coût marginal d’un cycle est nul – réaliser une itération supplémentaire n’impute pas le budget total. Le client est donc incité à prolonger les développements aussi longtemps que la valeur marginale d’une itération est positive, poussant virtuellement le fournisseur à boire le calice jusqu’à la lie.

Le seul moyen pour le fournisseur de maîtriser ce risque est de définir en amont – contractuellement – le périmètre de sa production logicielle. Il demande au client de s’engager dès le départ sur des spécifications détaillées du logiciel, et protège ce périmètre en le plaçant sous un strict contrôle du changement – chaque évolution faisant l’objet d’un juteux avenant. Dès lors le changement devient un coût pour le client, qui a le choix entre le refuser (au risque de mécontenter ses utilisateurs) ou le payer (au risque de voir son budget exploser de façon incontrôlée). L’un des principes cardinaux des méthodes agiles, l’acceptation du changement, devient tout simplement impraticable.

Dans sa dynamique financière, le contrat au forfait s’avère donc incompatible avec les prédicats du développement incrémental – la glaciation des spécifications est intrinsèque à la gestion du risque par le fournisseur, et c’est en facturant au prix fort le changement qu’il optimisera sa marge. Cette aversion au changement est intrinséquement contradictoire avec les principes agiles.

Il reste bien sûr possible de bricoler quelques dispositions contractuelles offrant un terrain plus favorable aux méthodes agiles dans un projet au forfait. Mais aucune ne pourra effacer véritablement l’incompatibilité fondamentale entre un contrat focalisé sur le coût, et une pratique de développement incrémentale et adaptative.

Cela ne signifie évidemment pas que les méthodes agiles sont incompatibles avec la notion de contrôle budgétaire ou de maîtrise des coûts, bien au contraire. Mais il est indispensable, pour assurer le succès des méthodes agiles dans un contexte de sous-traitance, de repenser la façon dont sont conçues les relations contractuelles entre les parties. Cet aspect fera l’objet d’un très prochain article.