Fleche retour aux articles de blogL'Agilité, qu'est-ce que c'est ?

Ceux qui travaillent dans le numérique, ou du moins à proximité du numérique, savent que l'art du développement est particulier et quelque peu différent des autres types de projets d'ingénierie. Il exige le soin et l'attention d'une équipe adaptable et flexible, et qui soit prête à réagir rapidement aux changements et qui ne se contentent pas de répondre aux demandes d'un client du jour au lendemain. La méthodologie Agile a été créée pour répondre à cette exigence.

Mots clés :

Gestion de Projet

Agilité

Scrum

Kanban

Définition de la méthodologie Agile :

La méthodologie agile est un type de processus de gestion de projet, principalement utilisé pour le développement de logiciels, d'applications web et mobiles ou de tout autre projets numérique, où les besoins et les solutions évoluent grâce à l'effort de collaboration d'équipes auto-organisées et interfonctionnelles et de leurs clients.

Issu des valeurs et des principes du Manifeste Agile, ce processus a été créé en réponse aux insuffisances des méthodes de développement traditionnelles telles que la méthode en cascade (Waterfall). Le secteur du numérique est un marché très compétitif en particulier car un outil numérique est quelque chose qui peut être continuellement mis à jour. Cela signifie que les développeurs doivent constamment améliorer et innover leurs produits pour rester à la pointe du progrès - et l'approche linéaire et séquentielle de la méthode Waterfall n'était tout simplement pas à la hauteur.

Un bref historique du développement de logiciels agiles

Dans les années 1990, le développement numérique a connu une crise. Les sociétés ont réalisé qu'elles ne pouvaient pas aller assez vite pour répondre aux demandes et aux exigences de leurs clients - le temps estimé entre un besoin commercial et une application réelle était d'environ trois ans. Les modèles de développement traditionnels étaient basés sur une approche chronologique, où le développement se faisait de manière séquentielle et le produit final n'était révélé aux clients qu'avant la toute dernière étape (la mise en production). Cela laissait peu de place à la flexibilité lorsqu'il s'agissait de revoir ou de modifier l'état d'une solution. Ainsi, au moment où une application était terminée et livrée, il était fort probable que non-seulement les exigences et les objectifs initiaux du projet aient changés, mais que la technologie en elle-même ait fortement évoluée.

Devant l'argent et les efforts gaspillés, et même l'annulation de plus en plus de projets à mi-parcours, les responsables professionnels ont souhaité adopter une nouvelle approche qui pourrait s'adapter aux contraintes de leurs clients. Tous aspiraient à cimenter un processus qui légitimerait de nouvelles pratiques, c'est ainsi qu'est née le Manifeste Agile.

Qu'est-ce que le Manifeste Agile ?

Le Manifeste Agile est une déclaration des valeurs et des principes exprimés dans la méthodologie Agile. Composé de quatre valeurs fondamentales et de 12 principes clé, il vise à aider, un instaurant un cadre, la mises en place meilleures façons de développer des applications, en fournissant une structure claire et mesurable qui favorise le développement itératif, la collaboration en équipe et l'adaptabilité au changement.

Les valeurs et principes du "Manifeste pour le développement logiciel agile" sont les suivants :

Valeurs

  1. Les individus et leurs interactions plus que les processus et les outils
  2. Des outils opérationnels plutôt qu'une documentation exhaustive
  3. La collaboration avec les clients plutôt que la négociation contractuelle
  4. L'adaptation au changement plutôt que le suivi d'un plan

Le Manifeste Agile ne nie pas l'importance des seconds éléments de chaque phrases, mais il privilégie les éléments qui se trouvent en première partie.

