Méthode Agile

Méthode AGILE – Retours d’expériences

Voici maintenant plus de 5 ans que SALTO Consulting gère des projets implémentant la méthode AGILE.
Ceux-ci sont de

  • nature (Création d’un nouveau produit, Maintenance d’un produit existant, Intégration de progiciel, etc.),
  • taille (de 100j à plus de 3000j),
  • durée (de 3 mois à 3 ans),
  • domaine fonctionnel (ECommerce, Mise en place d’un back-office Magasin, Mise en oeuvre des processus de ventes et d’achat, etc.)

différents.
Il n’en demeure pas moins que la mise en oeuvre complète ou partielle des éléments ‘clés’ suivants conditionne la réussite de ceux-ci  :

 

1. Des rôles indispensables

A minima, un projet utilisant la méthode AGILE doit intégrer et IDENTIFIER les 3 rôles suivants :

  • Product Owner (PO) : Alimente le Backlog en UserStory – Il est le représentant du fonctionnel
  • Scrum Master : Récolte et analyse les données des sprints passés : Capacitif => Dimensionnement cohérent des sprints
  • Team Member : Il s’agit des membres de l’équipe chargés de la réalisation des UserStory.

Ce que l’on néglige parfois, c’est celui de Scrum Master.
C’est pourtant lui qui permet de reprendre les données ‘historiques’ des sprints, de les analyser (prendre du recul) et d’en tirer des éléments d’amélioration ‘objectifs’ (non discutables) du processus ‘AGILE’ mis en place.
Il contribue ainsi à

  • l’amélioration des processus de réalisation
  • la mise à disposition de chacun de données ‘objectives’
    • Capacitif d’équipe,
    • Rapprochement Story Point et Charges de travail,
    • Cause de blocage, de rupture dans la chaîne de fabrication,
    • Etc.
  • la mise en place d’une relation de confiance entre le fonctionnel et l’équipe AGILE.

 

2. Des rôles parfois nécessaires

En plus des rôles précédemment décrits, il peut s’avérer nécessaire de les compléter avec les 2 rôles suivants (qui ne sont pas des rôles de la méthode AGILE) :

  • Team Leader (ou Leader Technique) :
    Même si les choix de conception, revues de code, déploiements, veille techno etc. sont censés être totalement partagés dans l’équipe de développement, il n’en demeure pas moins que dans certains cas (équipe jeune, environnement technique nouveau), l’intégration d’un Team Leader (plus exactement leader technique) peut s’avérer nécessaire. Il faudra alors s’assurer qu’à terme, tous les membres de l’équipe aient un certain niveau d’autonomie au sein du projet (augmentation de la productivité).
  • DevOps :
    Affecter un rôle de ‘DevOps’ (lien entre le développement, la pré-production et la production) à l’un des membres de l’équipe (ce n’est pas son seul rôle dans le projet) permet d’assurer la ‘fluidité’ des mises en production des réalisations, notamment quand le niveau de maturité de l’outillage ‘DevOps’ (Intégration continue, orchestrateurs de containers, déploiement automatisé, etc.) n’est pas encore suffisant.
    Sans se vouloir exhaustif, la liste qui suit présente les principales problématiques à mettre en oeuvre :

    • Réalisation des jeux de données (sur la base des tests ‘QA’), éventuellement bouchonnés
    • Description du contenu de la livraison (Release Notes),
    • Ecriture des scripts (procédures) à passer lors de la mise en production
    • Mise en oeuvre et maintenance évolutive d’une plate-forme d’intégration continue automatisée (Build, Tests de non régression, Audit de code, Tests de performance, déploiement, etc.)
    • Vérification de la réalisation des pré-requis ‘techniques’ réalisés par des équipes tierces (BDD, VM, Dockerisation, APIs, Batch, etc.)
    • Planification des MEPP et MEP avec l’équipe Production
    • Participation à la MEP (GO – NO GO ‘technique’ de la mise en production – Vérification des résultats de l’intégration continue automatisée ou pas)
    • Faire le bilan de la MEP et de proposer des actions d’amélioration

 

3. Relation de confiance entre le fonctionnel et l’équipe AGILE

Il va sans dire qu’une relation de confiance entre le fonctionnel et l’équipe de réalisation (qu’elle soit méthode AGILE ou pas) est un élément clé de la réussite d’un projet.
Elle évite toute perte de temps à négocier et à se justifier.
Cette relation de confiance se traduit notamment par les éléments suivants :

  • Le fonctionnel (représenté par le PO) ne remet pas en question (négocie pas) les ‘Story Point‘ (charges) fournis par l’équipe (ou son Team Manager).
  • Le Scrum Master s’engage à fournir un capacitif de réalisation (en story point ou charge) de l’équipe à jour au PO et à lui donner toutes les explications nécessaires
  • Le fonctionnel (représenté par le PO) se base sur le capacitif de l’équipe pour construire les sprints
  • L’équipe AGILE s’engage à réaliser le contenu du Sprint et à fournir un contenu de qualité.

 

