Estimation agile des fonctionnalités

Les différentes méthodologies utilisent une terminologie différente pour désigner les caractéristiques. Il appartient à l'équipe de décider de la méthodologie ou de la terminologie à utiliser.

Idéalement, une fonctionnalité doit respecter les critères suivants

  1. Il devrait fournir valeur commerciale.
  2. CA devrait etre estimable – il doit avoir une définition suffisante pour que l'équipe de développement fournisse une estimation du travail nécessaire à sa mise en œuvre.
  3. CA devrait etre assez petit pour tenir dans une itération - par conséquent, s'il est trop volumineux, il doit être davantage décomposé.
  4. CA devrait etre testable – vous devez comprendre quel test automatisé ou manuel une fonctionnalité doit réussir pour être acceptable pour le client.

Les différentes méthodologies utilisent une terminologie différente pour désigner les caractéristiques. Il appartient à l'équipe de décider de la méthodologie ou de la terminologie à utiliser. La programmation extrême (XP) utilise les termes « histoires d'utilisateurs » ou « histoires » pour représenter les fonctionnalités ; scrum utilise le « backlog de produit » pour décrire une liste de fonctionnalités ; le développement piloté par les fonctionnalités utilise la « fonctionnalité » ; et DSDM utilise « exigence ». De même, il existe diverses versions allégées du processus unifié, ou agile UP, qui utilisent des « exigences » et/ou des « cas d'utilisation » pour définir des fonctionnalités livrables de manière incrémentielle. En fin de compte, l'objectif est le même : fournir régulièrement de la valeur commerciale par petits incréments, et le plus tôt possible.

Différences méthodologiques

Scrum appelle une fonctionnalité un élément de l'arriéré, qui a tendance à être plus granuleux et peut également inclure des éléments non fonctionnels tels que "configurer le matériel de production" ou "rechercher des options xyz".

XP appelle une fonctionnalité un DE BOUBA, qui se prête à une approche particulièrement utile pour définir la fonctionnalité.

DSDM appelle une fonctionnalité un exigence, qui peuvent également inclure plus que de simples fonctionnalités système.

Agilité vers le haut les praticiens utilisent exigences et cas d'utilisation pour définir les fonctionnalités.

Structure de répartition des fonctionnalités (FBS)

Lors de la planification détaillée, développement agile privilégie une approche de structure de répartition des fonctionnalités (FBS) au lieu de la structure de répartition du travail (WBS) utilisée dans les approches de développement en cascade. Les structures de répartition des fonctionnalités sont avantageuses pour plusieurs raisons :

  1. Ils permettent la communication entre le client et l'équipe de développement dans des termes que les deux peuvent comprendre.
  2. Ils permettent au client de prioriser le travail de l'équipe en fonction de la valeur commerciale.
  3. Ils permettent de suivre le travail par rapport à la valeur commerciale réelle produite.

Il est acceptable de commencer avec des fonctionnalités volumineuses, puis de les décomposer en fonctionnalités plus petites au fil du temps. Cela permet au client d'éviter de plonger dans trop de détails jusqu'à ce que ces détails soient nécessaires pour faciliter la conception et la livraison réelles.

Construire une liste de fonctionnalités initiale

Avant release la planification et planification des itérations, l'équipe doit dresser rapidement une liste d'autant de fonctionnalités potentielles que possible pour le système. Il existe généralement une seule personne responsable de la collecte des fonctionnalités (par exemple, un chef de produit, un client, un responsable de programme, un analyste commercial ou un autre mandataire client), mais les demandes de fonctionnalités peuvent provenir de nombreuses sources. Les utilisateurs, les clients, les ventes, le marketing, les appels d'offres, les membres de l'équipe de développement, la direction, les concurrents et les réglementations gouvernementales peuvent tous être des sources de fonctionnalités. La liste centrale des fonctionnalités de l'équipe doit comporter certains contrôles pour éviter les éléments en double, les fonctionnalités impossibles et les demandes trop vagues. L'équipe doit cependant être encouragée à saisir de nouvelles fonctionnalités au fur et à mesure qu'elle les identifie, afin qu'elles puissent être intégrées dans le processus de priorisation et de planification.

Une liste initiale de caractéristiques peut être une esquisse grossière, un sur-ensemble, à utiliser comme entrée pour planifier le release et première itération. Il représente le potentiel actuel de ce que le système pourrait devenir, peut-être sur plusieurs releases. Vous n'avez pas besoin d'attendre que toutes les fonctionnalités soient définies avant de commencer livraison de logiciels. Et vous n’avez pas besoin de vous en tenir insensément à la liste originale, aux descriptions originales ou aux priorités originales. L’un des points principaux du développement agile est que cette liste (comme tout le reste) évolue, itération par itération.

