Amis

Accueil‎ > ‎

Assouplir l'approche traditionnelle

Mis à jour en février 2010

De nombreux projets de développement conservent une approche traditionnelle (cycle en V ou waterfall) sur bien des aspects. Même si beaucoup d'entre nous admettent les travers d'une telle approche : pression forte, gestion des changements douloureuse, délais et budget souvent dépassés, relation client parfois difficile, journées de travail longues...

J'appelle « approche traditionnelle », une approche essentiellement basée sur le prédictif souvent illustrée par une phase de conception énergivore et coûteuse censée accoucher de spécifications fonctionnelles détaillées millimétrées. Ces spécifications deviennent ensuite le nerf de la guerre entre le commanditaire et le réalisateur lors de l'apparition des premiers changements (inévitables évidemment). Le tout dans le cadre d'un forfait classique.

Dans cet article, je propose de donner un peu plus de souplesse à cette approche sans basculer complètement dans l'agilité qui fait peur à beaucoup de monde (par ignorance, la plupart du temps). 




Méthodologie

Les principes de méthodologie que je propose, interviennent principalement sur les 4 axes suivants :

  • Expression et priorisation du besoin
  • Visibilité du commanditaire et des utilisateurs finaux
  • Gestion des changements
  • Suivi de l'avancement

Expression et priorisation du besoin

 Dans les travaux préparatoires d'un projet de développement, il est primordial de bâtir la « Baseline » du projet. Cette dernière est indispensable à la gestion des changements futurs et au suivi de l'avancement du projet. Elle consiste principalement en un découpage fin du besoin en exigences.

La première version de cette liste d'exigences peut être déduite d'un éventuel cahier des charges ou spécifications générales préexistants. Elle peut également être rédigée par le commanditaire. Au cours des travaux préparatoires du projet, le réalisateur :

  • Complète la liste d'exigences (avec des exigences non fonctionnelles par exemple)
  • Découpe des exigences trop difficiles à estimer en l'état
  • Estime chacune d'entre elle avec une unité de charge arbitraire (des points par exemple) en précisant ses hypothèses de calcul

La MOA et la MOE s'associent ensuite pour prioriser les exigences obtenues en fonctions des critères suivants :

  • Importance métier du point de vue du commanditaire
  • Contraintes techniques du point de vue du réalisateur
  • Clarté du besoin
  • Estimation de charge

Visibilité du commanditaire et des utilisateurs finaux

Lors de la phase de réalisation du projet, il est important de s'assurer que le produit réalisé est bien en phase avec le besoin initial. Pour cela, il faut régulièrement donner de la visibilité au commanditaire et aux utilisateurs finaux sur le produit en cours de réalisation.

