Je viens de commencer un travail avec Scrum et quelque chose semble manquer. Je suis nouveau sur Scrum


23

Le code est un gâchis complet d'une combinaison d'ASP / ASP.NET classique. La mêlée consiste à réparer le gros désordre ou à y ajouter des éléments. Nous sommes trop occupés à faire ça pour commencer une réécriture donc je me demande ..

Où est la partie dans Scrum où les développeurs peuvent avoir le pouvoir de dire que c'est assez et d'exiger qu'on leur donne le temps de commencer la grande réécriture? Nous semblons dans une boucle sans fin de simplement corriger l'ancien code avec «Stories».

Donc, les choses sont dirigées par des personnes non techniques qui ne semblent pas vouloir pousser pour une réécriture parce qu'elles ne comprennent pas à quel point la base de code est devenue mauvaise.

Alors, qui est chargé de réaliser ce grand changement de réécriture? Les développeurs? Le Scrum Master?

La stratégie actuelle est juste pour trouver le temps et le faire nous - mêmes sans les plus-ups impliqués , car ils sont la plupart du temps à blâmer pour le désordre actuel , nous sommes .. <-insérer diatribe sur les non-techniques de dire aux gens ce qu'il faut faire technique ici ->.


20
Sham agile lève à nouveau la tête laide ... De nombreuses entreprises se disent "agiles" et utilisent "scrum", alors qu'en fait elles ne font ni l'un ni l'autre.
Odé le

4
Vous ne faites pas Scrum

20
envisagez d'imprimer une grande affiche de cela et de la placer sur le mur à l'endroit où vos non-techniciens peuvent clairement le voir: Manifeste pour le développement de logiciels agiles semi-Arsed ... tandis que les éléments sur la gauche sonnent bien en théorie, nous sommes une entreprise, et il n'y a aucun moyen que nous lâchons les éléments sur la droite
gnat

12
lien obligatoire vers le blog de Joel: joelonsoftware.com/articles/fog0000000069.html
marco-fiset

8
"<-introduire une diatribe à propos des personnes non-tech disant aux gens tech quoi faire ici->" , la direction devrait 100% pour cent dire aux gens tech quoi faire, c'est pourquoi ils sont des gestionnaires et responsables de l' entreprise , c'est ce qu'ils faire mieux. Ce qu'ils 100% devrait pas être en train de faire est de leur dire comment le faire, les gens de technologie devraient décider de la façon de techniquement réaliser ce qu'ils ont été invités à le faire. Tout le reste est une naïveté totale !

Réponses:


7

Je ne sais pas pourquoi c'est si difficile pour les gens. Son analyse de rentabilisation est ici:

We seem in an endless loop of just patching old code with 'Stories'.

Le temps des développeurs, c'est de l'argent. Beaucoup d'argent. J'ai quitté une entreprise qui prévoyait de réorganiser leur interface utilisateur il y a plus d'un an et j'espérais que l'adoption de Scrum les aiderait à arrêter de tourner leurs roues. Qu'est-il arrivé? Même ol 'même ol'. Ils ont continué à intégrer de nouvelles fonctionnalités et la «dette technique» n'avait aucun argument commercial, même si la moitié du code que nous avons écrit est devenu vide de sens à chaque itération en raison de la base de code sous-jacente étant un désordre complètement obsolète. Pas une seule chose n'a changé sur leur front depuis mon départ, et j'ai été amené dans le but même de le réorganiser complètement. Au cours des deux mois où j'étais là, je n'ai pas touché à un coup de langue CSS ou JavaScript. Je jouais juste avec HTML et un ancien système de modèles Java de la fin des années 1990.

Ma réponse? Faites ce que vous pouvez, mais si les autres développeurs ont déjà abandonné et travaillent tard pour atteindre les objectifs de sprint plutôt que d'affirmer des délais plus pratiques et d'insister sur le fait que la dette technologique est en fait un problème de blocage, supposez le pire et commencez à chercher un nouvel emploi à présent. Vos développeurs ne peuvent pas ou ne sont pas autorisés à communiquer leurs préoccupations ou leur entreprise l'est aussi! @ # $ Ing à courte vue pour comprendre combien d'argent ils pissent.

Ignorer ces problèmes coûte TOUJOURS plus cher à long terme. Et pas un peu plus, mais BEAUCOUP plus. Non seulement c'est une blessure à la poitrine en ce qui concerne le temps de développement, mais cela va inévitablement réduire vos niveaux de talent, car les développeurs qui connaissent mieux et ont d'autres options éviteront votre entreprise comme la peste. Mon patron actuel est un développeur ET le propriétaire de l'entreprise. Il y a des choses que nous ne réécrirons pas en faveur de se concentrer sur d'autres priorités, mais quand quelque chose a vraiment besoin d'un refactoriste en raison de son temps constant, il obtient un refactoreur approprié. Et les résultats sont évidents. La modification et l'ajout de nouveaux éléments deviennent plus faciles et plus rapides grâce à plusieurs facteurs. Ce qui a pu prendre des heures peut prendre des minutes avec une architecture appropriée. Les entreprises n'aiment pas l'entendre, mais cela vaut la peine de suspendre les choses pour cela.

