Témoignage
 

Articles « Info » : Chef de projet

 



Écrivez à AILES !



Retour vers l'article
(le cycle itératif)
 


chef de projet : expériences itératives
[Rational]


    D'accord... l'article est issu du journal "Rose Architect", de Rational.
    Pourtant, ce témoignage est intéressant, car il fait très peu référence eu "process" de Rational (qui est le RUP : Rational Unified Process), mais se concentre sur les pièges du processus itératif.
    Il y en a, c'est clair, et le titre de l'article d'où est tiré la majeure partie de ce témoignage annonce bien la couleur : "Du processus
Waterfall à l'itératif... dure transition pour les chefs de projet".
    Les renseignements essentiels de cet entretien sont
soulignés.


L'itératif, ça apporte quoi, au juste ?
    Certainement pas moins de travail, en terme de gestion, mais plus de précision sur les délais et les fonctionnalités qui y seront présentes à chaque étape intermédiaire. Le but reste le même : rendre à une date finale fixe de livraison toutes les fonctionnalités attendues par le client. Les étapes intermédiaires sont là préciser et affiner ces-dites fonctionnalités, évitant ainsi les "mauvaises surprises" des recettes finales.

Il faut tout planifier, chaque étape, dès le début ?
    Non, malheureux! Ce serait un vaste gâchis. La planification initiale consiste en :
- une estimation du délai global (souvent fixée en collaboration avec le commercial de l'affaire),
- une liste de fonctionnalités classées par risques décroissants (risque = techno mal maîtrisée et fonctions dont dépendent toutes les autres).
    Vous ne pouvez donner aucunes dates intermédiaires précises tant que la phase d'analyse (celle où vous déterminer l'architecture du programme) est validée et où les risques ont été évalués (en général après une ou deux itération).

Donc, au début, on peut s'lancer sans trop savoir où on va ?
    Mais re-non, re-malheureux! On ne va pas commencer à faire de la conception et du codage juste pour occuper l'équipe tout en espérant que des objectifs clairs vont apparaître! Mais d'un autre côté, toutes les exigences fonctionnelles n'ont pas, en effet, à être présentes dès le début du projet.
    L'essence même de l'itératif, c'est de reconnaître "officiellement" une pratique courante "non-officielle" : le "rework" (en anglais), soit le fait que l'on doit "re-travailler" sur ce que l'on a déjà analysé ou conçu ou même codé.
Cette façon de travailler peut facilement vous amener à vous faire tomber dans 2 pièges :
- divergence,
- manque de priorités.

Divergence... ? Ha oui, la fameuse Loi n°8 sur le taux de changement
    Exactement! Travailler en cycle itératif ne doit pas signifier d'introduire une nouvelle technologie ou un nouvel algo ou que sais-je encore à chaque nouvelle itération. Un élément qui marche ne doit pas être retravaillé juste pour le fun. Cela n'a plus rien à voir avec le "rework" et risque d'engendrer plus d'effets de bords désastreux qu'autre chose.
    2 types de personnes peuvent vous amener dans cette mauvaise situation :