4. Mise en place d’un Release Plan donnant de la visibilité sur les réalisations à venir

Même si le contenu des sprints est susceptible d’évoluer (c’est le principe même de l’agilité), il est indispensable d’avoir une visibilité sur les réalisations à intégrer sur 2 à 3 mois à venir, à travers un Release Plan (ou Road Map).
Celui-ci doit permettre de :

  • Anticiper la création des UserStory, de les prioriser et de les documenter
  • Organiser des Workshop entre les Team Members (éventuellement représentés par le Team Leader) et le PO pour lever les manques ou les ambiguïtés qui peuvent subsister au niveau de la documentation des UserStory,
  • Planifier la réalisation des pré-requis (réaliser par des équipes tierces) à la réalisation d’une UserStory (APIs, Maquettes HTML-CSS, Contenus médias, etc.)
  • Faire une macro évaluation des UserStory (sous forme de story point ou de charge),
  • Prioriser les réalisation (ranking du Backlog),
  • Alimenter (encore une fois, même s’il est susceptible de changer) le contenu des 3 ou 4 prochains sprints,

Ce Release Plan est vivant. Il peut être revu, ajusté autant de fois qu’il est nécessaire. Il s’agit bien d’anticiper au delà du sprint à venir et de ne pas tout découvrir au dernier moment.
Par contre, il convient de prendre garde à rester sur un périmètre fixe (défini à l’initialisation du sprint) pour le sprint actif (sauf bug critique, incident de production).

 

5. Les Tests – Incontournables

Rappelons ici que méthode AGILE ou pas, ils sont indispensables.
Ils peuvent être classés en 4 grandes catégories :

  • Les tests unitaires : L’équipe de développement est en charge de leurs réalisations.
    Des outils existent pour la plupart des technologies permettant de les ‘prototyper’ et de vérifier en vérifier la complétude en niveau du code (taux de couverture).
  • Les tests fonctionnels : La MOE (à travers son PO ou sa MOA) les réalisent.
    Idéalement, chaque User Story doit avoir son test fonctionnel ‘écrit’ que l’on doit pouvoir lui associer (pièce jointe à la User Story, lien, sous-tâche, etc.). Ils doivent par ailleurs pouvoir être (re)passés n’importe quand (au niveau du sprint actif une fois la UserStory développée ou ultérieurement pour vérifier les non-régressions) afin de vérifier que le produit est (toujours) conforme aux exigences fonctionnelles.
  • Les tests de non-régressions : Il s’agit d’une sélection ‘pertinente’ (fonctionnalités intégrées dans les processus ‘auto-route’, image de marque, réglementation, etc.) de tests fonctionnels à rejouer à chaque nouvelle livraison.
    Dans la plupart des projets, ils sont réellement effectués s’ils ont été automatisés et intégrés dans une chaîne d’intégration continue ou s’il existe une équipe QA sur le projet dont l’une des missions est de les jouer.
    Ils s’avèrent pourtant primordiaux dans le cadre de la méthode AGILE, les mises en production étant de fait fréquentes augmentant sensiblement les risques de régression.
  • Les tests techniques : Ils consistent à vérifier que le produit répond toujours aux exigences de performance et de stabilité.

 

6. Préparation des sprints

Le but de la préparation d’un sprint est qu’au moment du lancement du sprint, il n’y ai plus de question à se poser sur celui-ci et que l’équipe DEVOPS puisse s’engager en toute ‘sérénité’ sur la MEP de celui-ci dans les temps et la qualité requise.
Théoriquement, au moins si la road map a été réalisée et mise à jour, il ne doit plus y avoir de point fonctionnel à revoir.
Il s’agit donc pour le Team Leader et le PO d’adapter le contenu du sprint en fonction des événements récents de la vie du projet à savoir :

  • intégrer les correctifs ‘non bloquants’ restants du sprint précédent
  • découper éventuellement des UserStory pour que chaque userStory du sprint ait un poids équivalent en terme de ‘StoryPoint’ (ou charge).
    Chaque membre d’équipe est alors amené à réaliser le même nombre de UserStory et les commits sont réguliers.
    La mesure d’avancement est alors plus fiable et facile (un comptage du nombre de UserStory réalisées peut suffire)
  • ré-intégrer dans le sprint les UserStory qui n’ont pas pu être réalisées lors du sprint précédent (ce qui doit être exceptionnel si la roadmap a bien été définie et mise à jour)
  • vérifier la réalisation des pré-requis tiers pour chaque UserStory du sprint en cours de préparation
  • prendre en compte le capacitif ‘actuel’ de l’équipe (congés, absence, dimensionnement, intégration de nouvelles ressources, etc.)

Le ‘goal‘ du sprint est alors clairement défini et l’équipe peut se focaliser et s’engager sur sa seule réalisation

 

7. Organiser les Sprints