Supposons qu'une liste approximative de fonctionnalités soit terminée, un release le plan et le plan d'itération sont élaborés, et la première itération est terminée, avant que quelques caractéristiques critiques ne soient identifiées. Ces fonctionnalités sont simplement intégrées à l'évolution release plan et une itération ultérieure, et soyez livré dès que possible. Mais en attendant, le temps n'est pas perdu. L'équipe commence à fournir de la valeur dès que possible et crée l'infrastructure permettant au projet de s'adapter au fil du temps aux nouvelles priorités, informations et dynamiques commerciales.

Liste des fonctionnalités

Lors de l'élaboration d'une liste de fonctionnalités, les fonctionnalités sont initialement décrites dans un court paragraphe, généralement de 2 à 4 phrases. Cette description représente un résumé de haut niveau de la fonctionnalité, un espace réservé pour une compréhension préliminaire et une base pour une communication future. C'est un peu comme un titre pour un article qui sera écrit plus tard. L'objectif est de passer juste assez de temps à décrire la fonctionnalité pour avoir une compréhension raisonnable de la taille relative, de la complexité et de la priorité par rapport à toutes les autres fonctionnalités. Quelques détails supplémentaires apparaîtront au cours planification des itérations. Mais la compréhension précise et concrète de la fonctionnalité peut émerger au cours de l'itération, au fur et à mesure que les clients et les développeurs en discutent suffisamment pour l'implémenter ou (dans certaines méthodologies) pour créer des tests d'acceptation automatisés qui la spécifient de manière déterministe.

Références utiles

Histoires d'utilisateurs

Témoignages d'utilisateurs appliqués : pour le développement logiciel agile par Mike Cohn

Webinaire

Comment exécuter PI Planning avec Digital.ai Agility

Organisation des fonctionnalités

La gestion d'une seule longue liste de fonctionnalités peut être difficile. Il est très utile d'organiser les fonctionnalités en spécifiant des catégories, des groupements fonctionnels de niveau supérieur, une valeur commerciale ou une priorité et un risque. Le filtrage et le tri selon ces divers attributs peuvent aider à décomposer une très grande liste de fonctionnalités en morceaux gérables.

La liste complète des fonctionnalités doit être classée en une seule séquence continue pour fournir à l'équipe de projet afin que chacun puisse facilement voir quelles fonctionnalités sont les plus utiles. Si un projet démarre avec 100 fonctionnalités sur la liste, il n'est pas rare que 50 de ces fonctionnalités tombent dans une catégorie de priorité "élevée". Un classement séquentiel unique des caractéristiques permet d'identifier celles qui sont « les plus élevées parmi les plus élevées » et qui doivent donc être complétées en premier afin de maximiser la valeur fournie.

Comptabilisation du risque

Une considération supplémentaire peut être prise pour le risque associé à certaines fonctionnalités. Certaines fonctionnalités impliqueront des conceptions, des architectures, des cadres ou des algorithmes nouveaux pour l'équipe ou risqués. Même si ces fonctionnalités n'offrent pas la valeur commerciale la plus élevée, il est souvent logique d'augmenter suffisamment leur priorité pour les aborder dans les premières itérations. Si une fonctionnalité à haut risque est traitée au début du projet et, pour une raison quelconque, s'avère irréalisable, l'équipe a encore le temps de réagir et de la contourner. Cela minimise le risque global pour le projet. Il appartient à l'équipe de développement de travailler en étroite collaboration avec le client pour l'aider à identifier ces types de problèmes, de risques et de dépendances. C'est finalement au client de hiérarchiser les fonctionnalités, mais ce processus critique ne doit pas se dérouler dans le vide. Les meilleures équipes travaillent ensemble pour créer de la valeur et réduire les risques tout au long de la vie d'un projet.

Estimation des fonctionnalités

Après avoir identifié les fonctionnalités, le client travaille souvent avec les principales parties prenantes du développement pour définir des estimations de fonctionnalités. Les estimations de fonctionnalités sont censées être des estimations préliminaires de haut niveau utilisées pour générer release et la planification de votre patrimoine et la planification des itérations. Les parties prenantes impliquées dans l'estimation peuvent inclure des architectes, des responsables techniques, des développeurs, des testeurs, des rédacteurs et des gestionnaires. De nombreuses organisations ont mis en place des processus dans lesquels les groupes travaillent ensemble pour fournir rapidement des estimations initiales. Cette étape peut être utile pour déterminer initialement si la fonctionnalité doit être décomposée davantage.