- les renforts (nouveaux développeurs intégrés dans l'équipe en cours de projet) : un nouveau a toujours de nouvelles idées... et le pire est qu'elles ne sont en général pas mauvaises! Il faut résister alors à la tentation de revenir sur une partie qui marche sous le seul prétexte que "l'on peut faire encore mieux",
- le client qui croit avoir compris votre démarche en cycle itératif que vous vous êtes tué à lui expliquer. Ils voudront faire passer tous leurs "changements" de spécif en tant que "nouvelle itération". Cet effet est connu sous la dénomination de "requirements creep" : le "décalage des spécifications". Le chef de projet doit se montrer intraitable : toute spécification qui n'a pas été prévue doit se retrouver sous forme d'un avenant, facturé en plus, avec un nouveau planning. Une nouvelle itération ne peut être le prétexte à intégrer quoi que ce soit de nouveau à la dernière minute.

Ok ok... Et le manque de priorités ? 
    Peu de chefs de projets en sont conscients (au moins les premières fois), mais chaque projet a un moment très spécial : le "flip" ou "retournement de situation" : ce moment où tout le monde se rend compte (l'équipe de développeurs comme le client) que « l'on va y arriver finalement, après tout !!! ». Vous savez, ce moment où le client passe de l'état d'esprit où il pense que rien ne sortira jamais de ce projet à celui où il est convaincu que le logiciel attendu va bien sortir dans les temps.
    Et bien, à ce moment , il faut vraiment se méfier. Car vous allez vous trouver inondé de petites fonctionnalités secondaires que le client craint ne pas voir apparaître dans le produit à la livraison. Avant, il était content si les fonctionnalités majeures étaient bien présentes. Maintenant, chaque détails devient un enjeu essentiel...
Pire, de nouvelles exigences peuvent se glisser sous ce flot incessant de demandes-client où tout est soudainement "top-prioritaire".
    Certes, tout ce qui a été demandé doit être livré, mais la plus mauvaise manière d'y arriver est de céder à cette pression et de vouloir tout faire en même temps : il faut prio-ri-tai-ri-ser. Il faut le faire durant tout le projet, et il ne faut surtout pas oublier de continuer à le faire après le "flip".

Bon alors, qu'est-ce qui est le plus important, avec ce type de démarche ?
    Le logiciel!!! Il ne s'agit pas d'avoir la meilleur technique de management possible ou encore d'avoir les spécifs les plus blindées ou la meilleure conception. Il faut se concentrer sur le logiciel.
    Il est vrai que l'approche Waterfall est confortable : vous avez une tonne de papier sur laquelle vous appuyer. Vos testeurs ont pleins de temps pour peaufiner leurs plans de tests, en se basant sur des spécifications bien policées...
    En cycle itératif, il faut se concentrer sur les fonctionnalités à réaliser et vos testeurs doivent commencer très tôt leur travail, alors que tout est encore susceptible d'évoluer.

Heu... alors, par quoi on commence ?
    Par le plus dur ou le plus risqué en terme technique.
    Mais attention, aborder une difficulté entraîne souvent un réflexe qui se révèle très mauvais : se donner "plus de temps" ! Ca ne sert à rien de remettre "à plus tard" la résolution d'une difficulté, sous prétexte de "se donner plus de temps pour y réfléchir".
    Avec un cycle itératif, on ne peut pas se mentir très longtemps : si un projet est destiné à échouer, autant s'en apercevoir le plus tôt possible, et non passer une première phase confortable qui donne l'impression que tout avance bien, avant de se confronter à la difficulté qui fait tout effondrer. Cela permet de perdre le moins d'argent possible.
    Et, en en parlant de risques (techniques), il ne faut surtout pas oublier de surveiller l'apparition de nouveaux risques. La liste initiale de difficultés techniques, avec leurs dépendances, était une première ébauche qui vous a amené à établir une première suite d'itération.
Mais la résolution des premières difficultés vous amène ensuite à une analyse bien définie, avec une architecture qui saura répondre aux fonctionnalités attendues, mais qui peut aussi faire surgir d'autres points critiques. Il vous faudra les intégrer et revoir vos itérations.
    Enfin, ne mettez surtout pas trop de "difficultés techniques" dans votre première itération. N'oubliez pas que cette étape initiale recouvre d'autres problèmes : vos développeurs doivent potentiellement s'adapter à de nouveaux outils, de nouvelles techniques, un nouveau formalisme de codage, etc. La pire des chose est de se retrouver avec une première itération trop longue, que vous seriez obligé "artificiellement" de déclarer comme terminé alors que vous n'avez aucun premier prototype à sortir, donc que "rien ne marche" encore.
    Au début, il ne faut pas se braquer sur la complétion absolue des objectifs, mais plutôt sur une "non-complétion appropriée", qui vous laisse avec des développeurs bien initiés à ce nouveau projet, et un premier proto vous permettant de discuter avec le client. 

Ok, et pour les itérations suivantes, comment ça se passe ?
    D'abord, éviter de confondre une release hebdomadaire avec une itération! Le piège est d'avoir trop d'itérations. En général, cela va de 3 itérations (pour un projet de 2 ou 3 mois) à 9 itérations (pour de très long projets). Il faut tenir compte de la taille de votre (ou vos) équipe(s), de leur distribution géographique, de tous les intervenants impliqués.
    L'autre piège est de "se faire recouvrir les itérations" : oui, vous devez planifier l'itération suivante avant la complétion de celle en cours... mais la démarrer (en terme d'analyse et de conception) de suite peut vous mener à toutes sorte de problèmes :
- les collaborateurs qui travaillent sur une itération tout en analysant la suivante ne seront pas complètement concentrée sur l'itération en cours, au point de ne pas tout faire ou de ne pas "corriger" suffisamment vite les bugs en cours.
- certaines parties du logicielles ne seront pas encore prêtes (en terme de services et d'interface) à supporter ce qui a été analysé et conçu pour l'itération suivante,
- le "retour de connaissance" de l'itération en cours n'aura jamais eu l'opportunité de pouvoir inspirer et guider l'analyse et la conception de l'itération suivante.
    Bien sûr, vous pouvez dédier une partie de votre équipe sur la prochaine étape, mais le plus rarement possible : cela reste inévitable lorsque vous avez des collaborateur très spécialisés, comme un "analyste" qui ne veut faire que de l'analyse.

Mmmm... et vos itérations-truc, là, c'est bien perçu par le client ?
    Évidemment, c'est mal perçu, et par le client, et par votre direction informatique. Les 2 sont habitués à travailler en "milestones", sur des documents précis.
    C'est à vous de protéger votre équipe d'un côté, et de rendre chaque itération la plus claire possible en terme d'objectif. Pour cela :
- toute votre équipe doit travailler sur une même itération. Essayer de paralléliser est, au mieux, dangereux car le travail lié à la synchronisation des travaux de vos sous-équipe est souvent plus coûteux qu'on ne le pense,
- il faut réussir à fixer des délais intermédiaires précis pas trop tôt. Il faut "résister" pendant une ou deux itérations (les 2 premières) le temps d'analyser les risques, proposer un premier proto, intégrer les remarques clients et proposer une architecture valable. Des délais précis pour les itérations suivantes peuvent alors être fixés avec précision. Pas avant.
    Évidemment, l'avantage de ce type d'approche est que vous pouvez montrer très tôt "quelque chose qui marche", ce qui vous permet de prendre en compte les remarques clients avant même d'avoir commencer à tout documenter de façon formelle. C'est l'esprit « démontrer d'abord, documenter après ». En effet, la documentation vous permet de montrer "comment cela devrait marcher"... alors que les ingénieurs préfèrent voir "comment cela marche".

Bon, en clair, comment mesurer le degré d'avancement précis ?
    D'un côté, vous avez, après une ou deux itérations, complètement analysé le projet. Vous avez donc à votre disposition une liste de "use-case" ("cas d'utilisation") à réaliser.
    Le problème ? Il ne faut pas croire que chaque itération va permettre de réaliser un cas d'utilisation. En général, il permet de faire partiellement plusieurs cas d'utilisation. De l'état d'avancement partiel de ces cas, vous pouvez alors en tirer un état d'avancement global du projet... et pourtant, ce n'est pas cela que vous devriez surveiller le plus.

Allons bon, qu'est-ce qui pourrait être plus important que le degré d'avancement ?
    Le taux de changements ! Changements dans les spécifications, la conception ou le codage. Et aussi (encore plus dur à détecter), le taux de bouclage ("churn" en anglais, soit le fait de tourner le lait pour en faire du beurre!). Vous savez, ces changement répétés qui vous ramène à la solution initiale! Ils sont souvent symptomatique d'un problème plus profond.
Cela rejoint la divergence évoquée plus haut.

Bigre... le chef de projet a intérêt a être bon, non ?
    Lui, et l'architecte ! La meilleure direction de projet possible ne mènera à rien sans un architecte qui, au bout d'une ou deux itérations, vous définira une architecture (et ses solutions techniques associées) qui tiendra la route. Inversement, la meilleure architecture du monde ne fait pas le poids face à une gestion de projet qui s'attaque à trop de sujets à la fois, dans le mauvais ordre, engendrant une "panique" en fin de projet.
    Bref, c'est la Loi n°5 sur le manager et le technicien.
    Utiliser la même personne pour faire les deux... serait pour le moins risqué. Cela peut marcher pour de petits projets, de 5 à 10 personnes. Au-delà, mieux vaut penser à séparer clairement les tâches, un peu pour les mêmes raisons qu'un producteur et un réalisateur seront deux personnes différentes pour produire le même film.


Pfff... ça l'air compliqué, tout ça. Pourquoi se compliquer la vie ?

    Au contraire, les principes qui sous-tendent cette démarches sont là pour vous simplifier la vie :
- s'attaquer aux risques techniques tôt dans le projet (avant que ces risques ne vous attaquent!),
- reconnaître la nécessité de revenir sur des points déjà étudiés, au travers du retour de connaissance entre itération,
- se concentrer sur le logiciel d'abord, en en produisant des versions intermédiaires régulières,
- intégrer les remarques du client tout au long du process afin de mieux veiller à l'évolution des spécifications (qui seront soit refusées, soit intégrées sous forme d'avenant, mais jamais étudiées à la dernière minute au moment de livrer).
    C'est vrai, c'est plus dur à manager qu'avec un cycle en V traditionnel. Mais lorsque vous en saisissez le principe, vous découvrez un style de management beaucoup plus fin, précis, maîtrisé.


               
 
Avertissement !
 
Décollage !  |  Présentation du site web "AILES"  | 
Infos générales  |  articles "Informatique"