Sans aller jusqu’à reproduire le Cycle en ‘V’, il apparaît profitable d’organiser les sprints avec les étapes suivantes :

  • Lancement du sprint (1/2j) : PO (ou le Team Leader) lance le sprint avec son équipe par une revue des user story intégrées à celui-ci. Chacun sait ce qu’il y a à faire et ce qu’il peut faire
  • Réalisation (2 semaines minimum) : Au fil des réalisations, l’équipe réalise les UserStory dans l’ordre des propriétés (Ranking du sprint). Elle effectue les tests unitaires et intégre les user story au fil de leur réalisation.
  • Tests : A chaque user story intégrée, le PO (ou sa MOA), passe les tests fonctionnels et identifie d’éventuelles anomalies qu’il priorise et surtout classe comme bloquant ou pas. Dans le cas d’une anomalie bloquante, l’équipe la corrige lors du sprint.
  • Préparation de la MEP (1/2j) : Une fois le GO MEP donné par le PO, l’équipe documente la MEP (Release Notes, procédures et scripts spécifiques, etc.).

 

8. Workflow de réalisation simple et efficace

La mise en place de workflow d’état des UserStory permet d’avoir une vision claire de l’état d’avancement du sprint (surtout si l’on utilise les KANBAN).
Cependant, une tendance forte est de multiplier les ‘états’. Or, la vraie question à se poser est de savoir si un état représente bien une étape d’avancement dans le processus de développement d’une UserStory.
En tout état de cause, les états ‘utiles’ et ‘systèmatiques’ rencontrés sont :

  • Open : La UserStory est ouverte
  • In progress : La UserStory est en cours de développement
  • Ready to test : La UserStory est développée et prête à être testée
  • Done : La UserStory est développée et les tests fonctionnels la concernant ont été passés avec succés. Elle est donc prête à être buildée pour mise en pré-production ou production.
  • Blocked : La UserStory est bloquée (manque de spécifications, en attente d’une autre UserStory, en attente d’un pré-requis, etc.)

L’avantage de ces états est qu’ils sont également applicables pour les anomalies, en effet, il suffit de remplacer, dans ce qui précéde, ‘UserStory’ par ‘Anomalie’ et ‘développée’ par ‘corrigée’ . Dans le cas du ‘Blocked’ les causes peuvent être un manque de description de l’erreur, du contexte dans lequel elle s’est produite (Scénario de test – Etape du test – Jeux d’essai, etc.).

Il existe souvent les états ‘Validated’, ‘Refused’ qui sont plutôt des informations (pourquoi ne pas utiliser alors une étiquette). En effet, le fait de retrouver une User Story (ou Anomalie) dans un sprint suppose qu’elle a été validée (enfin, il faut l’espérer) et si elle est refusée, elle restera dans le backlog et donc ne sera pas visible dans le Kanban (scrum) du sprint.

Toujours est-il que la définition d’un état peut avantageusement être complétée par des critères mesurables d’atteinte de l’état (ex : Done : Taux de couverture des tests de 90% – Respect des normes de développement – Taux de performance atteinte sur l’environnement de pré-production – Présence d’une documentation technique – etc.).

 

9. Polyvalence des équipes

En dehors du fait que cela permet de palier aux absences des membres de l’équipe, cela permet aussi à chacun de faire le travail de l’autre et donc de s’apercevoir des contraintes qui pèsent sur ses tâches et de mieux comprendre les exigences qu’il peut avoir (Ne fais pas à autrui ce que tu n’aimerais que l’on te fasse).
La mise en oeuvre typique de cette notion est la revue de code : L’équipe de développement fait des revues régulières sur les codes de ses collègues permettant non seulement de partager la connaissance des réalisations des autres (limitation du cloisonnement et échanges sur les bonnes pratiques) mais aussi des réduire le nombre d’anomalies.

 

10. Outils collaboratifs

Enfin, la méthode AGILE permettant de réaliser des versions de produits sur des cycles courts et de pouvoir faire évoluer les besoins à la demande (Time to market),

  • partager en permanence les informations sur
    • le stock des UserStory et des anomalies (BACKLOG)
    • le contenu des sprints à venir (ROAD MAP)
    • l’état d’avancement des UserStory (et des anomalies) du sprint actif (KANBAN)
    • les procédures à appliquer (WIKI),
    • les questions et les réponses apportées (FAQ),
    • les trucs et astuces (HOW TO),
  • échanger en live sur une problématique (CHAT),
  • décider sans avoir besoin de se réunir au même endroit (CallConf, WebConf)

sont des besoins ‘quotidiens’ nécessitant donc la mise à disposition des équipes des outils communs ‘collaboratifs’, l’idéal étant d’avoir un seul outil couvrant l’ensemble de ces problématiques d’échange et de partage.

Agile Tour Lille 2015 (Partie 2/2)

Retour sur la 1ère partie…

Suite de l’article : Agile Tour Lille 2015, partie 2

