Les équipes agiles doivent-elles proposer de nouvelles fonctionnalités quotidiennement?


31

Mon entreprise est en pleine transition d'un développement de type cascade vers Agile / Scrum. Entre autres choses, on nous dit que nous nous attendons à avoir de nouvelles fonctionnalités de travail, testables (par QA) à la fin de chaque journée.

La plupart de nos développeurs perdent environ 2 heures par jour à cause des réunions et autres frais généraux d'entreprise. Cela signifie que dans une période donnée de 6 heures (au mieux), nous devons concevoir, écrire, tester unitaire, construire et déployer (avec les notes de publication) suffisamment de code pour produire une fonctionnalité complète avec laquelle QA pourra jouer. Je comprends que les notes de build / déploiement / version pourraient être automatisées avec une configuration CI appropriée, mais nous n'en sommes pas encore là.

Nous avons également un important contingent offshore qui écrit notre code côté serveur, et le décalage horaire de 12 heures rend cela encore plus difficile.

Nous essayons de classer les histoires en tranches verticales étroites et profondes afin de terminer les fonctionnalités de bout en bout aussi rapidement que possible, mais la plupart des jours sont plutôt frénétiques et j'attrape souvent des gens qui prennent des raccourcis stupides et fragiles pour s'assurer que le contrôle qualité a sa propre construction. Ce problème est aggravé après qu'un sprint a été en cours pendant quelques jours, lorsque les défauts inévitables commencent à rouler et doivent s'insérer dans la même fenêtre de 6 heures.

Est-ce un rythme normal pour les équipes Agile? Même si nous parvenons à mettre en œuvre une configuration CI, je ne vois pas comment nous serons en mesure de maintenir ce rythme tout en créant des logiciels de qualité.

Edit: Il y a plusieurs bonnes réponses ici. Cela m'a fait réaliser que ce que je demandais vraiment, c'est si les équipes Agiles devaient fournir de nouvelles fonctionnalités quotidiennement. J'ai mis à jour le titre en conséquence.

Réponses:


52

Les crimes commis au nom d'Agile ces jours-ci me rendent triste. Beaucoup de gens ont du mal à faire cette transition.

Manifeste Agile: "Nous valorisons les personnes et les interactions plutôt que les processus et les outils.". Lorsque les gens souffrent clairement, le processus est mauvais. Je ne veux pas vous dire comment le faire, mais je vais partager comment je le fais.

Dans mes équipes, l'important est d'éviter de s'engager sur un code repo partagé qui est cassé de manière à perdre le reste du temps de l'équipe. Dans ce sens uniquement, je m'efforce de «délivrer du code de travail tous les jours». Ne cassez pas l'AQ. Ne bloquez pas les autres développeurs. Idéalement, je ne vérifie jamais aucun bogue. (ha, ha).

L'implication n'est pas que vous devez commettre quelque chose chaque jour. L'implication est que vous ne devez valider que les bonnes choses, afin que chaque jour vous puissiez obtenir une compilation de toutes les bonnes choses que quiconque a commises. De cette façon, l'équipe continue de tirer sur tous les cylindres.

Dans mes équipes, l'AQ est constante. Je construis des produits commerciaux, donc le projet n'est jamais terminé jusqu'à ce que le produit soit obsolète. Les ingénieurs QA testent les fonctionnalités disponibles pour les tests. Les ingénieurs QA ont toujours un arriéré. Il n'y a jamais assez de temps d'AQ pour tester ou automatiser tout ce que nous souhaiterions idéalement.

Si les développeurs ont besoin de plusieurs jours avant de fusionner les modifications d'une fonctionnalité ou d'un correctif, c'est bien, encouragé si cela les aide à obtenir le bon code avant de risquer notre temps. Les développeurs peuvent valider du code dans leur référentiel privé ou branche sans affecter l'équipe ou le contrôle qualité. Les développeurs peuvent exécuter des tests unitaires ou automatiser la régression sur du code construit à partir du référentiel d'un développeur ou d'une branche privée. Dans les cas particulièrement risqués, un ingénieur QA travaillera avec le développeur pour tester avant la fusion, afin de protéger l'équipe contre les retards.