Principes

  1. Notre plus haute priorité est de satisfaire le client en livrant rapidement et régulièrement des fonctionnalités à grande valeur ajoutée.
  2. Accueillez positivement les changements de besoins, même tard dans le projet.
  3. Livrez fréquemment un logiciel fonctionnel, dans des cycles de quelques semaines à quelques mois, avec une préférence pour les plus courts.
  4. Les utilisateurs ou leurs représentants et les développeurs doivent travailler ensemble quotidiennement tout au long du projet.
  5. Réalisez les projets avec des personnes motivées. Fournissez-leur l’environnement et le soutien dont elles ont besoin et faites-leur confiance pour atteindre les objectifs fixés.
  6. Privilégiez la co-location de toutes les personnes travaillant ensemble et le dialogue en face-à-face comme méthode de communication.
  7. Un logiciel fonctionnel est la principale mesure de progression d'un projet.
  8. Les processus agiles encouragent un rythme de développement soutenable. Ensemble, les commanditaires, les développeurs et les utilisateurs devraient être capables de maintenir indéfiniment un rythme constant.
  9. Une attention continue à l'excellence technique et à un bon design.
  10. La simplicité – c’est-à-dire l’art de minimiser la quantité de travail inutile – est essentielle.
  11. Les meilleures architectures, spécifications et conceptions émergent d'équipes auto-organisées.
  12. À intervalles réguliers, l'équipe réfléchit aux moyens possibles de devenir plus efficace. Puis elle s'adapte et modifie son fonctionnement en conséquence.

Ceux qui appliquent tout type de méthodologie Agile adhèrent à ces valeurs et principes. Le manifeste offre un bon aperçu de ce qui est attendu en matière de pratiques et de cycle de vie du développement Agile.

Qu'est-ce que la gestion de projet Agile ?

La gestion de projet Agile est une méthodologie qui est couramment utilisée pour réaliser des projets complexes en raison de sa capacité d'adaptation. Elle met l'accent sur la collaboration, la flexibilité, l'amélioration continue et des résultats de haute qualité. Elle vise à être claire et mesurable en utilisant six principaux "deliverables" (produits livrables) pour suivre l'avancement et créer le produit.

Les deliverables

  • Product Vision Statement (Déclaration de vision du produit) : Un résumé qui articule les objectifs du produit.
  • Product Roadmap (Feuille de route du produit): Une feuille de route haut-niveau des exigences et étapes nécessaires à la réalisation des objectifs du produit.
  • Product Backlog (Arriéré du produit) : Classée par ordre de priorité, il s'agit de la liste complète de ce qui doit être fait pour mener à bien le projet.
  • Release Plan (Plan de lancement) : Un calendrier pour le lancement d'un produit fonctionnel. Il n'inclut pas uniquement la date de livraison finale, mais plutôt des étapes générales à atteindre appelées "milestones".
  • Sprint Backlog (Arriéré du sprint) : Les users stories (exigences), les objectifs et les tâches liés au sprint en cours.
  • Increment (Incrément) : Le produit dans un état fonctionnel qui est présentée aux acteurs du projet à la fin de chaque sprint

Il existe différents cadres de gestion de projet Agile qui peuvent être utilisés pour développer et fournir un produit ou un service. Bien qu'ils aient chacun leur propre ensemble de caractéristiques et leur propre terminologie, ils partagent des principes et des pratiques communs.

Deux des cadres les plus populaires qui soutiennent le cycle de vie du développement Agile sont Scrum et Kanban.

La méthodologie Agile Scrum

Scrum est l'un des cadre Agile qui est utilisé pour mettre en pratique les idées Agiles dans le développement numérique. Créé par Jeff Sutherland et Ken Schwaber (qui faisaient également partie des 13 personnes qui ont cimenté le Manifeste Agile), il est composé de cinq valeurs : engagement, courage, concentration, ouverture et respect. Son objectif est de développer, de fournir et de maintenir des produits complexes grâce à la collaboration, la responsabilité et le progrès itératif.

Ce qui distingue Scrum des autres méthodologies Agiles, ce sont les rôles, les événements et les artefacts qui le composent et avec lesquels il fonctionne.