Pour rappel, voici les conférences que j’ai suivies cette année :

  1. Des lean startups dans l’administration !? – par Pierre Pezziardi
  2. Si le TDD est mort, alors pratiquons une autopsie – Par Bruno Boucard et Thomas Pierrain
  3. Construire plus vite en apprenant plus vite – Retour d’expérience du Monde.fr – Par Ismaël Héry
  4. Ratez vos revues de code en 5 leçons ! – Par Michel Domenjoud
  5. L’estimation, un formidable outil de discussion, même pour les projets #NoEstimates – Par Sébastien Delest
  6. Le Kanban expliqué par Bison futé – Par Cyrille Deruel
  7. Alliés contre les défauts – pourquoi et comment nous relisons ensemble le code que nous produisons – Par Julien Jakubowski et Antoine Blancke
  8. Intégration continue, DevOps et après ? – Par Laurent Tardif

5. L’estimation, un formidable outil de discussion, même pour les projets #NoEstimates – Par Sébastien Delest

Sebastien Delest est venu nous présenter le mouvement #NoEstimates. Aujourd’hui, nous avons besoin d’estimer pour décider et gérer un projet, une équipe. La difficulté est qu’estimer l’imprévu peut s’avérer.. complexe. On utilise généralement le coté reproductible des choses pour avoir une idée du temps nécessaire. Seulement on ne fait pas tout le temps la même chose, qui plus est dans le même contexte. Par ailleurs on a souvent tendance à être trop optimiste.

Sébastien nous propose donc d’éviter l’estimation, ou au moins de minimiser son importance. Pour cela il nous propose quelques alternatives :

  • On ne peut se fier à une estimation pour des décisions importantes. Il vaut mieux prendre des décisions mineures et pouvoir changer d’orientation, s’adapter.
  • Il faut garder le point de vue sur la vision, l’objectif est d’utiliser le maximum de feedbacks sur des cycles courts pour prioriser les besoins.
  • Engager moins d’argent et donc moins de temps, en faisant un point d’avancement chaque semaine, par exemple, pour savoir si on continue ou si on prend la bonne direction.

Toutefois, l’estimation a également des vertus : elle permet par exemple via le planning poker de discuter du besoin et de partager la vision de celui-ci. Et donc de mieux le comprendre et soulever les premières inconnues. Il en est de même pour la rédaction des User Stories et des Scénarios BDD qui permettent de décomposer le besoin et encore une fois d’avoir une meilleure vision des détails. Sur ces points, l’orateur insiste sur l’intérêt d’avoir des interlocuteurs variés afin d’augmenter les points de vue et d’enrichir les échanges.

On peut également se poser la question de la valeur ajoutée d’une demande. Générerait-elle plus de chiffre ? Est-ce nécessaire pour améliorer la maintenabilité et donc mieux supporter les évolutions à venir ou simplement la qualité du support ? Pour cela, on peut utiliser une Story-map qui permet de prioriser les fonctionnalités par valeur ajoutée et/ou effort nécessaire.

Comme toujours il n’y a pas de solution miracle, mais des bonnes pratiques peuvent limiter les impacts. Ainsi si un client change d’avis et souhaite revenir en arrière, faire des cycles courts et avoir un retour au plus vite permet de réduire les pertes. De même, dans le cas d’engagement au forfait, il vaut mieux privilégier la confiance et s’engager sur l’effort plutôt que sur le contenu.

Dans tous les cas, le travail d’estimation doit être pris comme une opportunité d’échanges sur le besoin et les priorités plutôt que comme une simple opération comptable.

6. Le Kanban expliqué par Bison futé – Par Cyrille Deruel

Voilà une présentation très dynamique et diablement pertinente ! Cyrille est Delivery Manager chez Octo, il ne travaille aucunement pour bison futé, en revanche il a eu une soudaine conviction un jour de bouchons sur la route des vacances. Il a remarqué de nombreuse similitudes entre la gestion du trafic routier et celle ses projets informatiques. Voilà l’origine de sa présentation.

Cyrille nous propose donc d’améliorer les 5 pratiques de notre kanban en appliquant les solutions correspondantes à ce que fait Bison Futé pour mieux gérer le trafic routier.

1. Visualiser le flux de travail

Pour éviter la frustration des clients engendrée par le manque de vision des délais, on peut indiquer sur le kanban une estimation du temps restant avant la mise en production d’une fonctionnalité, comme le fait Bison Futé avec ses panneaux à affichage variable estimant le temps restant pour atteindre une destination. Ce n’est pas un engagement, on ne peut prévoir l’imprévu. Par contre on peut supposer au vu du rythme actuel que si la fonctionnalité est en phase de test par exemple, il lui reste X jours pour arriver en production.

De même on peut préciser le nombre de personnes travaillant actuellement sur tel ou tel pan applicatif. Ainsi on a conscience qu’un sujet dans un domaine avancera plus ou moins vite en fonction de l’énergie actuellement allouée sur ce domaine.

2. Limiter le WIP (Work In Progress)

