mercredi 12 novembre 2008

Qu’est-ce que sait d’être Agile .. ! Partie 3 (La collaboration avec le client..!)

On vu dans les précédentes publications, le développement d’application et les interactions entre les individus.

Mais comme vous le savez tous, on peut avoir de millions de projets, mais si on a aucun client pour payer le développement, on ne fera pas longtemps du développement.

Comme il faut un client, il faut donc communiquer avec.. ! et les puristes.. Diront qu’on va aussi avoir besoin de contrat pour définir les limites du projet.
Vous avez tous raison, mais tout comme précédemment, je vais ressortir ma phrase fétiche, il faut repenser les concepts différemment.

Le contrat doit est un cadre de fonctionnement pas seulement un carcan immuable. Ce que tout client veut, c’est avoir un logiciel fonctionnel et surtout un logiciel qui résout son problème.

Mais comme personne d’entre vous n’a de véritable habileté de devins, est-ce qu’on peut croire qu’on peut écrire toutes les limites d’un projet informatique. Pour ma part, je ne le crois pas .. !

A l’inverse, il ne faut pas travailler sans contrat non plus, sans carde qui régit le projet. Mais à défaut de le fixé dans le béton, il faut peut-être trouver une approche qui nous permettra de faire évolué, lorsque nécessaire l’enveloppe budgétaire.

Ce que beaucoup de gens-conseil, et que je recommande aussi, c’est de définir un cadre d’évaluation (du genre "Planning Poker") les taches en mode unité, des unités très petites. Chacune de ses unités correspondra à une valeur monétaire. Par conséquent, il sera plus facile d’évaluer la complexité.

En structurant ce cadre, il ne faut pas oublier de dire un gros merci à notre client en lui disant que n’on allait pas que le revoir qu’en fin du projet. Tout comme pour les interactions entre les membres du projet, le client doit aussi faire partie de l’équipe.

Il doit dans la mesure du possible être accessible, ou la limite son représentant. Tous les membres de l’équipe doivent pouvoir y avoir accès. Une réponse rapide et efficace du client est un avantage.

Une organisation que j’ai connue, avait choisi d’impliquer le client en l’installer dans les mêmes locaux que l’équipe de développement. Le client avait son bureau dans la même salle, ce qui permettait aux membres d’y avoir accès rapidement et inversement.

Je dirais bravo, c’est une bonne idée, mais il faut trouver dans votre contexte la meilleure manière de l’impliqué le client, c’est de la trouver. Ce n’est pas tout les clients et les organisations qui peuvent se permettre de libérer le client pour l’installer au sein de l’équipe de développement.

Les méthodologies agiles, ce n’est pas une liste de recette magique, seulement des moyens pour résoudre tous les problèmes, mais aussi une manière de réfléchir différemment.

La solution que moi, je propose toujours à mes clients, c’est simplement de leurs dirent. Quand tu as 2 minutes, et que tu as le gout de voir où en est rendu. « Passe me voir, et je te promets que je vais essayer de prendre le temps de te le montrer. Mais, tout comme vous (le client), il pourrait arriver momentanément que j’ai une urgence à répondre, et dans ce cas-si, que je ne puisse pas répondre immédiatement à votre besoin. »

Généralement, mes clients étaient toujours heureux d’avoir la possibilité de venir me voir sans avoir peur de me déranger. Car, il le savait, que si je ne pouvais pas leur répond dans l’instant, je leur reviendrais rapidement.

Reporter une petite rencontre à l’improviste, il ne faut le faire avec discernement et intelligence. Mettez-vous dans la peau du client, si à chaque fois qu’il vient vous voir, vous lui répondez que vous n’avez pas de temps. Il ne reviendra plus !
Il est aussi permis, de gentiment demander à un client de vous laisser le temps pour travailler, lorsque celui-ci utilise un peu trop ce privilège.