Lors de l'estimation initiale des fonctionnalités, l'objectif est de converger rapidement vers une estimation de haut niveau raisonnable. Au lieu de se concentrer sur la question de savoir si une fonctionnalité nécessitera exactement 17.5 heures d'idée (ou Gummi Bears, ou NUTs, ou quelle que soit l'unité utilisée; voir ci-dessous), l'objectif est de se rapprocher raisonnablement en une fraction du temps. S'il faut deux minutes pour convenir que la fonctionnalité prendra deux à trois jours idéaux à mettre en œuvre contre 30 minutes pour établir une estimation précise de 17.5 heures d'idée, la première approche est préférée. Pour établir une estimation unique lorsque les opinions dans le groupe varient, les équipes peuvent soit prendre une moyenne, développer une approximation raisonnable, toujours utiliser le meilleur scénario, ou éventuellement utiliser un calcul impliquant le meilleur cas, le pire cas et l'estimation attendue si plus de complexité est nécessaire. approprié. Dans tous les cas, les discussions sur des estimations différentes fourniront souvent des connaissances utiles.

Ce processus de définition et d'estimation des fonctionnalités peut initialement sembler difficile, et lorsque les équipes le mettent en œuvre pour la première fois, elles peuvent avoir besoin de plusieurs réunions pour se familiariser avec un processus qui fonctionne bien pour elles. Au fil du temps, il devient plus facile de décomposer les fonctionnalités en unités de travail pouvant être livrées en une seule itération. Les équipes deviennent très bonnes dans ce qu'elles pratiquent et le développement agile permet aux équipes de pratiquer l'estimation à chaque release et itération.

Unités d'estimation

Les estimations, de par leur nature même, sont inexactes et les développeurs ont toujours eu du mal à produire des estimations utiles de tout le temps nécessaire pour effectuer une tâche de développement. Les estimations du temps de programmation réel sont souvent inexactes (surtout si elles ne sont pas rigoureusement comparées aux chiffres réels). Mais le temps hors programmation est encore plus difficile à cerner. Que répondez-vous si quelqu'un vous demande combien de temps il faut pour traverser la ville en voiture ? Vous utilisez une mesure relative. « Une heure en dehors des heures de pointe, par beau temps, s'il n'y a pas de travaux, sinon peut-être 2 heures », etc. Ces facteurs externes sont impossibles à contrôler et difficilement prévisibles. En plus de développer du code, les programmeurs passent du temps à tester, à rédiger de la documentation, à concevoir, à participer à des réunions et à des révisions, à envoyer des e-mails, etc. Comparé au travail de programmation, le travail hors programmation est difficile à prévoir ou à contrôler. Cela peut varier en fonction de votre secteur d'activité, de votre organisation, de la période de l'année et de toute manière de modifier les pressions externes sur l'organisation.

Certaines équipes demandent aux programmeurs d'inclure chaque activité hors programmation dans leurs estimations. Mais comme nous l'avons dit, ce n'est pas facile à faire. Pour un projet agile donné, bien avant que l'équipe n'ait une mesure précise du temps qu'elle passe à faire des choses non programmatiques, elle peut connaître le travail relatif requis pour réaliser différentes fonctionnalités et planifier en conséquence. C'est pourquoi il est plus typique pour les équipes agiles de concentrer leur estimation sur ce qui peut être estimé et mesuré le plus simplement : la programmation réelle. Ils se concentrent sur la quantité de travail que chaque fonctionnalité et chaque tâche technique nécessiteront, par rapport aux autres fonctionnalités et tâches techniques. Ils permettent de clarifier le temps consommé par ces éléments non programmés à mesure que la vitesse réelle émerge après quelques itérations. Il existe deux principales unités d'estimation que les équipes agiles utilisent pour concentrer l'attention sur la programmation de cette manière :

  • Unités de travail
  • Moment idéal

Unités de travail

Une unité de travail est une mesure relative qui, nous l'espérons, ne peut être confondue avec le temps réel. Certaines de ces unités:

  • Points
  • Ours gummi
  • Pieds-livres
  • NUT (unités nébuleuses de temps)

Ceux-ci représentent la quantité relative de travail nécessaire pour implémenter une fonctionnalité (ou une tâche), par rapport à d'autres fonctionnalités (ou tâches). Ce n'est qu'une fois que l'équipe s'est installée dans une vitesse constante, généralement sur quelques itérations, qu'elle peut commencer à mapper ces unités de travail sur des unités de temps réel. C'est exactement le point de vitesse : pour décrire la quantité de travail que l'équipe peut effectuer par unité de temps réel.

Une fois que l'équipe ou l'organisation s'est mise d'accord sur une unité d'estimation, elle doit accepter de faire un effort pour la mettre en œuvre de manière cohérente et s'en tenir à sa définition d'origine. Surtout dans les premières itérations du projet, tout le monde devrait résister à l'envie d'essayer de mapper ces unités sur des unités de temps avec une précision exacte.

Moment idéal