C’est un classique, le multi-tâches c’est le mal, et accumuler un ensemble de tâches en cours est le meilleur moyen de se noyer. C’est là qu’intervient le WIP. Pour respecter ce nombre de tâches pouvant être traitées en parallèle, on bloque ce nombre. Comme un feu rouge devant une autoroute, vous êtes ainsi certain que la route sera fluide et optimale. De manière plus radicale, on peut imaginer une circulation alternée. Si les Product Owners ne sont pas en mesure de prioriser les tâches, on peut les choisir aléatoirement. C’est à éviter autant que possible, mais ça débloque le problème. Un concept intéressant est également celui de la fourrière. Si chaque jour une tâche n’avance par car un élément externe est bloquant, on peut mettre cette tâche en fourrière, ne plus s’en préoccuper et ainsi libérer l’équipe d’un point sur lequel elle ne peut rien faire.

3. (Mesurer et) gérer le flux

Concernant le trafic routier, il y a plusieurs options : on peut réserver une voie au taxi pour qu’il puisse aller plus vite en cas de bouchon, ponctuellement utiliser une voie d’arrêt d’urgence pour augmenter le flux ou encore limiter la vitesse globale pour augmenter la vitesse de croisière. (Réduire la vitesse de 10km/h sur le périphérique parisien à augmenté de 18% la vitesse moyenne !)

Pour notre kanban, comme pour le reste d’ailleurs, le meilleur moyen de décider est d’abord de mesurer. Il faut régulièrement s’adapter et expérimenter. Tester une nouvelle manière de gérer, et si au bout d’un mois le résultat n’est pas concluant, on refait comme avant. Par ailleurs, en période de congés, quand une partie de l’équipe est absente, on absorbe forcément moins d’activité que si tout le monde était présent.

4. Rendre explicites les règles des processus

Il est essentiel de définir les règles à suivre, de réaliser des checklists pour vérifier que l’on s’y tienne et de les adapter au fil du temps et notamment de l’expérience. Ainsi en cas de problème, on peut en identifier les causes et faire évoluer le process pour ne plus reproduire l’erreur. La checklist permet d’éviter les habitudes qui trop vite nous font oublier certains points et donc reproduire des erreurs.

Ici aussi en mesurant la « quantité de problèmes »qu’on a sur les différents sujets, on est plus à même d’identifier et corriger le problème en amont.

5. S’améliorer collaborativement

Il faut dés le début avoir conscience et prendre en compte les contraintes externes. Un éco-pont a permis d’éviter des accidents avec des sangliers sur la route. Vérifier que le ciblage de nos utilisateurs est compatible avec le règlement de la CNIL évite de s’en rendre compte une fois en production. Il faut aussi, comme le télépéage, automatiser tout ce qui peut l’être, comme le déploiement sur un environnement de tests, par exemple.

Cyrille ajoute à cela l’importance d’avoir une bonne salle de pause et des événements en dehors du travail. Cela améliore la qualité des échanges et simplifie la communication.

Il faut aussi prendre conscience que le changement peut prendre du temps : 40 ans après le lancement de la ceinture de sécurité, 21% des tués dans les accidents de la route ne la portaient pas…

Je vous invite à parcourir les slides qui sont assez évocateurs :

 

 

7. Alliés contre les défauts – pourquoi et comment nous relisons ensemble le code que nous produisons ? – Par Julien Jakubowski et Antoine Blancke

Voila une nouvelle présentation sur la revue de code, plutôt orientée sur le retour d’expérience des équipes au Web Center d’Axa.

Julien et Antoine commencent par nous expliquer qu’au début, la revue de code était plutôt faite par un expert dans l’équipe et parfois en pair-programming. Cependant le résultat était peu concluant car le retour d’expérience était peu diffusé et l’expert avait trop de code à relire. Ils ont donc opté pour une revue de code faite par l’ensemble de l’équipe. De premier abord, cela semble particulièrement coûteux, à raison de 3 réunion d’une heure par semaine pour tout le monde d’un coup. Dans les faits, le coût est de 5% du budget de développement du projet.

Il y a deux choses qui permettent d’accepter ce coût :

  • La première est d’optimiser au maximum l’efficacité de la revue de code. Pour cela, il ont établi des rôles qu’il est impératif de respecter : un time-keeper, un modérateur, un scribe, 3 lecteurs et bien sur l’auteur initial du code qui explique ce qu’il a produit. Chaque rôle permet d’équilibrer la réunion et de s’assurer de son efficacité.
  • La deuxième chose est de relativiser ce coût par rapport au autre coût d’un projet. Des statistiques donnent un R.O.I de 4 pour 1 (4h de debug pour 1h de revue) avec un budget dédié à la correction de bugs au départ de 43% du budget du projet. Pour finalement descendre à 5% du budget lorsque la revue de code est utilisée.

D’autres avantages de la revue de code sont aussi la communication autour du code, la mise en place d’une propriété collective du code qui devient donc plus facile à maintenir, et enfin la facilité d’apprentissage pour les nouveaux arrivants qui intègrent plus facilement les standards et la compréhension du projet.

S’il est difficile au début de faire des revues de code, par peur de montrer son code ou de faire des remarques peu pertinentes, ou simplement par la pression du projet. Avec du travail, notamment sur la communication : ne pas critiquer le code mais faire référence au standard, reformuler ses phrases pour ne pas accuser (tu …) mais plutôt partir d’une hypothèse (je pense que …). Et le respect des rôles (time-keeper, modérateur), la pratique de la revue de code s’avère très efficace et améliore notablement la communication, même avant les revues !