En impliquant le client, en lui donnant l’importance qu’il mérite, nous aurons l’information, cette information tant recherchée.

De plus, en effectuant le développement en par petite phase comme expliqué dans un autre article. Le client sera beaucoup plus ouvert. Il faut bien sur lui expliquer que nous ne voulons pas un bar ouvert sur le budget de sa part. Et aussi, qu’il n’a pas non plus le bar ouvert sur les fonctionnalités incluses dans son logiciel.
Un client qui comprend qu’il y a un cout, un temps et un effort nécessaire pour tous tâches, et surtout que le tout régit dans notre cadre.

S’acharner dans discussion contractuelle avec un client, ce n’est pas profitable à personne. N’oublions pas notre but, tant celui de l’équipe de développement que celui du client, c’est de produire un logiciel qui fonctionne et surtout, qui correspond au besoin du client.

Travailler en agile, en méthodologie agile, c’est aussi faire un peut d’évangélisation. Il faut prendre le temps, d’expliquer pourquoi et comment on fait les choses, avec le temps, il y aura plus de gens qui seront convaincus.
Je crois que tout client avec qui on aura réussi, sera le premier à promouvoir cette nouvelle approche.

Être, agile ce n’est pas de changer les choses, c’est de penser différemment !

lundi 20 octobre 2008

Qu’est-ce que sait d’être Agile .. ! Partie 2 (Développement Logiciels)

Dans ce second article sur qu’est-ce que sait d’être agile, nous allons-nous intéressé sur le deuxième grand principe des méthodologies Agiles. « Le développement logiciel doit primer sur la documentation exhaustive. »
On voit beaucoup de gens qui se disent « Agile » parce qu’il n’aime pas produire de la documentation. Mais, les méthodologies Agiles, ne disent justement pas qu’il ne faut faire de la documentation. Il faut faire de la documentation lorsque c’est nécessaire, et surtout utilisé une organisation de cette documentation pour qu’elle soit simple et facile à comprendre.
Ce principe est survenu par l’expérience de projets qui ont eu à produire d’énormes documents pour encadrer le développement de leur application. La production d’un document volumineux, de 100 pages et plus, que personne, à part son auteur ne lit vraiment, est-ce utile à produire ? Laissons la question ouverte pour le moment.
Tout comme, produire un document de plusieurs pages, quand les contraintes et les limites des fonctions pourraient s’expliquer en quelques liges ou avec l’aide de quelque digramme UML ou présentation PowerPoint.
Beaucoup de projets, passent des semaines, des mois à documenter les différentes fonctionnalités. Durant cette période, le client, ne se voie que passer devant lui que des piles de papier, et souvent qu’il ne va lire qu’en diagonale en se disant intérieurement qu’il a hâte voir fonctionner l’application.
Il suffit de faire l’exercice une fois, de montrer un prototype, même à moitié fonctionnel, à un client. Pour savoir, ce qu’il veut le faire avec.. c’est de l’essayer comme un nouveau jouait pour un enfant. N’importe quel client veut pour le voir, le toucher, ce logiciel le plus rapidement possible. Lui servir des beaux documents, se n’est que le faire languir, et ce, même la qualité du rédacteur ou du document.
De plus, qui n’a pas vécu, ou même entendu parler d’un projet, que le jour de la livraison, ou encore quelque temps après, que la documentation fonctionnelle ne correspondait plus vraiment à ce que le logiciel effectuait ! Je me souviens d’un projet de conversion d’application, sur laquelle je devais travailler sur une fonctionnalité particulière. La documentation de la version courante avait disparu, quelque chose qui n’arrive jamais ! Mais, un jour en passant dans un couloir, j’ai vue une série de cahiers anneaux, portant le nom du système.
En les voyants, c’est avec empressement, que je suis allé voir l’architecte fonctionnel et propriétaire du système, pour lui demander sa documentation en question était à jour. Devinez la réponse de l’architecte, je vous la donne en mille… « Ha oui.. c’était la version de la documentation livrée avec le système… » Ce n’a pas pris longtemps pour comprendre qu’il m’était inutile de dépoussiérer ces cahiers à anneaux. Elles étaient depuis longtemps plus à jour.
De plus, soyons francs, connaissez-vous un programmeur qui aime lire un document de plus qu’une demi-page. Moi, je n’en connais pas .. ! Donc, pourquoi s’astreinte à produire une documentation que personne ne va pas la lire.. !