Scrum est un échec dans les environnements où les développeurs n'ont pas beaucoup d'emprise, OMI, car il est trop facile pour les types d'entreprises de vouloir ignorer la maintenance et les mises à jour en faveur de puces qu'ils peuvent mettre sur leurs listes "d'initiatives réussies" lorsque le temps de l'évaluation arrive. Ils favoriseront toujours leurs peaux et leur potentiel de promotion en faveur du long terme, même si cela les mord constamment dans le cul pour ignorer ces problèmes aussi.

Scrum est également une industrie motivée par le profit et d'autres encore. Les entreprises paient beaucoup d'argent pour la formation Scrum. Les personnes qui cherchent à adopter devraient se méfier de qui est commercialisé et à quel point cela sera vraiment réaliste dans leur culture.

Quoi qu'il en soit, si vous vous souciez vraiment du développement, une base de code merdique, une gestion avec de la cire dans les oreilles et des développeurs sans épines est une recette de misère et un environnement qui ne fera pas grand-chose pour améliorer vos compétences à tous égards utiles. N'hésitez pas à commencer à mettre en place des étapes à GTFO avant d'avoir réellement découvert si vos efforts pour résoudre le problème sont réellement payants.


En ce qui concerne le refactoring, je trouve étrange que les gens ne puissent pas `` intérioriser '' que le refactoring soit une partie constante de tout développement, pas quelque chose que vous avez à faire quand le problème est si grave qu'il n'y a pas grand-chose que vous pouvez faire.
nicodemus13

1
Ou vous n'avez pas de tests unitaires. :) L'un des principaux avantages des tests unitaires est qu'ils vous permettent de refactoriser en toute confiance. Le plus gros problème des bonnes pratiques est le même que tout - cela demande de la discipline et généralement les gens préfèrent être paresseux.
nicodemus13

2
C'est un autre cadeau de la foule des codeurs extrêmes qui peut tout aussi bien être transformé en un outil qui permet un mauvais comportement entre de mauvaises mains. Les tests automatisés sont utiles aux points clés, mais je préfère l'architecture sonore et l'écriture sur une interface plutôt qu'un test.
Erik Reppen

1
Je dirais que c'est la même chose pour tout, personnellement j'écris les tests pour aider à définir l'interface.
nicodemus13

1
Vient ensuite la douleur de tous les kludges à remettre en place car il y a ces petites exceptions qui peuvent ne pas être facilement détectées par l'analyse initiale.
JB King

33

Si vous faisiez vraiment Scrum, ce dont je doute, le Product Owner serait responsable de décider d'une réécriture. La plupart du temps, une réécriture n'est pas une bonne idée, btw, car elle ne produit aucune nouvelle fonctionnalité, n'introduit que de nouveaux bogues.

http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky
http://www.joelonsoftware.com/articles/fog0000000069.html

Pour développer "réécrire n'est pas une bonne idée":

Il est presque toujours préférable d'essayer une amélioration progressive. Comme Jarrod Robertson l'a écrit dans un commentaire, trouvez un module qui doit être amélioré devenez l'expert de ce module et écrivez une histoire pour le prochain sprint pour améliorer ce module particulier. Expliquez au propriétaire du produit pourquoi ce module a besoin de travail.


8
Si vous avez autant d'expérience et de sagesse que vous le prétendez, intensifiez-vous et soyez le gars qui comprend ce module défaillant, devenez l'expert en la matière et corrigez-le, puis préparez une analyse de rentabilisation pour la réécrire, car alors vous sera l' expert sur ce module.

3
Certains dégâts doivent être nettoyés. Citer des articles de Joel et affirmer que les réécritures se déroulent rarement sans statistiques qui seraient de toute façon douteuses (car qui se vante des réécritures réussies?) Ne change rien à cela.
Erik Reppen

3
@ErikReppen Alors, quand votre salon est en désordre, vous démolissez la maison et en construisez une nouvelle?
EricSchaefer

4
Si vous lisez ses commentaires, il ne parle pas du salon. Il est probablement difficile de dire où commence et se termine une pièce. Et toute la maison est en feu.
Erik Reppen

5
Whoa là, cowboy. Avant de faire une déclaration générale sur "la réécriture n'est pas une bonne idée", je pense que nous devons qualifier cela avec la vérité que le passage aux nouvelles technologies et l'adaptation à l'époque est essentiel pour la survie informatique de votre entreprise. Si vous n'adoptez pas de nouvelles technologies (espérons-le mieux) et les avantages qu'elles offrent, vos concurrents le feront. Cela est vrai de la technologie en général. Le Model-T était un véhicule parfaitement bon, mais grâce à la concurrence et à l'adoption de nouvelles technologies, les voitures ont été "réécrites" à plusieurs reprises dans les véhicules bien meilleurs que nous conduisons aujourd'hui.
blesh

18

Je vais être très direct ...

  • Êtes-vous en charge des développeurs dans ce métier?
  • Êtes-vous le chef de projet?
  • Quelle «participation» les développeurs détiennent-ils dans le projet?
  • Quelle est la justification de votre entreprise pour une réécriture?
  • En quoi la base de code la rend-elle entièrement inutile et irrécupérable?

Vous avez déclaré que vous veniez de commencer un travail, et pourtant vous semblez déjà être un maître de la situation là-bas. J'ai peut-être mal compris l'intention de votre question, mais j'ai l'impression que vous avez commencé un travail où vous voyez un certain nombre de problèmes, et vous avez sauté à la conclusion la plus simple dans laquelle le code est cassé et la seule voie à suivre est une réécriture, mais avez-vous vraiment considéré le coût pour votre employeur de le faire?