En conclusion, s’ils ne devaient garder qu’une chose sur leurs gestions de projet, ils garderaient la revue de code !

Les slides de la présentation sont disponibles ici :

 

8. Intégration continue, DevOps et après ? – Par Laurent Tardif

« Prédire » l’avenir est difficile : En 1994 par exemple, le rapport Thery ne croyait pas en l’avenir d’internet… Toutefois Laurent commence par présenter un chiffre intéressant : d’après une étude Gartner, en 2016 Devops va passer d’un marché de niche à une réelle stratégie pour 25% des entreprises. Le ton est donné.

Ensuite, il réalise un rapide état des lieux de ce qui existe : l’émergence des principes sur l’agilité, les outils d’intégration continue qui permettent déjà de rapprocher le développement des tests. Tout cela permet d’améliorer la qualité du code, sa robustesse et son processus de livraison.

Ensuite nous voyons une définition de ce qu’est DevOps – la fusion du dev, des tests, et des ops :

  • D’un point de vue technique, c’est principalement de l’automatisation, des processus de tests, de la livraison, etc.
  • D’un point de vue du business, c’est une approche qui croit en l’expérimentation, à l’échec rapide, au produit viable minimal et une décision prise sur des chiffres.

Puis on passe en revue rapidement pléthore de domaines couverts par devops ainsi que les principaux outils associés :

On constate à nouveau qu’il est très important de mesurer, via du monitoring, la gestion du feedback utilisateur. C’est là clé pour prendre les bonnes décisions.

Puis Laurent fait un rapide bilan de ce que l’on a aujourd’hui : un forte tendance vers les produits Open Source, les clouds privés et/ou publics, les technologies autour des containers (Docker) et micro-services, et enfin le machine learning, aujourd’hui avec Mahout et Spark et demain certainement avec Flint.

On apprend que les solutions de cloud privé sont en recul, notamment du fait de leur coût et leur complexité, au contraire de l’IoT et la sécurité qui sont en forte croissance. Un nouveau courant cherche à décentraliser les puissances de calcul pour les apporter jusque dans les téléphones mobiles (via des containers). Cela permettrait d’amoindrir les coûts et d’améliorer le service, par exemple en cas de coupure réseau.

Enfin comme piste de réflexion pour le buffet de clôture, Laurent imagine qu’après l’association des Devs et des Ops, la prochaine génération associera les Devs et le Marketing.

Les slides de la présentation sont disponibles ici :

Tout cela n’aurait pas eu lieu sans l’association Nord Agile et de leurs sponsors, un grand merci à eux !

Et bien sûr merci à Salto Consulting de m’avoir permis de participer à cette journée !

Par Matthieu Fernandes

Agile Tour Lille 2015 (Partie 1/2)

Ce 15 octobre 2015 avait lieu la 8ème édition de l’Agile Tour Lille. C’était une excellente journée riche en retours d’expériences, approches différentes et comme toujours lors de ce type d’événement, en rencontres enrichissantes.

Cette année, l’Agile Tour Lille comptait 400 inscrits et 120 personnes en liste d’attente ! Et effectivement, on se sentait parfois un peu à l’étroit dans les salles jusqu’à suivre une conférence assis par terre 😉 Concernant l’accueil j’ai adoré l’idée du badge de la conférence qui contient un plan des lieux et le planning de la journée : c’était juste parfait.

La journée a commencé sur les chapeaux de roues, avec 30 secondes et un slide par speaker pour présenter leur conférence. Et le choix ne fut pas simple !

Pour ma part j’ai suivi les conférences suivantes :

  1. Des lean startups dans l’administration !? – par Pierre Pezziardi
  2. Si le TDD est mort, alors pratiquons une autopsie – Par Bruno Boucard et Thomas Pierrain
  3. Construire plus vite en apprenant plus vite – Retour d’expérience du Monde.fr – Par Ismaël Héry
  4. Ratez vos revues de code en 5 leçons ! – Par Michel Domenjoud
  5. L’estimation, un formidable outil de discussion, même pour les projets #NoEstimate – Par Sébastien Delest
  6. Le Kanban expliqué par Bison futé – Par Cyrille Deruel
  7. Alliés contre les défauts – pourquoi et comment nous relisons ensemble le code que nous produisons – Par Julien Jakubowski et Antoine Blancke
  8. Intégration continue, DevOps et après ? – Par Laurent Tardif

Je vous propose d’en extraire ici quelques idées.

1. Des lean startups dans l’administration !? – par Pierre Pezziardi

Pierre nous parle de son expérience et de ce qu’il réalise en lean management pour le Secrétariat Général à la Modernisation de l’Action Publique.

Il évoque les difficultés de travailler avec les systèmes environnant particulièrement lourds et complexes de l’administration. Il nous révèle une technique redoutable pour estimer la charge d’un projet : systématiquement, c’est 6 mois pour 4 personnes, avec un objectif précis en tête (exemple : un taxi en un clic !)