Aujourd’hui, il existe tant d’outils, pour faire des prototypes, pour montrer l’interaction des écrans. Des outils qui permettent de découper étapes par étapes des algorithmes complexes. D’expliquer ce qu’on veut que fasse une fonction dans un système donné.

La production de la documentation, doit être au service du développement du logiciel, et non pas un frein. Ce que veut tout client, c’est un logiciel qui correspond à ses besoins. Et plus rapidement, qu’il y aura accès à son application, plus il pourra valider et corriger le tire. Produire de la documentation à outrance, pendant des moins, il y a risques, que lorsqu’on livre au client un système qui soit complètement dans le champ. Il est plus facile d’ajouter une pièce à une maison, quand les séparations ne sont pas construites, que quand tous les meubles sont à l’intérieur.

En livrant rapidement de petits morceaux de logiciels, à qui le client aura accès rapidement. Livrez 200 moreaux d’une application que client n’a pas accès, qui ne peut pas faire des essaies avec, cela ne sert à rien. Par exemple, un système de 100 fonctions, si on lui livre en quatre coups de 25, le client risque de ne pas avoir le temps de tout vérifier dans un délai très court.

A l’inverse, si lui régulièrement un très petit groupe de fonction de 4 ou 5 fonctions à la fois, il pourra rapidement nous informer de toute erreur ou incompréhension. On pourra ajouter la correction, ou amiloration, d’une ou deux fonctions, dans le cycle de développement c’est facile. Mais, en corrigé 15-20, partez à la recherche d’un chargé de projet de 150k et plus, au plus vite ! Et surtout avertissez, vos équipes de développement qu’elles vont faire beaucoup de temps supplémentaires.

L’agilité de livrer de petit morceau rapidement aux clients, c’est aussi de pouvoir les corriger et les ajuster rapidement.

Aussi en livrant de petites fonctions, il est plus facile d’appliquer au processus le contrôle de qualités sur celles-ci. N’importe quel programmeur va avoir faire à la mémoire du code qu’il y a fait, il y a 2 jours. Il aura beaucoup de facilité à le corriger.

Une autre chose qui aide à livrer rapidement des logiciels de qualités, s’est l’automatisation des tests. J’entends déjà crier quelqu’un dans le fonds de la salle, automatisé les tests unitaires. Oui, il faut automatiser les tests unitaires, on devrait le faire dans tout type de projet, qu’il soit en agile ou non.

J’entends par l’automatisation des tests, pas seulement les tests unitaires. Mais, aussi, les tests fonctionnels, les tests intégrés.. Toutes formes de tests qu’un ordinateur peut faire aussi bien, peut-être mieux qu’un humain. La raison est fort simple, parfois en changeant une virgule dans programme, cela peut faire changer son comportement.

C’est aussi d’utiliser des moyens qui permettent de reproduire simplement et efficacement la série de tests qui doivent être appliqués avant la livraison au client, qu’il soit fait avec l’aide l’ordinateur ou non.
Il ne faut pas oublier que de livraison en livraison, le client peut s’amuser à retester une ancienne fonctionnalité, et il ne doit pas voir de différences (si aucun changement n’a pas été demandé). En passant toujours par la même moulinette de tests, on s’assure d’une non-régression généralement.

Le but de cet article n’était pas de parler l’automatisation des tests, tant son importance que des outils pour y arriver. Je dirais simplement que l’automatisation des tests, est l’un de moyens pour livrer, rapidement des morceaux d’une application fonctionnelle.

