Amis

Accueil‎ > ‎

Agile, c'est quoi ?

Ces derniers temps, on entend beaucoup parler d'agilité en matière de gestion de projets dans le secteur du développement. Certains perçoivent cette approche comme un effet de mode ou comme une utopie difficilement compatible avec le contexte de nos projets surtout dans le cadre d'un contrat au forfait.

Mais qu'est ce que l'approche Agile au juste ? D'où vient-elle ? Comment s'applique-t-elle ? Y a-t-il des retours d'expérience ?

Nota bene : Pour ceux qui n'aiment pas lire, Valtech offre une vidéo de présentation des méthodes agiles en français (40 minutes).

Mis à jour en juin 2009


Agile en quelques mots

Le terme "Agile" définit une approche de gestion de projet de développement qui prend en quelque sorte le contre-pied des approches traditionnelles prédictives et séquentielles (cycle en V ou waterfall).

En effet, une approche dite traditionnelle attend généralement du client une expression détaillée et validée du besoin en entrée de réalisation, laissant peu de place au changement. La réalisation dure le temps qu'il faut et le rendez vous est repris avec le client pour la recette. Cet effet tunnel peut être très néfaste, on constate souvent un déphasage entre le besoin initial et l'application réalisée. On se rapporte alors aux spécifications validées et au contrat. Certains projets vont jusqu'à se terminer dans la douleur (surtout dans le cadre d'un projet signé au forfait) au risque de compromettre la relation client. De plus il n'est pas rare que certaines fonctionnalités demandées se révèlent finalement inutiles à l'usage alors que d'autres découvertes en cours de route auraient pu donner plus de valeur au produit.