En ce sens, je pratique ce que veulent vos managers. Presque tous les jours au cours des 12 dernières années, mes équipes de développement ont eu du code qui fonctionne dans le référentiel partagé. Nous sommes toujours presque prêts à expédier. Parfois, nous n'y arrivons pas, mais nous ne nous en soucions pas trop. Parfois, il est intentionnel, d'accueillir des changements d'outils majeurs ou des fusions difficiles.

Le Manifeste Agile, pour moi, résume le meilleur de la nouvelle réflexion sur le processus de développement qui a émergé dans les années 1990. Je suis à peu près un vrai partisan de ces principes, mais les détails du processus peuvent varier. À mes yeux, le but d'Agile est d'adapter votre processus aux besoins de vos produits et clients, et non d'être un esclave du processus.


2
+1: réponse impressionnante. Une très bonne perspective sur ce que "agile" devrait vraiment signifier.
Jim G.

24

Si vous aviez un logiciel fonctionnel hier, pourquoi ne fonctionnerait-il pas aujourd'hui? Si vous n'avez terminé aucune tâche aujourd'hui, la construction d'aujourd'hui sera la même qu'hier. Les versions quotidiennes et le rythme de développement sont des choses distinctes. Ce n'est pas parce que vous avez des versions quotidiennes que vous avez de nouvelles fonctionnalités dans chaque version.

Lorsque finalement une fonctionnalité est terminée et archivée dans la branche principale, vous devriez avoir un processus automatisé qui construit le logiciel et exécute des tests. S'il y a un problème avec la construction ou l'exécution des tests, l'équipe est avertie et concentre ses efforts pour le faire fonctionner à nouveau. C'est ainsi que CI fonctionne et comment il vous aide à publier des logiciels qui fonctionnent tout le temps.


J'ai mal formulé la question. Je me posais vraiment des questions sur la faisabilité de fournir quotidiennement de nouvelles fonctionnalités, pas sur la façon d'empêcher un produit existant d'être cassé par des versions quotidiennes. J'ai mis à jour la question.
Joshua Smith

@JoshuaSmith: si vos histoires sont assez petites, il est parfaitement possible d'avoir de nouvelles choses chaque jour. Et si vous avez un serveur d'intégration continue, avoir un produit cassé n'est pas une option. Si une fonctionnalité n'est pas prête, elle n'est pas synchronisée avec le serveur ou effectuée dans une branche privée. Je préfère la première solution.

8

Réponse courte: Non . Cela ne peut tout simplement pas être accompli quotidiennement.

Cependant, une équipe agile est censée fournir des éléments logiciels ou des user stories à chaque sprint . Habituellement, des réunions de suivi ont lieu tous les jours pour voir les progrès et les obstacles.

En ce qui concerne les logiciels de qualité , les processus d'intégration continue (CI) en place garantiront que le contrôle de la qualité est appliqué à de petits efforts (check-ins) et effectué aussi souvent que configuré. Il vise également à améliorer le quality of software, et à réduire le temps nécessaire pour le livrer, en remplaçant la pratique traditionnelle d'appliquer un contrôle de la qualité après avoir terminé tout le développement.


On dirait que quelqu'un essaie de faire en sorte que l'équipe d'interrogateurs fasse un sprint par jour. Vous ne devez pas décharger quoi que ce soit vers le contrôle qualité jusqu'à ce qu'il soit passé par un sprint (ou qu'il soit terminé à la satisfaction de tous) ET qu'il ait été jugé acceptable (nombre minimum de fonctionnalités fonctionnelles, bogues connus documentés).
John Lyon

1
clarifions: "Vous ne devez rien décharger sur QA tant que la user story n'est pas terminée et archivée."
EL Yusubov

Un peu plus de clarification: une histoire n'est pas terminée tant que le code de l'histoire n'a pas été testé.
Bryan Oakley

@ElYusubov J'ai également compris que nous étions censés proposer de nouvelles fonctionnalités / histoires à la fin de chaque sprint, ce qui est tout à fait raisonnable.
Joshua Smith

4