Avec n'importe quelle base de code existante - quel que soit l'état dans lequel il se trouve - le propriétaire aura généralement un investissement important dans les produits que le code représente. Il y a à la fois des coûts directs et indirects associés à la base de code, et une réécriture est souvent la toute dernière chose que vous voulez faire en tant que développeur de logiciel, car vous risquez de dévaluer vos actifs de code, et donc d'obtenir un rendement inférieur sur tous vos précédents efforts.

Prenons le système d'exploitation de Windows comme exemple. Avec chaque nouvelle version créée, un gros morceau de code a été reporté de la version précédente. Parfois, des bibliothèques et des API entières sont déplacées sur plusieurs générations d'OS. Pourquoi? Parce que les développeurs savent que ces éléments fonctionnent, ont été testés, corrigés et corrigés pour éviter les problèmes de sécurité et de mémoire, et parce qu'ils ont coûté très cher pour entrer dans cet état. Personne ne veut jeter le code de travail quand il leur rapporte de l'argent, même si les coûts de maintenance sont relativement élevés, le coût pour recommencer à zéro sera toujours plus élevé encore, et dans une entreprise comme le cas de Microsoft, ils ont des milliards à la banque qui leur permettre de recommencer depuis le début s'ils le souhaitent, mais ils ne le font pas t parce qu'ils veulent maximiser leur retour sur investissement. Votre employeur n'est pas différent de Microsoft, à l'exception du peu d'avoir des milliards en espèces à jeter sur un projet.

Le code est donc un gâchis, et il semble qu'il y ait des problèmes de communication et de limites entre les différents secteurs de l'entreprise. Que pouvez-vous ou vos collègues faire à ce sujet?

Une option consiste simplement à continuer comme l’a été l’équipe et à espérer un miracle à l’avenir. Ce n'est probablement pas une bonne idée et cela ne fera qu'augmenter votre frustration et votre stress.

Une meilleure option consiste simplement à vous arrêter et à faire votre travail, mais dans le cadre de cette recherche, recherchez des opportunités d'ajouter des tests pour prendre en charge les zones de code qui semblent être les plus fragiles, puis modifiez-les jusqu'à ce qu'elles deviennent plus stables. Vous aurez plus de facilité à faire un argument convaincant pour améliorer l'investissement de l'entreprise au lieu de vous contenter de tout jeter.

Une option encore meilleure consiste à être organisé en équipe et à vous assurer d'avoir quelqu'un avec assez d'ancienneté pour pouvoir présenter un bon dossier afin de permettre à l'équipe plus de flexibilité pour planifier du temps afin d'améliorer la base de code. Peu m'importe à quel point une entreprise est occupée ou à quel point le calendrier semble rigide, il y a toujours des «accalmies» occasionnelles dans l'activité qui peuvent être utilisées pour intégrer une amélioration ou deux. C'est encore mieux si les améliorations peuvent être apportées lors de l'exécution d'autres tâches. Si c'était moi, je serais en contact avec un manager et je leur présenterais les concepts de certains livres canoniques que les développeurs de logiciels lisent. Code propreest probablement celui dont votre équipe a le plus besoin. Plantez quelques graines sur la façon d'améliorer le code et donnez quelques exemples de ce que vous voulez dire. Un bon gestionnaire verra la valeur de l'ajout d'améliorations incrémentielles au code, surtout si vous êtes en mesure de décrire le concept de dette technique . Aidez votre chef d'équipe ou votre gestionnaire à faire une bonne analyse de rentabilisation pour améliorer le code, et ils auront une meilleure motivation pour agir en conséquence.

Il ne suffit pas non plus de dire "le code est en désordre". Vous devez encourager vos collègues à pratiquer le codage propre tout le temps et à utiliser une technique de codage propre pour encourager un peu de rangement au fur et à mesure. J'ai une petite affiche que j'imprime et que je suspends au mur de mon bureau chaque fois que j'entreprends un nouveau travail. Il dit "Efforcez-vous toujours de laisser le code un peu plus beau que vous ne l'avez trouvé". Juste à côté, j'ajoute un autre qui dit "Les lys n'ont pas besoin d'être dorés". Ils me rappellent tous les deux que je devrais toujours essayer d'améliorer ce que je trouve, mais éviter simplement de plaquer l'or un problème avec un autre. Les réécritures massives sont souvent le pire type de "dorure", car elles sont souvent effectuées pour de mauvaises raisons. Bien sûr, une toute nouvelle version du produit pourrait être justifiée à un moment donné,


Non, je ne suis pas en charge. Je suis un développeur qui a codé 12 ans professionnellement et 7 ans .NET. J'ai été sur de nombreux contrats et après un certain temps, vous pouvez rapidement vous faire une idée de la qualité du code. Combien de «mise»? Je ne sais pas ce que vous entendez par là. Nous pouvons continuer à brancher la fixation de l'ancien ASP CLASSIQUE qui est maintenant extrêmement fragile et prendre 10 fois plus de temps que si ces changements faisaient partie d'une bonne architecture moderne. La justification commerciale est que le site plante maintenant en production en raison d'un module que personne ne semble comprendre en raison du chiffre d'affaires élevé
punkouter