En livrant rapidement de petits morceaux d’application, cela nous aide à mieux comprendre le besoin du client. Il arrive parfois, que le besoin et la manière de le combler, ne soient pas clairs pour les parties impliquées.
Le client peut très bien exprimer quelque chose que lui est tout à fait simple, mais pour son auditoire, est très complexe. En donnant accès rapidement, étape par étape, aux fonctions de l’application, tant le client que les professions qui les construisent, ils arrivent à une meilleure compréhension de part et d'autre, sur les moyens nécessaires à combler le besoin.

Le but ultime de tout projet informatique, est de livrer un logiciel qui couvre toutes les fonctionnalités d’un client pour l’excursion d’un travail donné.

Un client peut demander un marteau pneumatique pour construire une cabane à oiseaux. Mais, parfois en lui faisant essayer un petit marteau avec manche en bois, il pourra s’apercevoir qu’il comble parfaitement son besoin.

Nombreux projets, tant les clients que les professionnels informatiques ont voulu en faire ce que j’appelle « un trip technologique », faire une voiture qui vole, qui roule et qui peut plonger dans l’océan pour aller voir le Titanic.

Les « trip technologiques » , c’est bien joli dans les laboratoires de recherche et mais pas dans la vraie vie. Notre premier travail, en plus de développer le logiciel, s’est d’abord d’accompagner le client dans sa compréhension de son besoin et surtout dans son expression.
Je me rappelle d’une étude de cas, que j’avais fait à l’université (ça remonte à plus 13-14 ans maintenant). La solution que mes confrères d’étude préconisaient coutait à l’œil plus de 100 000 $, pour petit système de facturation. A l’inverse d’eux, moi et un vieux sénior aux cheveux gris, on a proposé un bon vieux « pad de facture » et un petit système informatique (genre fortune1000 (logiciel comptable vendu en boite)) au bureau mère de l’entreprise.

L’entreprise en question était une petite compagnie d’aviation qui travaillait (transport de marchandises et de personnes) dans le Nord du Québec (donc pas d’électricité dans le nord). A l’époque le cout de portable était exorbitant (5000 $ et +) et en plus il aurait fallu une génératrice dans le nord. Vous comprenez que les couts s’approchaient du 100 000$.

Pourtant, ce que le client avait demandé, c’était un système « informatique » dans lequel il pourrait tout faire le suivi des transports de marchandises et de personnes.
Par contre, deux autre étudiants, moi (un jeune fou aux idées révolutionnaires) et une éminence grise (un vieux sénior en informatique qui faisait son baccalauréat pour s’amuser), préconisait était une solution beaucoup plus simpliste. Un logiciel de comptabilité en boite, genre Forturne 1000 (Logiciel comptable très respecter par les professionnels de la comptabilité) pour le bureau principal, et bon vieux pad de facture (Papier) et bon de livraison pour gérer les transports dans le nord.
Tout informatiser l’ensemble des processus, mettre le tout sous ordinateur auraient été un maudit beau « trip technologique ». Mais, est-ce que ça aurait répondu aux besoins, honnêtement je ne crois pas.
Devinez, c’est quoi la solution que le professeur accepta, et qui jugeait la meilleure, était bien celles du Pad de facture. Le plus drôle de l’histoire, c’était un cas réel que lui avait exécuté par le professeur lui-même. Il avait suggéré la seconde alternative, à quelque détail prêt et elle fut acceptée par le client.

L’approche des petites livraisons, aurait surement aidé plusieurs confrères à mieux comprendre le besoin. Et surtout, à livrer au client ce dont il avait vraiment besoin.

Donc, ce dire agile, ce n’est pas, en ne faisant pas de documentation. Mais, c’est en produisant celle qui est nécessaire pour la compréhension de la fonctionnalité et d’assurer la qualité du logiciel. C’est aussi de garder en tête, que la documentation sert à la production d’un logiciel fonctionnel, et ce, le plus rapidement possible.

