Un schéma avait tout particulièrement retenu mon attention dans la description de XP par Ron Jeffries :


Ce schéma a la particularité de découper les pratiques de XP en plusieurs niveau. Grosso modo :

  • le niveau extérieur contient les pratiques appliquées par l'ensemble de l'équipe, client compris

  • le niveau intermédiaire contient les pratiques applicables aux développeurs en tant que groupe

  • le niveau intérieur contient les pratiques relatives à un développeur individuel, ou une paire de développeurs

Une question que je me suis posée en voyant ce schéma est : peut-on mettre en oeuvre un cercle sans vraiment appliquer les autres. La logique de XP qui veut que les pratiques se compensent les unes les autres dit que non. Par exemple, mettre à jours le produit de manière très incrémentale en rajoutant les fonctionalités une à une (donc faire des "small releases") peut vite mener au chaos si aucune pratique de "refactoring" n'est là pour remettre de l'ordre dans l'architecture de l'application.

Cependant, plus ou moins consciemment (car je m'en suis rendu compte a posteriori), j'ai une fois repris un projet existant où je me suis vu appliquer des principes issus des méthodes agiles sur la gestion macroscopique du projet en ne touchant pas à la façon dont travaillaient les développeurs quand ils étaient face à leur code.

Imaginons un projet avec les caractéristiques suivantes :

  • le produit a déjà une base installée. Les évolutions, livrées environ tous les 6 mois, apportent des fonctionnalités importantes mais sans jamais remettre en cause l'architecture générale ;

  • l'équipe de développement nécessaire est relativement restreinte (moins de 3 développeurs) ;

  • l'équipe actuelle est stable et les personnes se connaissent bien ;

  • beaucoup d'inconnues sur les choix évolutifs font que personne n'est vraiment capable de prioritiser ces choix longtemps à l'avance ;

  • une certaine gêne est présente chez les développeurs vis a vis du sponsoring du projet car, par le passé, on leur a plusieurs fois demandé de changer de cap à la dernière minute.

Dans un tel cas de figure, on (en tout cas moi) est tout de suite tenté de résoudre le problème de visibilité sur les choix évolutifs en se référant aux méthodes agiles : "we have come to value responding to change over following a plan". En pratique, cela peut signifier :

  • identifier individuellement chaque demande d'évolution ou de correction ;

  • demander systématiquement aux développeurs une cotation pour chaque demande ;

  • mettre en place des itérations relativement courtes (par exemple 3 semaines) avec un système de "planning game" faisant participer plus activement les décideurs des évolutions ;

  • mener l'itération en conservant un schéma classique conception-codage-tests ;

  • formaliser une livraison interne au développement en fin d'itération pour valider les rajouts fonctionnels ;

  • conserver la périodicité de livraison client relativement large (livraison à 6 mois pour des itérations de 3 semaines) lors de laquelle le produit est validé dans son ensemble;

Le processus ainsi décrit est donc un dosage entre agilité pour résoudre certains problème et classicisme pour conserver ce qui fonctionne déjà. Certaines pratiques de XP sont mises en avant : "Whole team", "Planning game" et "Small releases".
Cela fonctionne car les pratiques XP qui pourraient avoir besoin de garde-fous sont bien encadrées par le contexte. L'architecture étant stable, les besoins en refactoring sont très faibles. Les boucles de feedback ne sont pas pleinement utilisées car ce n'est pas un besoin essentiel. Les développeurs continuent leur schéma de développement classique car ils s'y sentent à l'aise.

J'ai l'impression que beaucoup de gens à qui on fait miroiter les mérites de l'agilité, principalement à travers eXtreme Programming partent dans l'idée d'implémenter entièrement la méthodologie, comme si c'était là le but principal. A mon avis, il ne faut surtout pas oublier qu'un des principes fondateurs de l'agilité c'est "Individuals and interactions over processes and tools". La bonne méthode c'est celle qui fait que les gens se sentent à l'aise et font du bon boulot, pas celle écrite dans les livres.

Je ne sais pas si ce que je raconte est utile pour quelqu'un mais, en ce qui me concerne, j'aimerais trouver plus de véritables retours d'expérience de méthodes de développement "bricolées sur mesure" à partir de principes issus des méthodes un peu plus formelles.