Je ne pense pas que vous compreniez à quel point cette base de code est mauvaise. En plus de cela, ce n'est pas la science de la fusée. Il s'agit de CRUD 101. Il affiche un formulaire, permettant à un utilisateur de le remplir, de valider puis de créer des rapports et des PDF à partir des données. C'est fondamentalement ça. Mais en 10 ans, le code a été fragmenté en tant de morceaux, c'est affreux. J'ai fait partie d'une vingtaine de projets au cours des 12 dernières années et cela doit être la pire collection de code que j'ai vue qui soit réellement utilisée dans la production ... J'aimerais pouvoir tout vous montrer
punkouter

Ce que je fais pour les débutants, c'est de trouver les personnes de l'équipe qui ont une certaine passion pour le codage et qui sont intéressées à faire enfin partie de cela. Il n'est pas facile de trouver ces personnes à cause de ... brucefwebster.com/2008/04/11/…
punkouter

16
@punkouter: Je ne pense pas que vous compreniez le point soulevé ici; La base de code étant "mauvaise" n'est pas une analyse de rentabilisation pour une réécriture. Avoir de la passion pour le codage et vouloir faire les choses correctement n'est pas une affaire pour une réécriture. Bogues et pannes de production coûteux, et prenant des mois pour mettre en œuvre de nouvelles fonctionnalités triviales mais importantes - Celles-ci fournissent une analyse de rentabilisation pour une réécriture.
Michael Borgwardt

1
@punkouter Votre lien vers une description du phénomène "Mer Morte" est également particulièrement adapté. Il n'est d'aucune valeur pour l'entreprise de perdre des connaissances par attrition et de grande valeur pour récupérer ce qu'elle peut. Un investissement de votre temps pour éviter une réécriture potentiellement coûteuse et inutile a une plus grande valeur commerciale que la perte de connaissances et d'expertise. Encourager de meilleures pratiques d'embauche et relever le défi de réduire le problème et d'améliorer le système est une opportunité pour vous de gagner un peu de courage et de devenir un atout précieux pour votre employeur.
S.Robins

13

Voici la définition officielle de l' équipe de développement Scrum du guide Scrum officiel . Je mets l'accent sur les parties qui vous concernent directement:

L'équipe de développement est composée de professionnels qui effectuent le travail de livraison d'un produit incrémenté potentiellement «libérable» à la fin de chaque sprint. Seuls les membres de l'équipe de développement créent l'incrément. Les équipes de développement sont structurées et habilitées par l'organisation à organiser et gérer leur propre travail . La synergie qui en résulte optimise l'efficience et l'efficacité globales de l'équipe de développement. Les équipes de développement ont les caractéristiques suivantes:

  • Ils s'auto-organisent. Personne (pas même le Scrum Master) ne dit à l'équipe de développement comment transformer le backlog de produit en incréments de fonctionnalités potentiellement libérables;

  • Les équipes de développement sont interfonctionnelles, avec toutes les compétences en équipe nécessaires pour créer un incrément de produit;

  • Scrum ne reconnaît aucun titre pour les membres de l'équipe de développement autre que développeur, quel que soit le travail effectué par la personne; il n'y a pas d'exceptions à cette règle;

  • Les membres individuels de l'équipe de développement peuvent avoir des compétences spécialisées et des domaines de concentration, mais la responsabilité appartient à l'équipe de développement dans son ensemble; et,

  • Les équipes de développement ne contiennent pas de sous-équipes dédiées à des domaines particuliers tels que les tests ou l'analyse commerciale.

L'équipe de développement est donc responsable de son propre gâchis et doit s'en occuper elle-même, sans avoir à demander à personne en dehors de l'équipe.

Incluez un délai de règlement technique de la dette dans chacune de vos estimations futures et assurez-vous que la qualité du logiciel que vous livrez est de premier ordre.

Si vous devez vraiment faire une réécriture complète, vous devez résoudre le problème lors de la rétrospective Scrum. Le Product Owner peut éventuellement annuler le projet et en démarrer un nouveau. Le Product Owner est également le seul à pouvoir annuler un sprint.


8
L'équipe est responsable de son propre gâchis, mais elle n'a pas le choix entre la priorité de la dette technique et les nouvelles fonctionnalités. C'est le propriétaire du produit qui décide de cela. C'est juste que, une fois que l'OP a décidé de la priorité de l'arriéré, l'équipe peut décider comment le livrer. Ils peuvent dire «nous ne pouvons pas fournir la fonctionnalité X sans refactoriser d'abord Y», mais ils ne peuvent pas dire «non, désolé, nous n'ajouterons aucune nouvelle fonctionnalité avant de la réécrire à partir de zéro».
Bryan Oakley

6
@BryanOakley: Réécrire à partir de zéro n'est pas ce que je suggère. Je propose de réduire progressivement la dette technique au fur et à mesure que l'équipe de développement travaille sur les domaines concernés. Et je suggère également qu'ils estiment en conséquence.

1
C'est bien, mais si nous avons besoin de nouveaux serveurs, de nouvelles bases de données, de nouveaux logiciels pour que les développeurs aient tous les outils dont nous avons besoin pour faire la réécriture? ET comment la réécriture commence-t-elle lorsque les seules «histoires» concernent la résolution des problèmes actuels et jamais le concept d'autoriser une réécriture?
punkouter

1
@punkouter: si vous devez réécrire, résolvez le problème lors de la rétrospective Scrum. Le Product Owner prendra alors la responsabilité d'annuler le projet en cours et d'en démarrer un nouveau.