C’est aussi de livrer une solution simple et efficace pour résoudre le besoin exprimé par le client. Afin, de lui permettre une utilisation efficace de l’outil produit.

Bien entendu, en impliquant rapidement le client, et ce, rapidement dans le processus, cela va demander une approche différente avec le client. Mais, il ne faut pas oublier que le client reste le personnage le plus important dans tout projet informatique. Pas clients, pas de logiciel à produire.

Avant, le client s’investissait au début et à la fin du processus. Au début pour expliquer ce qu’il voulait. Et la fin, on lui demandé une période instance pour tout valider, soit plusieurs jours, plusieurs semaines prisent dans un bloc pour tout valider.

En agile, on ne lui en demande pas moins d’effort, mais on va la répartir différemment, quelques heures par cycles pour valider rapidement ce qui a été fait. (Un prochain article, traitera de la gestion des cycles et de leurs durées)

Je ne sais pas ce que vous en pensez, manger une banane par semaine, est beaucoup facile qu’un régime d’un seul coup.

Être agile, ce n’est pas de changer les choses, c’est simplement pensé différemment. Gardons ce qu’on fait de bien, et améliorons ce qui doit être amélioré.

L’équipe de Génération Agile.

mercredi 15 octobre 2008

Qu’est-ce que sait d’être Agile .. ! Partie 1 (Les individus)

Beaucoup de gens se disent Agile.. Mais qu’est-ce que sait d’être Agile.
Être Agile s’est d’abord avant tout, quatre grands principes :
  1. Les individus et les interactions doivent primer sur les processus et les outils.
  2. Le développement logiciel doit primer sur la documentation exhaustive.
  3. La collaboration avec le client doit primer sur la négociation contractuelle.
  4. L’ouverture au changement doit primer sur le suivi d’un plan rigide.

Dans ce premier article, nous regarderons l’aspect des individus et les interactions dans un projet en méthodologie Agile.


« Les individus et les interactions doivent primer sur les processus et les outils. » Beaucoup de méthodes, processus ont toujours cherché à créer la recette miracle qu’on pourrait appliquer à tous les projets pour garantir la rentabilité et le succès (livré à temps et selon le budget du contrat.).


L’expérience, et il semble que je ne suis pas seule, m’a démontré que cette recette miracle n’existe pas.. ! L’un des principaux problèmes est classement des individus par « type de profile » mais sur tout dire comment chacun des profiles va communiquer avec l’autre. Régir les communications par des documents structures.


Les grands mérisiens de se monde ont oublié que les individus, ont une capacité extra ordinaire, c'est-à-dire « SE PARLER » . Il suffit de mettre un groupe de personne ensemble avec intérêt en commun dans une salle, et en quelques minutes ! Il y aura la majorité des gens qui discuteront ensemble.


Ce que dit les principes de la méthodologie agile, laissons les gens parler, communiquer ensemble. Ils trouveront la meilleure méthode de communiquer. Il n’est pas interdit de mettre en place des processus et des outils qui faciliteront cette communication. Mais, il ne faut pas chercher à les structurer de manière telle que les individus refusent de communiquer.


Il faut leurs données des outils simples, des wikis, des post-its, une adresse de courriel..


Une machine à café.. ! Qui n’a pas réglé un problème majeur en allant chercher un café à la machine à café. Tout ceux qui ont travaillé avec moi savent que veut dire « Coffee Time’s ».Une petite expression.. ! pour dire OK.. Les amis, on prend une pause.. Pour se changer les idées.. ! Discuter autrement une problématique qu’on cherche à résoudre. Briser la forme, de voir autrement le problème.. mais surtout de prendre une petite pause.. Pour se changer les idées.. ! Ça fait du bien.