Comme les unités de travail, le temps idéal exclut le temps hors programmation. Lorsqu'une équipe utilise le temps idéal pour l'estimation, elle se réfère explicitement uniquement au temps de programmeur nécessaire pour réaliser une fonctionnalité ou une tâche, par rapport à d'autres fonctionnalités ou tâches. Encore une fois, au cours des premières itérations, l'historique des estimations s'accumule, une vitesse réelle émerge et le temps idéal peut être mappé sur le temps réel écoulé.

De nombreuses équipes utilisant le temps idéal ont constaté que leur effort ultime dépasse les estimations initiales du programmeur de 1 à 2 fois, et que cela se stabilise, dans une plage acceptable, sur quelques itérations. D'une tâche à l'autre, le ratio variera, mais sur une itération entière, les ratios que les équipes développent se sont avérés assez cohérents. Pour une équipe donnée, un rapport historique connu entre le temps idéal et le temps réel peut être particulièrement précieux pour la planification releases. Une équipe peut examiner rapidement la fonctionnalité requise et fournir une estimation de haut niveau de 200 jours idéaux. Si le ratio historique idéal/réel de l'équipe est d'environ 2.5, l'équipe peut être assez confiante pour soumettre une estimation de 500 jours de projet. Dans les scénarios d'enchères fixes, ce type d'estimation peut être fiable.

Estimation relative

De nombreuses équipes agiles utilisent la pratique de l'estimation relative pour les fonctionnalités. Au lieu d'estimer les caractéristiques sur un spectre de longueurs unitaires, ils sélectionnent quelques (trois à cinq) catégories d'estimation relatives, ou tranches, et estiment toutes les caractéristiques en fonction de ces catégories.

Planification des fonctionnalités par rapport à la planification des tâches

Bien qu'à ce stade initial de la planification, l'accent soit mis sur la vitesse et sur le travail relatif par fonctionnalité, à un moment donné, les fonctionnalités doivent être décomposées en leurs tâches respectives et estimées plus précisément. Cela se produit pendant release planification et planification des itérations. En général, les estimations de fonctionnalités et les estimations de tâches ont des objectifs différents :

  • Les estimations de fonctionnalités aident à piloter la planification à travers releases et itérations.
  • Les estimations de tâches aident à piloter le chargement des ressources dans une itération.

Parce qu'ils ont des objectifs différents, l'estimation d'une fonctionnalité n'a pas besoin de s'aligner précisément sur la somme de ses estimations de tâches. Cependant, sur une plage de caractéristiques, il devrait y avoir au moins une corrélation approximative entre les estimations de caractéristiques et la somme des estimations de tâches pour les caractéristiques.

FAQ

Quelle est la taille d'une fonctionnalité ?

Cela peut varier dans une large mesure en fonction du travail de développement effectué par votre équipe. Une règle générale est qu'une fonctionnalité doit être suffisamment petite pour être complétée dans une itération et suffisamment grande pour justifier une planification. Vous ne voudriez pas, par exemple, ne programmer que des fonctionnalités d'une heure pour une équipe de dix personnes travaillant sur un sprint d'un mois. C'est beaucoup trop d'éléments à planifier et à suivre. S'il y a des changements de fonctionnalités spécifiques qui sont si petits, il est souvent préférable de regrouper ces petits changements en un seul élément plus important à des fins de planification. Faites de chaque heure d'effort une tâche sous cette fonctionnalité.

Les corrections de bogues sont-elles des fonctionnalités ?

Ils peuvent être. Scrum, par exemple, enseigne que tout le travail que l'équipe doit accomplir doit figurer sur la liste du backlog. Les méthodes courantes de gestion des bogues incluent 1) la création d'un élément de fonctionnalité pour chaque bogue, 2) la création d'un élément de fonctionnalité appelé "corriger les bogues" dans chaque itération et détaillant la liste ou les types de bogues à corriger, ou 3) gérer les bogues séparément et non temps de suivi contre eux. Le nombre et la taille des bogues que votre équipe s'attend à rencontrer devraient être un facteur important pour déterminer la méthode que vous choisissez.

Pourquoi estimer les fonctionnalités ?

Les estimations de fonctionnalités aident à déterminer le classement et la planification qui se produisent dans release planification et planification des itérations. Pour connaître la quantité de travail à planifier dans une période donnée, vous devez avoir une estimation de la taille de chaque travail. Regarde aussi vitesse agile. Si deux fonctionnalités ont une valeur commerciale égale mais que l'une est la moitié de la taille de l'autre, l'équipe sera plus efficace si elle travaille sur la première fonctionnalité, elle devrait donc être mieux classée que la seconde.

Devrions-nous mettre à jour les estimations de fonctionnalités si les estimations de tâches ne correspondent pas ?

Non, les estimations de fonctionnalités déterminent la planification. Les estimations de tâches déterminent les allocations de ressources. Bien qu'il devrait y avoir une corrélation entre les valeurs, elles n'ont pas besoin de s'aligner précisément.