Pierre évoque aussi la difficulté d’être innovant dans une organisation fortement ancrée dans des procédures dont la relative efficacité est éprouvée depuis des années. Être disruptif avec les procédures habituelles, c’est comme proposer une interface web pour remplir un formulaire Cerfa, ça fonctionne, mais l’efficacité n’est pas là.

Il indique également qu’une petite équipe de 50 personnes ne peut pas bouleverser une structure de 4000 personnes du jour au lendemain. Il faut gagner la confiance, convaincre et propager une nouvelle culture de travail.

Pour être plus efficace, il propose de s’isoler au maximum des processus existants, quitte à garder des tâches manuelles. En effet, si une nouvelle fonctionnalité est utilisée une centaine de fois par jour et demande une action manuelle du côté administratif, au moins dans un premier temps, ça peut être acceptable et permet d’avoir la fonctionnalité en production très tôt.

Pour ouvrir l’Agile Tour, cette conférence était a point nommé, un véritable retour d’expérience sur l’efficacité de l’agilité là ou l’on ne l’attendait pas : dans l’administration. Et Pierre est toujours très pertinent avec des propos souvent si évidents qu’on aurait trop tendance à les oublier. Par exemple, le chef : c’est l’usager !

2. Si le TDD est mort, alors pratiquons une autopsie – Par Bruno Boucard et Thomas Pierrain

Bruno et Thomas tiennent à souligner le fait que le TDD ne se résume pas au classic Red-Green-Refactor. Ce n’est que la partie visible de l’iceberg.

Tout d’abord un petit rappel de RGR :

  • Red : on écrit le test sur un code mort => il est en échec : rouge
  • Green : on implémente le minimum pour que le test passe : vert
  • Refactor : on améliore

… puis on recommence.

Voilà pour la partie visible, d’ailleurs je me permets toute de suite une petite note personnelle :

Toute personne qui s’est déjà essayé au TDD vous le dira : au début commencer par écrire un test, c’est compliqué car ce n’est pas dans nos habitudes. Quand on a une idée que l’on veut implémenter, on le fait et on a une idée relativement précise de ce que l’on doit faire. Dans notre métier les choses se présentent un petit peu différemment : il s’agit d’implémenter ce que quelqu’un d’autre a en tête ! Et parfois même plusieurs personnes… Finalement, se poser la question de savoir ce qui m’est demandé, avant même de savoir comment y répondre parait beaucoup plus légitime. Voilà ce qu’apporte le TDD dans un premier temps : s’assurer que nous répondons à la bonne question ! A condition bien sûr, de trouver la question…

Mais revenons donc à la conférence. Thomas et Bruno font remarquer que voir sa liste de test validée fait partie des satisfactions de la journée. Le fait d’écrire un premier test devient quelque chose de simple et un vrai coup d’épaule pour démarrer. Une lutte efficace contre la procrastination. Ils insistent également sur la nécessité de s’entraîner en rappelant la théorie des 10000 heures de Anders Ericsson. Il évoque par exemple les codes kata, et les coderetreats. D’ailleurs à ce sujet le prochain Global Day of Code Retreat (CRTGD) à lieu chez Salto le 14 novembre!

Enfin quelques idées sont soulevées :

  • Commencer par les tests c’est difficile, il n’y a pas de design émergeant. En effet commencer par les tests impose de s’imprégner de son sujet, d’en discuter avec les différents interlocuteurs pour bien décomposer les choses. La technique du « should » est mise en avant, il s’agit de parler de comportement, pas d’une API.
  • Il ne suffit pas d’écrire beaucoup de tests. Au contraire, trop de tests rendent la maintenance difficile. Il ne s’agit pas de tester des méthodes, mais des « gestes métier ». Il faut donc rester haut niveau. C’est la couverture de test qui importe, pas la quantité.
  • TDD est-il vraiment efficace ? Oui ! par essence même, on ne test que ce qui est demandé et on écrit alors le minimum de code qui répond au besoin. Pas de sur-conception ou d’hypothèse hors spécification. On rappelle ici les bases : YAGNI (you ain’t gonna need it) et KISS (keep it simple stupid).

Une méthode intéressante est celle de la double boucle qui consiste à faire une première boucle avec un test d’acceptance contenant lui-même plusieurs boucles de tests unitaires.

Les auteurs rappellent également la nécessité pour le développeur de connaître des design patterns et d’avoir des notions d’architecture.

En résumé, si vous ne faites pas encore du TDD, il est temps ! Et si vous avez abandonné : parfait, il est temps se s’y remettre sérieusement !

3. Construire plus vite en apprenant plus vite – Retour d’expérience du Monde.fr – Par Ismaël Héry