Une enquête de 1994 du « Standish Group » (Certes controversée. Comme toutes les enquêtes j'ai envie de dire) fait le constat suivant sur ces fameuses approches traditionnelles :
« 31 % des projets informatiques sont arrêtés en cours de route, 52 % n'aboutissent qu'au prix d'un important dépassement des délais et du budget et en offrant moins de fonctionnalités qu'il n'en était demandé ; seuls 16 % des projets peuvent être considérés comme des succès. ».

Cette même enquête renouvelée en 2008 indique un taux de réussite de 35% ce qui est plutôt positif mais cela demeure assez faible, le problème reste entier.

Parmi les motifs d'échecs arrivent en tête :

  • Manque d'implication des utilisateurs finaux : 12,8 %
  • Spécifications incomplètes : 12,3 %
  • Changement de spécifications en cours de projet : 11,8 %

L'approche Agile propose au contraire de supprimer purement et simplement cet effet tunnel en donnant davantage de visibilité et en impliquant le client du début à la fin du projet en adoptant un mode itératif et incrémental. Elle considère que le besoin ne peut être figé et propose de s'adapter à ce dernier. Mais pas sans un minimum de règles

Principe de fonctionnement

Une approche Agile part du principe que spécifier dans les détails l'intégralité d'un produit avant de le développer est contre productif. Cela revient à planifier dans les détails un Paris - Narbonne en voiture par les petites routes (spécifiant chaque villes et villages traversés, chaque rue empruntée dans les agglomérations, litres d'essence consommés, kilomètres parcourus,...). Les imprévus ne manquerons pas d'arriver : embouteillages, déviations, travaux, sens de circulation inversés, voir la panne, etc. Et combien de temps aurez vous passé à planifier cet itinéraire, comment réagirez vous face à vos frustrations de ne pas pouvoir appliquer votre plan à la lettre ?

Une approche Agile consiste à se fixer un premier objectif à courts termes (une grande ville par exemple) et se lancer sur la route sans tarder. Une fois ce premier objectif atteint, on marque une courte pose et on adapte son itinéraire en fonction de la situation du moment. Et ainsi de suite jusqu'à atteindre la destination.

Dans le cadre d'un projet informatique, les choses se déroulent ainsi :
Le client élabore sa vision du projet et liste les fonctionnalités du produit à réaliser sans rentrer dans les détails. Il soumet cette liste à l'équipe de développement qui estime le coût de chacune d'entre elles, ont peut ainsi se faire une idée approximative du budget global. Il attribue ensuite à chaque fonctionnalité une valeur métier (certaines fonctionnalités ont plus de valeur ou d'importance que d'autres). Ces 2 informations (valeur métier et coût) permettent de prioriser le besoin.

L'équipe développe le produit dans l'ordre ainsi établi au fil d'itérations courtes. Chaque itération inclue des travaux de conception, de spécification fonctionnelle et technique quand c'est nécessaire et bien sûr de développement. A la fin de ces dernières, le produit partiel est montré au client. Ce dernier peut alors se rendre compte par lui même très tôt du travail réalisé, de l'alignement sur le besoin. L'utilisateur final quant à lui peut se projeter dans l'usage du produit et émettre des feedbacks précieux pour les futures itérations. La visibilité ainsi offerte est clef. Les risques sont levés très tôt.

Si le client a priorisé avec soin son besoin, il peut avoir l'opportunité de réduire le "time to market" si il estime que le produit en l'état (partiel) peut aller en production, économisant ainsi son budget et récoltant un premier retour sur investissement. Il a aussi la possibilité de changer en cours de route la priorité des fonctionnalités qui n'ont pas encore été développées. Pour retarder une fonctionnalité dont le besoin n'est pas mûr, pour ajouter une nouvelle fonctionnalité cruciale en échange du retrait d'une autre (respectant ainsi son budget),...

Cette souplesse ainsi offerte est un véritable atout pour le client.

Un peu d'histoire

Je ne vais pas rentrer dans les détails en citant les grands noms qui sont à l'origine de l'approche « Agile », de ses méthodes ou l'ensemble des événements agiles de ces 20 dernières années. Nous sommes des gens pressés, concentrons nous sur l'essentiel.

La première chose à savoir est que l'approche Agile n'est pas un effet de mode né de la dernière pluie. En effet la première approche de gestion de projet de développement itératif date de 1986. La première mise en œuvre de "Scrum" (une des méthodes Agile les plus réputées) date de 1993.

La seconde concerne un événement majeur rassemblant, en 2001, dix sept figures éminentes du développement logiciel pour débattre du thème unificateur de leurs méthodes respectives, dites méthodes agiles. De cet évènement est né le Manifeste Agile rassemblant à la lueur des expériences de chacun les critères pour définir une nouvelle façon de développer des logiciels.

Aujourd'hui ces méthodes ont fait leurs preuves. Tout le monde ou presque a au moins entendu parler d'une méthode Agile (Scrum, XP, RAD, Chrystal Clear,...). L'outillage associé est maintenant disponible sur le marché y compris dans le secteur Open Source, les événements et séminaires se multiplient.

Les valeurs Agile

L'approche agile consiste donc à s'adapter au changement. Selon les quatre principes d'opposition suivants :


« Les personnes et interaction priment sur les processus et outils »

Dans l'optique agile, l'équipe est bien plus importante que les moyens matériels ou les procédures. Il est préférable d'avoir une équipe soudée qui communique. La communication est une notion fondamentale.

« Une application qui fonctionne prime sur la documentation exhaustive »

Il est vital que l'application fonctionne. Le reste, et notamment la documentation, est secondaire. La documentation représente une charge de travail importante, mais peut pourtant être néfaste si elle n'est pas à jour. Attention, cela ne veut pas dire que l'on s'en passe. On doit simplement s'assurer que cette dernière reste synthétique, lisible et facile à maintenir, bref le "Juste ce qu'il faut". 

« La collaboration avec le client prime sur la négociation de contrat »

Le client doit être impliqué dans les travaux de réalisation. On ne peut se contenter de négocier un contrat au début du projet, puis de négliger les demandes imprévues du client qui ne manquerons pas de survenir en cours de route. En contrepartie, le client doit collaborer avec l'équipe et fournir un feed-back continu sur l'adaptation du logiciel à ses attentes, prendre des décisions importantes et faire des choix en temps voulu, aider l'équipe à lever les obstacles quand c'est de son ressort...

« L'ouverture au changement prime sur le suivi d'un plan »

La planification initiale et la structure du logiciel doivent être flexibles afin de s'adapter aux changements et aux imprévus tout au long du projet. Citation de Darwin : « Les espèces qui survivent ne sont pas les espèces les plus fortes, ni les plus intelligentes, mais celles qui s'adaptent le mieux aux changements. ».

Les méthodes Agile et leur tronc commun

L'ensemble des méthodes agile respectent ces 4 valeurs ainsi le tronc commun de pratiques suivantes :

1 - Les pratiques liées aux ressources humaines

  • Participation de l'utilisateur final aux groupes de travail.
  • Groupes de travail disposant du pouvoir de décision.
  • Autonomie et organisation centralisée de l'équipe.
  • Spécification et validation permanente des Exigences.

2 - Les pratiques liées au pilotage du projet

  • Niveau méthodologique variable en fonction des enjeux du projet.
  • Pilotage par les enjeux et les risques.
  • Planification stratégique globale basée sur des itérations rapides.
  • Réalisation en jalons par prototypage actif itératif et incrémental.
  • Recherche continue d'amélioration des pratiques.

3 - Les pratiques liées à la qualité de la production

  • Recherche d'excellence technique de la conception.
  • Vision graphique d'une modélisation nécessaire et suffisante.
  • Vision de la documentation nécessaire et suffisante.
  • Normes et techniques raisonnables de qualité du code (métrique).
  • Architecture à base de composants.
  • Gestion des changements automatisée.

Chaque méthode se distingue cependant des autres.

L'approche idéale consiste à appliquer ce tronc commun et tirer des différentes méthodes, les outils ou pratiques spécifiques appropriés au contexte du projet.

La Méthode « Scrum »

Le package Scrum

Scrum est considéré comme un cadre ou « framework » de gestion de projet. Ce cadre est constitué d'une définition des rôles, de réunions et d'artefacts.

Scrum définit 3 rôles : le « product owner » (représentant du client), le « Scrum Master » (équivalent au chef de projet) assurant le respect de la méthode et l'équipe.

Le principal artefact est la liste d'exigences priorisée ou « product backlog ».

La vie d'un projet Scrum est rythmée par un ensemble de réunions clairement définies :

  • Planification du Sprint (Sprint = itération) : on choisit avec le « product owner » dans le « product backlog » les éléments que l'on s'engage à terminer (on estime de façon plus détaillée la charge associée en heures).
  • Revue de Sprint ou démonstration : présentation des fonctionnalités terminées à la fin de chaque Sprint, recueil des feedbacks des utilisateurs finaux.
  • Rétrospective pour tirer le bilan et leçons du Sprint passé (principe d'amélioration continue)
  • Le Scrum quotidien : réunion debout (stand up meeting) de 15 minutes maximum au cours de laquelle chacun réponds à 3 questions simples sans rentrer dans le détail : « Qu'as-tu fait hier ? Que vas-tu faire aujourd'hui ? Quelles difficultés rencontres tu ? »

Le schéma suivant illustre le processus Scrum :


Scrum apporte également quelques outils très utiles comme le planning poker qui permet de chiffrer très efficacement des tâches (ou exigences).

L'organisation générale

Démarrage

L'approche Scrum propose de commencer par lister les exigences du client afin de produire le « Product Backlog » qui ressemblerait un peu à ça pour la réalisation d'un site d'e-commerce :


Elément du backlog Estimation
Un internaute peut rechercher un article selon différents critères 5
Un gestionnaire du catalogue de produits peut ajouter des articles 2
L'internaute peut acheter en ligne un ou plusieurs articles 4
... ...


L'unité de charge de la colonne « Estimation » est totalement arbitraire, on procède généralement par référence en définissant une unité de base. Par exemple, « voir le détail d'un article » étant une exigence simple, son unité sera « 1 », « modifier les caractéristiques d'un article » étant 2 fois plus compliquée, son estimation sera de « 2 »...

Le Product Owner priorise ensuite la liste en fonction de la valeur métier : « Qu'est ce qui est le plus important pour lui ou autrement dit : qu’est ce qui doit être fait en priorité ? » et du coût de chaque exigence. Les exigences seront réalisées dans l'ordre ainsi défini selon les contraintes de l'équipe chargée des développements.

On fixe ensuite la durée d'une itération ou « Sprint » durant laquelle un certain nombre d'éléments du « Product Backlog» seront réalisés.

Planification d'un Sprint

Une fois que le « Product Backlog » est complet et que la durée du Sprint est fixée en accord avec le client, il n'y a plus qu'à remplir le Sprint avec des éléments du backlog.

C'est également à ce moment que le Product Owner exprime plus précisément son besoin pour permettre à l'équipe d'estimer plus finement la charge de travail qui doit rentrer dans le Sprint. Là encore le Product Owner n'est pas obligé d'exprimer l'ensemble de son besoin mais seulement les exigences concernées par le Sprint. Le besoin qui concerne les exigences du Sprint sera creusé au sein de ce dernier en ateliers de conception.

Le Product Owner peut à tout moment revoir la priorité des exigences qui n'ont pas encore été planifiées dans le sprint en cours.

Progression du projet

Grâce aux estimations du « Product Backlog » et la segmentation en sprint et en exigences, on peut aisément produire un graphique de suivi d'avancement d'une simplicité enfantine :

En voici un exemple :


Mais qui utilise vraiment Scrum ?

1&1 AG, 24.com, Adelaide Bank, Adobe Systems, Advanced Micro Devices, Agfa Healthcare, andrena objects ag, APL, Argo, Ariba, Artinsoft, ASPgems, ATSC, Attenex, AvidXchange, b+m Informatik AG, Bank of America, Bantrel, Barentz, Baufest, BBC, Beenox (Activision), BenQ, Bentley Systems, BMC Software, BNA Software, Booz Allen Hamilton, Bose, British Telecom, C.E.S.A.R, California State Automobile Association (AAA) - It Department, CAN, Canada Post, Capital One Financial, CENI2T, CIBER, Inc, Citerus AB, CitrixOnline, ClearChannel, CNN, Commerce360, Computer Associates - Wiley Div, Conchango, Connected Innovation, CoreTrek AS, Cornell University, Crisp AB, Cubika, Dicom, Economist (newspaper), eFunds, Inc., Eviture Limited, Federal Reserve Bank, FormScape, FPF, GE Energy, Georgia Institute of Technology, Gestalt, GIGA - PUC-Rio, Google, Hogeschool van Arnhem en Nijmegen (HAN University), HP, IBM, IDX, Infopark AG, Intelligenx, InterAct Public Safety Systems, InterBusiness Technologies, JDA Software Group, Key Bank, Knowtec, Korbitec, Kronos, Lash Group, Leapfrog Online, Lexis-Nexis, LMCO, Löwenfels Partner AG, Lulu.com, Lunar Logic Polska, Marshall Wace LLP, McKinsey & Co, Medtronic, Merrill Lynch, Microsoft, Midway, Mobile Fun Limited, mondora.com, Motley Fool, Inc, Motorola, NIIT Technologies, Nokia, Nokia Siemens Networks, Nortel, Novell, Océ, OnCast Technologies, Ontario Legislative Assembly, OpenLogic, Inc., OpenSource Connections, Outformations, Inc., Outsource Partners International, Palewar Techno Solutions (PTS), Patientkeeper, Inc., Philips Electronics India, Philips Research Miplaza/SES, Pinesoft, Pitney Bowes Busines Insight, Polycom, Primavera, Qpass/Amdocs, Qualcomm, Quantum Leap Innovations, Reaktor Innovations, Renew Data Corp, SAIC, Sammy Studios, SAP, Security Benefit - SE2, Siemens Austria, Siemens Medical Solutions, Smith Seckman Reid, Inc., Softhouse, Softtek, SolutionsIQ, State Farm, State Street Bank, Sun, Symphony Services Corp. (India) Pvt. Ltd, Synapse Technologies Ltd, Syntechnologies AB, SysOpen Digia, Systematic, TechMahindra, Telegraaf Media Group NV, The New Teacher Project, TransUnion, Trifork, Turner Broadcasting, Ultimate Software, Valtech, Vanguard Group, Vertical Communications, Vision Service Plan (VSP), Vision Software, Wells Fargo, Wizard Information Services, Xerox, Yahoo, BNP Paribas, Generali, Orange, Sagem, La Poste, Areva, M6, Pierre Fabre, Allianz GI France,...

La contractualisation

La contractualisation des projets Agile n'est pas la partie la plus facile étant donné que le périmètre est par définition variable. La régie ferait bien l'affaire mais difficile de rassurer le client avec un tel contrat. En France et ailleurs, le contrat au forfait domine; surtout sur les gros projets. Malheureusement pour le fournisseur - dans le cadre d'un forfait classique - tous les risques sont pour lui (aussi bien en approche Agile que traditionnelle). On peut limiter ces risques en prenant quelques précautions, mais on limite également la souplesse offerte par une approche Agile.

Ceci dit, cela ne veut pas dire qu'il n'existe pas de solutions. La forfaitisation de chaque itération avec la possibilité pour le client d'arrêter le contrat à la fin de chaque itération est assez intéressante. Ainsi que le principe de troc d'exigence  : réalisation d'une exigence imprévue en échange du retrait d'une autre moins importante, de priorité faible et de même coût.

Après quelques recherches, j'ai trouvé 2 compromis intéressants proposant des variantes du forfait classique permettant une meilleure collaboration client/fournisseur (win-win) :

Vous trouverez à l'adresse suivante les différents types de contrats pratiqués sur des projets Agile : http://alistair.cockburn.us/Agile+contracts