L’autre point important pour se dire agile.. c’est de tout mettre en œuvre pour éviter le temps supplémentaire… ! Un moyen que j’ai appliqué et que je sais beaucoup applique, c’est la règle du pouce 3-6.


La règle du pouce 3-6, est simple. C’est de découper en petite tâche de 3 et 6 heures. Vous me direz pourquoi 3 et 6 heures. C’est simple, 3 heures auxquelles on ajoute une heure, donc 4 heures au total, c’est une demi-journée et même chose pour 6 heures, représente une journée lorsqu’on lui additionne une heure (7 heures).


Une tâche de 3 heures, normalement au bout d’une heure, la ressource attitrée aura une bonne idée du travail faire. Elle aura identifié toutes les problématiques qu’elle devra résoudre. Et l’heure d’étalonnage au besoin permettra de finir le travail.


Le cas échéant qu’une ressource, identifie un problème majeur, récupéré une heure de travail, sur un projet normal de développement, c’est très facile.


A l’inverse, une tâche d’une durée de 30-40 heures, le temps normal d’évaluation de la complexité et des différentes problématiques qui pourraient survenir, c’est au moins une dizaine d’heures. Ce qui rend la récupération des heures perdues, encore plus difficiles. Donc, qui provoque souvent du temps supplémentaire.


Mais cette règle du pouce 3-6 demande aussi une grande responsabilisation des ressources et prise de confiance de demander rapidement de l’aide. Plus rapidement qu’on sait qu’il y a problème quelque part, et quelque nature que se soit, plus vite on peut réagir, chercher des solutions.


L’implication de chacune des ressources, l’implication en contexte Agile sont très importantes. C’est l’une des clés du succès. Le premier projet que les gens vivront en Agile, vos gens risquent d’être un peu perdu..

Parce la responsabilité ne repose plus sur les épaules d’une seule personne, mais sur tous les membres de l’équipe, sur eux en particulier. Les anciens principes chacun avaient sa responsabilité, et on ne devaient pas franchir la frontière de la responsabilité de l’autre. En Agile, chacun à un rôle principal et un rôle secondaire. Ex un développeur en plus de sa responsabilité de développer l’application, pourrait être l’assistant à l’administrateur de données.


L’avantage de cette double responsabilité, si le principal est trop occupé ou encore absent, son second peut prendre en charge momentanément effectuée le travail que l’autre aurait fait normalement.


Il est conseillé d’attribuer les rôles selon les intérêts des individus. Car, un individu qui a de l’intérêt pour une tâche, une expertise.. il s’y investira naturellement davantage que pour une qu’il n’en a pas.


Faisons confiance aux ressources, donnons les outils pour faciliter leur travail. Le climat de travail sera agréable pour tous, donc productif.
L’autre chose qu’il ne faut pas oubliée. L’être humain n’est pas fait pour travailler 20 h par jour. En partant de se principe, il faut se rappeler quand on peut éviter le temps supplémentaire, il nécessaire de le faire.


Dans un projet plus traditionnel, le temps supplémentaire est un moyen de récupérer le retard que la vie du projet à occasionné. Mais, la règle du 3-6 cherche justement à minimiser les retards.


Les méthodologies Agiles ne disent pas qu’il ne faut pas faire du temps supplémentaire. Mais qu’il faut prendre tous les moyens pour l’éviter. Et si, le besoin survient, la période de temps supplémentaire ne devait pas dépasser 4-5 jours par mois ou par cycle.


Le temps moyen d’un cycle, que j’ai connue qui généralement utilisé est entre 5 et 20 jours, mais si vous me permettez, la durée des cycles et leur fonctionnement, se sera le sujet d’un autre article.


En terminant, des ressources reposées et heureuses vont s’impliquer et mettre tout en œuvre pour le succès du projet. Car, tant le succès que l’échec, leur sera attribué individuellement que collectivement.
Soyez Agile, restez ouvert d’esprit et essayez de penser différemment.

L'équipe de GénérationAgile.