5
Ne présumez pas que la décision de réécrire est la «bonne» juste parce que c'est celle qui fait le plus appel aux développeurs. Parfois, il existe une bonne raison commerciale de proposer des fonctionnalités maintenant, même si cela va augmenter la dette technique.
DJClayworth

8

Comme vous le décrivez, je dois dire que je ne vois rien qui ait quoi que ce soit à voir avec SCRUM, ou votre équipe de développement de produits est actuellement un problème .

C'est normal

Ce que vous décrivez est l' entropie normale d'une base de code. Dans votre cas, l'équipe a probablement commencé plus loin de l'idéal, mais chaque base de code devient finalement une grosse boule de boue .

Dans un tout parfait greenfield scénario, tout ce que vous pouvez éventuellement faire est de commencer plus loin de l' entropie et mouvement absolu vers elle plus lente.

Je suis d'accord avec les autres, le désordre de la base de code est dû aux développeurs. Je suis sûr qu'il est antérieur à l'adoption de SCRUM de nombreuses années.

Ce n'est pas une décision technique ou de développement de réécrire, c'est une décision commerciale.

Vous ne savez pas pourquoi les propriétaires de produits ne veulent pas de réécriture. En tant que développeur, vous pensez que cela est nécessaire, mais existe-t-il vraiment une analyse de rentabilité pour cela?

S'il existe une véritable analyse de rentabilisation , pas seulement une main agitant; "le code est un gâchis hérité, je veux commencer sur le terrain parce que c'est ce que je veux" , alors la direction devrait supporter les frais d'une réécriture, compte tenu d'un retour sur investissement.

Vous n'avez pas donné une analyse de rentabilisation solide pour une réécriture, juste une diatribe sur votre opinion sur la façon dont tout le monde a causé ce gâchis et vous ne voulez pas y faire face.

Preuve - Le profit conduit les décisions commerciales à lancer des logiciels fonctionnels, pas un besoin d' OCD pour une base de code propre

Si vous pouvez vraiment montrer la preuve , pas seulement la théorie, mais la preuve tangible que dépenser de l' Xargent pour une réécriture entièrement nouvelle sera garanti pour faire des X * N dollars pour l'entreprise dans le Ydélai (où Nest élevé et Ycourt), vous pourriez obtenir une certaine traction de la direction . Il s'agit d'un cas hautement improbable que vous pouvez présenter et prouver.

Sinon, il vous suffit de vous en occuper, c'est la réalité. Contrairement à vos affirmations catégoriques selon lesquelles il n'y a absolument aucune voie à suivre sans cette réécriture immaculée, je parierais que dans 5 ans ou plus, la base de code dont vous vous plaignez fonctionnera et fonctionnera quelque part en fournissant à quelqu'un des fonctionnalités et de la valeur longtemps après vous avez quitté l'entreprise.


1
cela ne signifie pas que ce n'est pas la responsabilité des développeurs d'utiliser un système de contrôle de version en interne , je dirais que c'est toujours la responsabilité des développeurs de prendre soin d'eux-mêmes et de leurs meilleurs intérêts. Dans votre homme de paille, ces 200 développeurs n'ont pas fait ce qu'ils devaient faire, la direction n'a pas mis un pistolet sur leur tête et leur a interdit de mettre en place le système de contrôle de version eux-mêmes.

3
Les bases de code en désordre ne sont jamais le résultat direct de la gestion, car la direction n'est jamais directement responsable de l'écriture du code. C'est si simple. Manangement est responsable d'avoir et de favoriser un environnement de travail moins qu'idéal pour les développeurs, mais la responsabilité de résoudre des problèmes tels qu'un manque de contrôle de version incombe toujours à ceux qui font le travail réel.
Peter Lange

1
Les développeurs externalisés sont un problème de gestion. Les gens de l'intérieur savaient mieux. La direction aimait prétendre qu'elle économisait beaucoup d'argent en embauchant 200 développeurs alors qu'en fait, ils auraient probablement pu faire du bien avec 20 compétents. Tout comme beaucoup d'implémentations Scrum que j'ai vues, la stratégie adoptée était le produit de l'incompétence et rien sur lequel les développeurs qui étaient en fait des employés de l'entreprise n'avaient aucun contrôle.
Erik Reppen

2
@Erik, sans dire que les managers n'ont pas à assumer la responsabilité d'une mauvaise base de code (ou de toute autre mauvaise décision prise dans leur département) et que les managers ne sont pas directement responsables de fournir l'environnement dans lequel le développeur travaille, tel que le scénario que vous avez décrit. Mais la seule personne qui peut être directement responsable de la base de code est la personne qui écrit le code lui-même.
Peter Lange

3
Je voudrais également ajouter qu'il est stupide de ne pas mettre vos développeurs au courant des objectifs de l'entreprise. Je n'ai jamais compris pourquoi les gens sont si déterminés à cacher ces choses aux gens qui déterminent réellement le comportement de leur produit. Connaître les objectifs à long terme d'une entreprise peut en fait éclairer la façon dont vous concevez une application. De plus, les développeurs, bons du moins, résolvent les problèmes. Ils résolvent constamment des problèmes. Certains d'entre nous les anticipent et les résolvent à l'avance dans nos têtes ou du moins laissent les bonnes portes ouvertes dans notre code.
Erik Reppen