Cette visibilité s'obtient grâce aux deux principes suivants :

  • Découpage de la phase de réalisation en itérations courtes (1 à 4 semaines en moyenne)
  • Chaque itération se conclut par une démonstration du produit par le réalisateur à destination du commanditaire et des utilisateurs finaux (les premières démonstrations sont souvent assez pauvres : prototype, maquettes d'écran,...)

Conditions particulières

  • La démonstration se fait sur un poste de développement et non pas sur une plate forme de recette à la main de la MOA
  • Le produit est partiel, il ne s'agit pas de faire l'inventaire des bugs. Le but est de vérifier ensemble que l'équipe chargée des développements est sur la bonne voie (a bien compris le besoin)
  • La démonstration ne dure pas plus d'une demi-journée et n'est pas soumise à un PV de validation

Gestion des changements

Au cours de la phase de réalisation, le besoin peut changer, il est important de pouvoir s'adapter au changement tout en respectant les délais et le budget du projet.

Cette adaptation au changement est possible selon les deux principes suivants :

  • Lorsque le commanditaire émet une demande de changement, le réalisateur fournit une estimation de la charge associée. En fonction de cette estimation, le commanditaire peut lui-même retirer de la liste une exigence qui n'a pas encore été réalisée dont l'estimation est équivalente (exigence de type « Nice to have » par exemple). On peut appeler ça du troc.
  • Par ailleurs le découpage de la réalisation en itérations permet au commanditaire de détailler plus tard son besoin sur les exigences de priorité faible destinées aux itérations futures (exemple : détail des IHM).

Conditions particulières

  • Le contenu d'une itération en cours ne doit pas changer sauf cas de force majeure
  • Dans la mesure du possible, la durée d'une itération est la même pour toutes les itérations de la phase de réalisation


Suivi de l'avancement

 Comme nous l'avons vu précédemment, la liste des exigences est pondérée par une estimation de charge du réalisateur. Nous pouvons ainsi établir le montant total de la charge de travail de réalisation. Nous avons tout ce qu'il faut pour tracer et d'interpréter le graphique d'avancement ci dessous. 

 


Par ailleurs le découpage en amont du projet en exigences permet de suivre plus finement le cycle de vie d'une exigence de l'expression du besoin aux corrections d'anomalie.  

Outillage

L'outillage de la gestion de projet est aujourd'hui incontournable. Et je ne parle pas d'Excel et MSProject. Un des outillages les plus intéressants (rapport qualité/prix) et les plus répandus provient de l'éditeur « Atlassian ». Il est intéressant principalement pour les raisons suivantes :

  • Produits de bonne facture, d'une grande flexibilité et simples d'utilisation
  • Forte capacité d'intégration avec des outils tiers (ex : Mercury, gestionnaires de version,...)
  • Large choix de briques d'outil
  • Système de licence souple
  • Solution reconnue, répandue et récompensée
  • Support de qualité

Il existe un autre outil plus pointu très intéressant appelé Polarion (véritable outil de gestion du cycle de vie d'un projet de développement). Je ne l'aborde pas dans cet article, car je l'estime plus compliqué à prendre en main par des personnes peu familières avec ce type d'outillage (autre qu'Excel et MSProject). Il mérite toutefois le détour dans certain cas.

Contenu de la solution

 La solution que je préconise rassemble les outils Atlassian suivants

  • JIRA : Gestionnaire de demandes (exigences, tâches, anomalies,...) permettant principalement de planifier et suivre les différentes tâches du projet (conception, développement, corrections,...). Il permet également de faire du reporting graphique.
  • Confluence : Wiki permettant de créer des espaces projet. Exemple : espace projet « commanditaire » contenant les informations principales du projet (annuaire, graphique d'avancement, camembert de répartition des anomalies par criticité, releases notes,...).
  • Outils de développement contribuant à la qualité selon les besoins du projet :
    • Bamboo : outil d'intégration continue
    • Crucible/FishEye : outil de revue de code inter développeurs
    • Clover : outil de surveillance de la couverture des tests
Aux produits Alassian peuvent s'ajouter les plugins suivants issus d'autres éditeurs :
  • GreenHopper : Outil avancé de planification/suivi des tâches par itération
  • Go2Group JaM pour intégrer dans JIRA les plans de test de Quality Center (très répandu) 

Quelques captures d'écrans

 Je trouve que les captures d'écrans commentées suivantes valent bien mieux qu'un long discours.

Exemple de tableau de bord (personnalisable)


Planification des itérations ou phases 


Suivi simple d'une itération


Suivi d'activité 


Suivi des demandes 


Revue de code 


Cuisine interne

 Pour les plus ouverts, le pousserai vers un ensemble de principes et pratiques qui ont fait leur preuves telles que : 

Rédaction des spécifications fonctionnelles détaillées au fil de l'eau : tout spécifier dans le détail avant même d'avoir commencé la phase de réalisation est souvent inutile voir impossible. En particulier le détail des IHM. Parfois même nous reproduisons le schéma de l'élève face à une dissertation qui préfère noircir plus de pages que de raison. Dans nos projets, le besoin évolue, c'est une évidence, alors pourquoi ne pas lisser la rédaction des SFD au fur et à mesure de l'avancement des itérations. La phase de conception s'en trouverait ainsi réduite et plus ciblée sur les travaux de conception technique (Architecture et Spécification Techniques Détaillées principalement). 

Le tableau des tâches affiché sur un mur qui permet de savoir qui fait quoi et où en est le projet. Ajouté à cela, le graphique d'avancement et le challenge de l'équipe est fixé. Nous aimons tous les challenges. 

La réunion quotidienne de moins de 15 minutes debout un café à la main. Oui je sais vous n'y croyez pas, mais laissez moi vous expliquer. Les règles sont fixées dès le début : chacun ne répond qu'à trois questions simples et les problèmes sont soulevés mais traités en off. Les questions sont : qu'as-tu fait hier ? Que fais tu aujourd'hui ? Quels obstacles ou ralentissement as-tu rencontré ? Cette pratique est bourrée de bénéfices insoupçonnés, les plus évidents sont : création d'un esprit d'équipe fort, on traite les problèmes sur le champ, on s'entraide au besoin, on tire parti d'un développement déjà fait par un autre,... 

La réunion de rétrospective d'une itération de 2 heures : on réunit l'ensemble de l'équipe MOE et rempli 2 colonnes sur un paper-board : « points positifs » / « points négatifs ». Lors de cette réunion on met sur la table les mauvaises expériences vécues et les idées de chacun dans le but d'améliorer la productivité sur l'itération suivante (principe CMMI niveau 5 au passage). On détermine ensemble un plan d'action d'amélioration pour les itérations futures. Le point de vue et les idées de tout le monde sont étudiées en séance.

Plus de liberté aux développeurs : souvent les personnes les mieux placées pour orchestrer dans le détail les tâches techniques sont les développeurs eux même. Selon le degré de maturité, il peut être profitable de les laisser s'attribuer les tâches d'une itération et déterminer l'ordre dans lequel elles doivent s'accomplir. En tant que chef de projet, il faut lâcher un minimum le contrôle et faire confiance. Une bonne équipe Scrum est une équipe auto-organisée (avec un ScrumMaster bien entendu).

Le planning poker est une pratique à retenir pour le chiffrage d'un projet, des évolutions,... 

La revue de code par paire (ne serait ce qu'un quart d'heure par jour avec un bon outil comme crucible) permet de prévenir les bugs, de garantir l'uniformité ainsi que la maintenabilité du code, le respect des bonnes pratiques... 

L'intégration continue

Une grande taille d'écran qui permet d'avoir une visibilité étendue du code. Voir de visualiser simultanément le rendu sur le navigateur. Le PC portable pour développer est une véritable torture selon moi. Nous ne développons pas du Cobol ou je ne sais quel langage séquentiel simple.