Non, il ne faut pas s'attendre à fournir de nouvelles fonctionnalités chaque jour. Toutes les fonctionnalités ne peuvent pas être décomposées en une taille si petite que le développeur peut terminer la fonctionnalité en environ 6 heures de temps de développement.

Si vous faites de la mêlée, vous devriez faire au moins 2 semaines de sprints, avec des fonctionnalités dimensionnées pour prendre environ 0 à 8 jours pour être terminées. La promesse faite au propriétaire du produit est de livrer un nouveau code de travail correct, testé et vérifié, qui pourrait être mis en production à la fin du sprint. (REMARQUE: vous n'avez pas besoin de le mettre en production, mais l'objectif est que ce soit le cas)

Une bonne méthodologie vous a suggéré de configurer un serveur CI (intégration continue) dans lequel vous avez automatisé la création d'au moins une version quotidienne de logiciels fonctionnels. L'idée étant que vous archiviez votre code dès que vous avez terminé la fonctionnalité afin qu'elle puisse être dans le prochain cycle de construction, puis entre les mains de QA pour les tests.

N'oubliez pas que l'objectif est de faire réaliser et tester les fonctionnalités à la fin du sprint! Vous ne voudriez pas avoir à faire attendre le contrôle qualité jusqu'au dernier jour du sprint pour que vous fassiez la construction et ensuite les faire tester toutes les fonctionnalités. Ils n'auront pas le temps de tout tester et vous n'aurez pas le temps de corriger les bugs ...

Si vous ne pouvez pas configurer un serveur CI, la pratique devrait être que vous devez créer manuellement une nouvelle version pour QA chaque fois qu'un développeur vérifie son code fini et prétend qu'il a terminé avec une fonctionnalité et prêt à être transféré à QA.


1
C'est ce que nous faisons maintenant, mais les nouvelles fonctionnalités ne prennent généralement qu'une seule journée, en particulier avec l'offshore.
Joshua Smith

2
Ce qui est bien, agile / scrum dit simplement qu'il fournira du code potentiellement livrable à la fin du sprint, pas même de nouvelles fonctionnalités! De nombreux endroits ont des sprints entiers où cela améliore simplement les performances ou nettoie le code. Tout endroit qui s'attend à ce qu'une nouvelle fonctionnalité soit effectuée chaque jour abuse de la mêlée pour profiter de vous.
Alan Barber

2

Cela dépend en fait de la taille du projet; si le projet est important, il n'y a aucun moyen réalisable d'y parvenir.

Les builds quotidiens (voire plus souvent) issus d'outils d'intégration continue ne signifient pas un logiciel fonctionnel; cela signifie à peine du code compilable.


À certains égards, je pense que l'obtention quotidienne de nouvelles fonctionnalités de QA devrait être plus facile sur un grand projet. Par exemple, si vous avez 5 développeurs / équipes de développement, vous pouvez les faire faire des sprints d'une semaine chacun décalés d'un jour à partir du lendemain.
Dan Neely

1

Il existe de nombreux projets qui fournissent des versions quotidiennes qui, grâce à une intégration continue, fonctionnent comme des logiciels. Du moins en théorie.

Cela signifie qu'il ne contient pas nécessairement de nouvelles fonctionnalités. Peut-être quelques corrections de bugs mineurs, ou rien du tout.

En théorie, si vous ne parvenez pas à fournir plus de travail à votre AQ quotidiennement, vous devez soit augmenter le nombre de développeurs, soit réduire le nombre de testeurs. Terrible idée!

Votre travail consiste à faire avancer les choses.

Dites au QA qu'ils auront quelque chose à tester quand ce sera fait. Vous devez leur expliquer pourquoi.


1
Mille fois, ça. J'ai dit au chef de projet que garder l'AQ fourni avec le travail n'est pas la responsabilité de mon équipe et a été repoussé, fortement.
Joshua Smith

Essayez de revenir avec des faits plus convaincants: developersurvivalguide.com/how-to-convince-your-boss

@JoshuaSmith: J'ai modifié ma réponse pour qu'elle corresponde à votre modification récente, mais je crains que ce ne soit pas la réponse que vous recherchez ...

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.