7

Je suis généralement sceptique lorsque les gens réclament de "grosses réécritures". Il y a des cas où cela a du sens, mais la plupart du temps, ce code hérité a de la valeur (en ce sens qu'il est déjà en production et utilisé aux fins qui ont inspiré sa création). Effectuer une grosse réécriture est dans bien des cas l'opposé de l'agile. Combien de temps faudrait-il pour amener la nouvelle version de l'application à un point où elle peut remplacer de manière viable l'application existante.

L'approche que je préfère est ce que Martin Fowler appelle la vigne étranglante . Implémentez de nouvelles fonctionnalités (y compris les modifications apportées aux fonctionnalités existantes) en utilisant la nouvelle approche, mais utilisez l'application existante comme un treillis sur lequel la nouvelle fonctionnalité peut évoluer. Cela vous donne le meilleur des deux mondes, vous n'avez pas à tout arrêter pendant que la grande réécriture est mise à jour, mais vous avez l'avantage d'écrire du nouveau code qui tire parti des cadres mis à jour. C'est certainement une approche plus difficile que de commencer propre et peut-être pas aussi sexy, mais cela offre plus de valeur à l'entreprise que de jeter tout ce qui est là parce que c'est obsolète.


Cela peut être difficile si la base existante est assez désordonnée. Il parle de plusieurs systèmes asp.net hérités par des auteurs complètement différents étroitement couplés ensemble pour le même putain de site. Les formulaires Web seuls sont un monstre et je suis sûr que c'est dans le mélange.
Erik Reppen

Oh, je n'ai jamais dit que ce serait la voie la plus facile ... mais c'est plus acceptable pour les parties prenantes. En outre, en le parcourant une fois, j'espère que vous vous assurerez que lorsque le plus récent et le plus grand d'aujourd'hui deviendra obsolète de demain, il sera plus facile de l'éliminer.
Michael Brown

Je suis d'accord. Mais comme Ive l'a dit (et je ne suis pas sûr que tout le monde soit ici), ce qui existe maintenant est une collection d'environ 9 applications Web séparées, la moitié étant Classic ASP et l'autre moitié étant des formes différentes d'ASP.NEt. Tout en utilisant des moyens totalement différents pour gérer l'accès aux données, etc. Donc, la seule façon de faire ce dont on parle est de simuler l'interface utilisateur pour ressembler au nouveau code fait partie de l'ancien code .. alors oui peut-être .. mais alors il y a un la base de données .. Une table a 400 champs!
punkouter

Je suis curieux. Que représente ce tableau? C'est la pire chose dont j'ai entendu parler depuis que j'ai vu i ++; doSomething (i); répété plus d'une douzaine de fois dans un code qui a débordé d'une balise JSP éclatée.
Erik Reppen

5

Où je suis et comment nous travaillons, voici ce que nous ferions: écrire une nouvelle histoire et la remettre au propriétaire du produit, qui décidera ensuite de la manière de la hiérarchiser. Un exemple serait: "En tant que développeur du produit X, je voudrais réécrire le code dans ce domaine afin que le développement futur soit plus efficace" Les critères d'acceptation devraient alors être dans le sens de: Réécriture / refactorisation x pour que ce soit mieux de cette façon.

Je ne connais pas la situation dans laquelle vous vous trouvez, mais ici, si nous voulions recommencer à zéro, il s'agirait de s'asseoir avec le propriétaire du produit et de le persuader pourquoi, puis d'écrire une pile d'histoires pour recréer l'existant fonctionnalité.

Les autres choses que nous avons faites pour essayer de gérer le code incorrect et / ou hérité ont été d'inclure des tâches de retravaillage lors de la tâche des user stories.


Ainsi, les développeurs peuvent écrire des «histoires» et les soumettre? Le problème est d'expliquer les raisons de la réécriture est trop technique pour eux de gérer ... Tout ce que je peux dire est .. "Le code actuel est difficile à gérer et casse" ..
punkouter

6
@punkouter: si les raisons de vouloir réécrire sont purement techniques (c'est-à-dire qu'elles ne coûtent pas de l'argent à l'entreprise), alors vous N'AVEZ PAS de raison suffisante pour réécrire.
Michael Borgwardt

@MichaelBorgwardt: Êtes-vous en train de dire que des raisons techniques ne sont jamais suffisantes pour réécrire quelque chose? C'est une approche fondamentalement brisée, si je vous comprends bien. Une chose qui me préoccupe continuellement est l'approche normale maître / esclave selon laquelle «l'entreprise» détermine tout ce que «l'informatique» ou tout autre service fait. Cela n'est vrai que dans une certaine mesure. L'informatique a ses propres exigences qui sont internes et ne sont pas décidées par l'entreprise - c'est une chose qui manque généralement et conduit à des logiciels non conçus et non adaptés à l'usage.
nicodemus13

1
@ user12355 Comme je l'ai vu, le point Michaels est que s'il ne leur fait pas perdre d'argent, il ne leur fera pas d'argent, alors il n'y a jamais de cas. S'ils ne perdent pas d'argent, une réécriture leur coûte de l'argent. L'argent qui ne peut pas être récupéré. Un développeur pourrait faire valoir que «ce code est nul» mais à moins qu'il ne puisse prouver un avantage financier à son employeur, il n'obtiendra jamais le feu vert pour réécrire à moins qu'il ne le fasse par lui-même.
Rig

1
@ user12355: Des raisons techniques sont certainement suffisantes pour une user story. Ils ne sont pas nécessairement suffisants pour que cette histoire soit promue en haut de la liste et placée dans un sprint.
Adam V

4

Décider de grandes réécritures est une décision commerciale. Vous pouvez essayer d'influencer les décisions commerciales en vendant de votre point de vue aux personnes responsables de la partie commerciale des choses.

Toutefois; le changement de la qualité du code d'une itération à l'autre est une décision du développeur. Si vous laissez la qualité du code décliner, vous ajoutez une dette technique afin de répondre aux attentes du propriétaire du produit maintenant. Ce que vous pouvez faire, c'est commencer à assumer la responsabilité du code que vous écrivez et vous assurer qu'il améliore la base du code, et non l'inverse. Maintenant, cela signifie que vous perdrez de la vitesse, car vous diminuez continuellement le montant de la dette technique et votre propriétaire de produit sera sûrement déçu. Vous pouvez essayer d'expliquer que dans votre empressement à plaire, vous avez laissé la qualité du code se dégrader et vous prenez maintenant des mesures pour corriger ce problème.

Maintenant, je me rends compte que c'est une étape terrifiante à prendre, et il pourrait être tentant de la retarder d'un sprint de plus afin que vous puissiez sortir la fonctionnalité X avant une échéance importante. Malheureusement, cela deviendra plus difficile plus vous attendez.

Soit dit en passant, ce n'est pas strictement un problème Scrum, et je ne propose pas non plus une solution spécifique à Scrum. Il s'agit de développeurs s'appropriant le code.


1
Bon et quand vous avez une histoire de 10 ans de chiffre d'affaires constant et ponctuels de développeurs qui ne pouvaient clairement pas bien coder ou comprendre l'architecture moderne alors .. vous avez ce que j'ai maintenant ... Je suis plus alarmé que quiconque depuis que je Je suis nouveau dans le métier et je n'ai pas l'habitude de voir un niveau de code aussi bas .. Je veux la réécrire non seulement pour mon désir égoïste de profiter de l'écriture d'un nouveau bon code .. mais pour le bien de tout le monde aussi ... même si ils ne comprennent pas la situation comme moi.
punkouter

1
Je ne peux que répéter ce qui a déjà été dit; Formellement, vous ne pouvez pas décider que le moment est venu pour la grande réécriture. Je suppose que vous pourriez essayer de montrer aux parties prenantes combien d'efforts il faut pour transformer progressivement votre base de code en un état un peu moins douloureux, et le comparer à l'effort qu'il faut pour effectuer une réécriture complète.
Buhb

3

Les développeurs sont chargés d'alerter le monde sur l'état actuel de la base de code. Cela peut se produire lors d'une mêlée quotidienne, d'une rétrospective ou simplement de manière informelle. Cela peut sembler évident, mais si vous n'exprimez pas clairement ce qu'est un gâchis et combien de temps vous en perdez, personne ne le remarquera jamais. Le Scrum Master sera généralement chargé de transmettre les informations au PO et aux personnes en charge du projet et de les persuader que quelque chose doit être fait, puis de faciliter la mise en œuvre d'une solution par l'équipe.

En remarque, une réécriture big bang n'est pas nécessairement l'OMI la bonne réponse à ce genre de problème. Quelle que soit la façon dont les développeurs en ont assez de la base de code actuelle, prendre de petites mesures mesurables vers une architecture plus propre est souvent une meilleure idée car vous pouvez voir les progrès, justifier votre travail en montrant régulièrement au PO les réalisations et continuer le flux d'implémentation d'un nouvel utilisateur histoires en parallèle plutôt que de se perdre dans une métamorphose sans fin, monopolisant les ressources.


Comme je l'ai mentionné .. Il n'y a aucun moyen d'aller de l'avant avec une collection de 6 sites ASP classiques + 4 sites .net 1.1 qui sont tous combinés en un seul site. Tous codés par différentes personnes de différentes manières.
punkouter

Je suis à peu près sûr que la base de code ira de l'avant, pour les années à venir, pour paraphraser le Dr Ian Malcom de Jurrasic Park "Je suis, je dis simplement que la gestion, euh ... trouve un moyen" .

Cela pourrait se produire dans les années à venir, mais les différentes saveurs des sites .net hérités étroitement couplés ne devraient pas aller très loin ces dernières années.
Erik Reppen

Bien sûr, mais si tous ces sites .net continuent de fonctionner et que leur fonctionnement continue de générer des revenus, directement ou indirectement, pour l'entreprise, pourquoi la dynamique en avant est-elle si importante? Lorsque les revenus sont directement impactés par la qualité de la base de code, vous pouvez croire que les gestionnaires ne perdront pas de temps à le repenser car ils ont tous des hypothèques à payer, tout comme les développeurs.
Peter Lange

L'élan incessant vers l'avant est généralement la racine du problème en premier lieu dans mon expérience. La douleur commence lorsque les attentes de redressement ne diminuent pas alors qu'elles font toujours la sourde oreille aux problèmes de l'architecture et pensent que Scrum va développer par magie de nouveaux ensembles de fonctionnalités complètes toutes les deux semaines sans exacerber davantage le problème. Je ne dis pas que nous ne devrions pas nous méfier de l'envie d'arracher des trucs si nous ne pouvons pas trouver d'alternatives qui résolvent les pertes de temps que nous rencontrons, mais j'ai vu au moins deux très bons cas pour les principaux refonte de ma carrière.
Erik Reppen

2

Tu as demandé:

Où est la partie dans Scrum où les développeurs peuvent avoir le pouvoir de dire que c'est assez et d'exiger qu'on leur donne le temps de commencer la grande réécriture? Nous semblons dans une boucle sans fin de simplement corriger l'ancien code avec «Stories». Donc, les choses sont dirigées par des personnes non techniques qui ne semblent pas vouloir pousser pour une réécriture parce qu'elles ne comprennent pas à quel point la base de code est devenue mauvaise.

En tant que gestionnaire et développeur, la réponse la plus simple à votre question est qu'il n'y a aucune partie dans Scrum, ou toute autre méthodologie, ou dans n'importe quel scénario d'entreprise, où le développeur a le pouvoir de dire assez c'est assez et d'exiger un récrire. Beaucoup de gens ici ont présenté de bons arguments valables pour expliquer pourquoi les réécritures sont souvent de mauvaises idées et pour expliquer comment le changement peut et doit être apporté de manière incrémentielle et agile. Et je suis d'accord avec eux tous.

Mais le résultat est encore plus simple. Vous ne pouvez jamais prendre cette décision, JAMAIS. Vous êtes l'employé, et la seule décision que vous pouvez vraiment prendre est "vais-je continuer à travailler pour ces asshats ou trouver un nouvel emploi qui redoute ma compétence folle". Votre nouvel emploi ne vous permettra pas non plus de prendre cette décision, mais au moins vous vous sentirez comme si vous contrôliez votre destin en passant d'un emploi à l'autre.


1
Si je lis correctement entre les lignes, il semble que vous soyez un peu amer à propos de votre incapacité à conserver les nouveaux employés. Si je ne me trompe pas, avez-vous considéré que les nouveaux embauchés dont les compétences sont en fait assez demandés pour qu'ils marchent lorsqu'ils n'aiment pas travailler dans votre entreprise sont les seuls non constants de l'équation?
Erik Reppen

1
Pas même près. En fait, les employés de mon service sont avec moi depuis quelques années maintenant. Je n'ai pratiquement aucun retournement. Ce que j'essaie de faire valoir, c'est qu'en fin de compte, dans n'importe quelle entreprise, dans n'importe quel secteur, le travail que l'employé effectue incombe entièrement à la personne qui signe le chèque de paie et non à l'employé. La seule décision que l'employé doit prendre, moi y compris lorsque mon patron en fait la demande, est de persister ou de ne pas persister dans la relation avec l'employé. L'affiche originale demandait quand, en tant qu'employé, pouvait-il dicter le développement. La réponse n'est jamais.
Peter Lange

Qu'en était-il alors de la caractérisation «Craignez mon skilz fou»? Ce mec est un développeur expérimenté. Et je peux vous dire, d'après mon expérience dans des situations similaires, que le problème dont il parle n'est pas seulement une question de vouloir les choses à sa manière, mais en fait une catastrophe en cours qui rend à la fois tout le monde misérable et coûte beaucoup plus cher à son employeur en termes de développement gaspillé. le temps et la rétention des talents qu'ils ne réalisent probablement.
Erik Reppen

1
Parce que j'illustrais la fausseté de l'argument de base, qui était enraciné dans l'ego (au sens psychologique). Ce n'est pas une question de savoir comment il est habile. Ce n'est pas une question de savoir comment le code est foiré. Ce n'est pas une question de ce que la méthodologie de développement peut faire pour lui. C'est une question de pouvoir. Le pouvoir de prendre des décisions dans une relation de travail appartient à l'employeur. Le seul pouvoir de décision d'un employé est d'annuler la relation lorsqu'elle devient trop lourde à porter.
Peter Lange

1
Je suis d'accord, Scrum est moche pour faire face à la dette technologique. Mais je ne suis pas d'accord sur le fondement de la question initiale. En fait, il posait une question sur la relation employeur / employé, mais vient de mentionner la mêlée dans la question. C'est comme si je demandais: "En tant que chrétien, quelle est la meilleure façon de faire une Enchillada?". Ce n'est pas vraiment une question théologique; c'est une question de cuisine même si j'ai fait l'erreur de penser que mes préférences religieuses étaient pertinentes.
Peter Lange

1

Je ressens votre douleur, mais je ne sais pas ce que cela a à voir avec Scrum. La décision de réécrire le code ne dépend pas du processus de développement.


Un processus de développement qui promet que les choses seront terminées toutes les deux semaines peut faire beaucoup pour empêcher le refactoring à grande échelle qui a été ignoré pendant des années. La première chose que j'ai remarquée dans l'entraînement de mêlée, c'est la façon dont ils glaçent le sujet de la dette technologique. Ce n'est pas excitant de déclarer que votre application est maintenant plus légère et plus méchante et que vous pouvez faire les choses plus rapidement. Les types d'entreprises veulent une valeur ajoutée visible qu'ils peuvent montrer à leurs amis et investisseurs.
Erik Reppen

1

Attends quoi?

Tu patches ? Vous devriez refactoriser . Respectez les valeurs agiles. Utilisez TDD et les pratiques appropriées et la situation finira par s'améliorer.

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.