Ismaël Héry nous fait part de son expérience au Monde.fr. Il nous rappelle le petit miracle que représente la publication d’un journal tous les matins, et le bouleversement actuel entre la presse écrite qui décroit indéniablement et la presse numérique qui monte mais avec des profits inférieurs. Dans ce contexte compliqué, il faut avancer et s’améliorer pour rester dans la course. La spécificité des médias est aussi l’approche du délai. Lorsqu’il y a une élection présidentielle ou tout autre événement, si une application dédiée est prévue il faut qu’elle soit livré à l’heure, pas au jour ou à la semaine… Dans un tel contexte on peut comprendre que les éventuelles pénalité de retards soient infinies !

Avec de telles contraintes, il faut savoir être rapide et prendre de l’avance. Cela implique de travailler sur des technologies nouvelles, non éprouvées et pose donc certaines questions :

  • Quel temps est nécessaire à l’apprentissage ?
  • Les tests sont ils automatisables ?
  • Comment se comporte cette technologie en cas de montée en charge ?

Pour pouvoir répondre à ces questions il n’y a qu’une option, il faut mesurer et avoir un retour au plus tôt. Cela implique :

  • Expérimenter : le meilleur moyen de savoir si une solution peut répondre au besoin reste tout simplement de l’essayer.
  • Mesurer : mettre en place au plus tôt un monitoring de la solution, intégrer des bêta testeurs et en prendre soin. Ce sont eux qui vous diront si la solution est pertinente. Il faut savoir trouver des personnes bienveillantes qui seront indulgentes et d’autres plus « pointilleuses » qui vous feront beaucoup de retour.
  • Mettre en production ! : c’est ce qui apporte le plus de retour. Techniquement, au plus tôt on met en production, au plus tôt on aborde les différentes difficultés liées aux technologies choisies. De même, cela permet d’obtenir plus vite des retours utilisateurs et de décider si on doit continuer ou pas sur cette voie.

Ismaël insiste sur l’importance des avis utilisateurs. Jusqu’à mettre en place des « fakes » qui ne feraient que récupérer l’avis des utilisateurs. Il explique également qu’il faut prendre une bonne dose d’empathie. Souvent ce que l’on pense compliqué pour l’utilisateur passera sans soucis alors qu’une fonctionnalité qui semblait anodine peut paraître laborieuse par l’utilisateur final.

En conclusion, pour apprendre vite, il faut tester au plus vite en production tous en mesurant : monitoring, analytics, retours d’utilisateurs. La vie d’un projet est faite d’un graphe de micro-décisions qui se dessine dans le temps. Le conseil d’Ismaël pour faire ces choix : « En cas de doute, choisissons le chemin de l’apprentissage maximum ». Il faut créer dans l’équipe « un sain sentiment d’urgence et d’engagement » qui force à garder un rythme soutenu et soutenable plutôt que de compter sur le coup de fouet donné à l’approche de la date de livraison. Urgence qui conduit trop facilement à des échecs.

Une citation d’Ismaël est particulièrement explicite : « Si vous sortez et que vous n’avez pas de bug, c’est que vous êtes sorti trop tard. »

4. Ratez vos revues de code en 5 leçons ! – Par Michel Domenjoud

Michel Domenjoud disposait de 20 minutes pour nous faire part de son expérience sur les revues de code. Tout d’abord, il souligne qu’une équipe utilisant la revue de code sera plus confiante sur la fiabilité de l’application en production, contrairement à une équipe qui n’applique pas de revue de code et qui craindra de modifier certains pans complexes d’une application. Personnellement je tiens le même discours au sujet des tests unitaires.

Puis Michel nous rappelle quelques chiffres sur la revue de code :

  • 65% des bugs sont ainsi détecté au plus tôt
  • un ROI de 4/1 à savoir 4 heures de debug pour une heure de revue de code

Voici quelques conseils :

  • Il faut choisir le format de revue de code approprié à l’équipe et à la situation et l’appliquer à un rythme soutenable. Relire 2000 lignes de code la veille d’une mise en production, ce n’est pas soutenable. Par contre faire en pair-programming un algorithme complexe qui demande autant de ligne de code me parait plus sûr.
  • L’auteur du code doit lui-même appliquer les modifications décidées en code-review. Ça implique de progresser et d’éviter le dictât d’un développeur qui diffuserait la bonne parole…
  • Il faut échanger sur les pratiques, mettre en place des standards commun. Chaque équipe possède ses exigences et affinités, elle doit définir ce qui lui convient.
  • Egoless programming : le code se partage, il évolue avec toute l’équipe et n’est donc pas la propriété d’une personne.
  • Ce n’est pas le moment de « troller », en pause café en revanche…
  • Prendre une décision collective implique que chacun fasse des compromis. Ainsi tout le monde progressera.

Enfin Michel nous invite à utiliser les différents formats de revue de code (pair-programming, revue par un pair, revue collective). Chacune a ses avantages, et toutes sont complémentaires.

Vous trouverez les slides de sa présentation sur :
http://fr.slideshare.net/mdomenjoud/agile-tour-lille-2015-ratez-vos-revues-de-code

Et pour aller plus loin ses articles sur le blog d’Octo : http://blog.octo.com/author/mdo/

Fin de la partie 1 (à suivre…)

Par Matthieu Fernandes