Rôles de l'équipe Scrum

  • Product Owner (Propriétaire du produit) : Expert du produit qui représente les parties prenantes et est la voix du client.
  • Developement Team (l'équipe de développement) : Groupe de professionnels qui créent le produit (développeurs, programmeurs, concepteurs).
  • Scrum master : Sorte de superviseur qui assure la bonne compréhension et l'exécution de Scrum tout au long du développement. C'est un "servant-leader", un facilitateur qui, bien qu'il gère le groupe, est à son service.

Événements Scrum

  • Sprint : "Boîtes de temps" itératives lors desquelles un but est accompli. Les délais ne dépassent pas un mois civil et sont cohérents tout au long du processus de développement.
  • Sprint Planning (Planification du sprint) : Réunion lors de laquelle toute l'équipe Scrum se réunit - au début de chaque sprint - pour planifier le sprint à venir.
  • Daily Scrum (Mêlée quotidienne) : réunion de 15 minutes encadrées dans le temps, tenue à la même heure, chaque jour du sprint, lors de laquelle les réalisations de la veille sont discutées, ainsi que les attentes pour la journée à venir.
  • Sprint Review (Revue du sprint) : Une réunion informelle tenue à la fin de chaque sprint lors de laquelle l'équipe Scrum présente son Increment (livrable) aux parties prenantes et consigne les retours.
  • Sprint Retrospective (Rétrospective du sprint) : Une réunion inter à l'équipe Scrum, qui lui sert réfléchit sur le déroulement du sprint précédent et établit les améliorations pour le sprint suivant, dans une optique d'amélioration continue.

Artefacts Scrum

  • Product Backlog (Arriéré de produit) : Géré par le Product Owner (PO), c'est là que sont énumérées par ordre de priorité toutes les exigences nécessaires à la réalisation d'un produit viable. Il comprend les caractéristiques, les fonctions, les exigences, les améliorations et les corrections, ce qui autorise toute modification du produit dans les versions ultérieures.
  • Sprint Backlog (Arriéré de Sprint) : Une liste des tâches et des exigences qui doivent être accomplies au cours du prochain sprint. Parfois accompagné d'un tableau des tâches Scrum, qui est utilisé pour visualiser l'avancement des tâches du sprint en cours, et les modifications apportées dans un format "à faire, en cours et terminé" (To Do, Doing, Done).

Kanban

Kanban est une méthode très visuelle couramment utilisée dans la gestion de projet Agile. Elle brosse un tableau du flux de travail, dans le but d'identifier tout goulot d'étranglement au début du processus, afin de fournir un produit ou un service de meilleure qualité.

Ses six pratiques générales sont les suivantes :

  • Visualiser le projet
  • Limiter les travaux en cours
  • Gérer les flux entrants et sortant du projet
  • Rendre les règles explicites
  • Utiliser les boucles de retours rapides (feedback)
  • Réaliser des évolutions collaboratives ou expérimentales

Kanban est un concept qui a été développé dans la chaîne de production des usines Toyota dans les années 1940. Il permet d'atteindre un fonctionnement efficace grâce à des repères visuels qui signalent certaines étapes du processus de développement. Ces repères sont un tableau Kanban, des cartes Kanban, et parfois même des "couloirs de nage" Kanban.

  • Kanban Board (Tableau de Kanban) : Un outil de gestion visuelle utilisé pour afficher le processus de développement. Il peut être physique (tableau blanc, post-it et marqueurs) ou virtuel (comme l'outil de gestion de projet en ligne Trello). Il peut aussi bien être utilisé pour la productivité personnelle que pour un usage professionnel.
  • Kaban Cards (Cartes kanban) : Cartes qui représentent un élément de travail ou une tâche dans le processus de travail. Utilisées pour communiquer les progrès de l'équipe, elles affichent des informations telles que le statut, le délais, la catégories et tout autre détails importants de la tâche qu'elles représentent.
  • Kanban Swimlanes (Couloirs de nage Kanban) : Un élément visuel sur le tableau qui vous permet de mieux distinguer les tâches/éléments en les classant par catégories. Se déroulant horizontalement au travers des étapes, il offre une distinction qui permet de catégoriser les cartes et d'avoir une meilleure vue d'ensemble du déroulement des opérations.

Mention spéciale

Il existe de nombreuses autres approches et méthodes d'implémentations de l'Agilité, mais je vais vous détailler l'Extrem Programming (ou XP), qui me semble parmi les pus pertinente.

Programmation extrême (XP)

Basé sur les cinq valeurs de communication, simplicité, retour d'information (feedback), courage et respect, XP est un cadre qui vise à produire une meilleure qualité de vie pour l'équipe de développement, ainsi qu'un produit de meilleure qualité, grâce à un ensemble de pratiques.

Les pratiques d'XP :

  • La mise en place de jeux de planification (comme du poker planning par exemple)
  • Le développement par les tests (Test Driven Développement)
  • La programmation en paires (pair-programming)
  • Un client intégré à l'équipe
  • De petits livrables
  • La réécriture et l'amélioration continue du code (Refactoring)
  • Une logique d'intégration continue
  • Une propriété collective par l'équipe du code, et donc de la réussite du projet et de ses échecs (pas de bouc émissaires)
  • L'utilisation de métaphores ou de descriptions techniques explicites, compréhensibles par tous les acteurs
  • Une conception la plus simple possible
  • La mise en place de normes d'écriture de code
  • Une semaine de travail tenable (pas plus de 40h par personnes)

Meilleures pratiques en matière de méthodologie agile

Il est toujours utile de savoir comment faire les choses au mieux. Voici sept pratiques indispensables ou à minima très utiles à faire pour s'assurer de la réussite de la mise en œuvre d'une méthodologie Agile, et ce, quelle que soit la méthode choisie (Scrum, Kanban, XP, ...) :

Collaboration avec les clients

L'une des valeurs fondamentales énoncées dans le Manifeste Agile, la collaboration avec le client, est une partie essentielle de la méthodologie Agile. Grâce à une communication cohérente avec l'équipe de développement, le client doit toujours être conscient des progrès réalisés, pour formuler ses retours. Sa participation active permettra d'obtenir un produit de meilleure qualité dans une logique d'amélioration continue et d'acceptation du changement.

Les User Stories

Outil utilisé pour expliquer une fonctionnalité logicielle du point de vue de l'utilisateur final, l'objectif d'une User Story est de créer une description simplifiée d'une exigence. Elle permet de se faire une idée du type d'utilisateur du produit, de ce qu'il veut et de la ou des raisons qui le justifient.

Format classique d'une User Story :
En tant que [rôle], je veux [caractéristique], parce que [raison].

Intégration continue

L'intégration continue (IC) consiste à maintenir le code à jour en produisant une version propre du système quelques fois par jour. Avec une règle stipulant que les programmeurs ne doivent jamais rien laisser de non intégré à la fin de la journée, elle permet la livraison d'une version du produit adaptée à la publication à tout moment. Ce que l'intégration continue cherche à faire, c'est de minimiser le temps et l'effort requis par chaque intégration.
Si à chaque nouvelle fonctionnalité ajoutée, les développeurs tentent de lancer l'application, celle-ci doit fonctionner.

Tests automatisés

La réalisation de tests automatisés permet à l'équipe de savoir quelles modifications du code sont acceptables et si une fonctionnalité a le comportement prévu. Les tests de régression sont exécutés automatiquement avant le début de chaque développement, pour valider que les développements précédents étaient corrects.

Programmation par paires

La programmation en binôme vise à améliorer les conceptions, à réduire les erreurs et à partager les connaissances au sein de l'équipe de développement. C'est l'une des pratiques de programmation Agiles les moins répandues, et elle n'a pas besoin d'être mise en place continuellement. Un programmeur "conduit" (utilise le clavier), tandis que l'autre "navigue" (observe, apprends, fournis un retour d'information). Les rôles peuvent être inversés. Cette méthode est très efficace lorsqu'il faut développer une partie critique de l'application (pour s'assurer de sa qualité) ou lors d'une étape charnière du projet (pour s'assurer que tous les développeurs de l'équipe comprennent bien le fonctionnement d'une pièce maîtresse).

Développement piloté par les tests (TDD)

Le TDD vise à encourager les conceptions simples et à sécuriser le développement. Au lieu d'un processus où l'on ajoute une fonctionnalité, puis on la teste pour vérifier sa conformité aux exigences, il s'agit d'une méthode basée sur la répétition d'un cycle de développement très court où les exigences sont d'abord écrites en tant que tests, puis le développement de la fonctionnalité est réalisé et amélioré pour passer ces nouveaux tests.

Le graphique d'avancement (Burndown chart)

Un graphique d'avancement est une représentation graphique du travail qu'il reste à faire en fonction du temps dont restant. En l'utilisant dans le cadre d'un plan de gestion de projet Agile, il permet de prévoir quand l'ensemble du travail sera terminé. Un tableau de synthèse détaillé comprendra également le nombre d'User Stories par unité de temps (le plus souvent par Sprint) pour permettre une estimation de la vitesse de développement de l'équipe, et la rédaction de Sprint Backlog plus pertinent.

La méthodologie Agile est un processus efficace pour les équipes qui recherchent une approche flexible au développement de produits et d'outils numériques. Elle n'est plus exclusive au secteur d'activité du numérique, mais peut être mise en œuvre pour toute entreprise commerciale qui nécessite un plan d'attaque non-linéaire et qui doit également valoriser la collaboration des clients, un travail d'équipe efficace, des changements réactifs et, bien sûr, des résultats de qualité.