Couper la pile de développement - en diagonale?

11

Nous avons un nouveau projet en cours, et pour le moment, les développeurs ont été divisés en deux équipes, l'équipe A et l'équipe B. Ce projet comporte 2 parties qui nécessitent un développement tout au long de la pile de développement. Échantillon très simplifié de notre pile ci-dessous:

entrez la description de l'image ici

Chaque partie du projet nécessite un développement sur l'ensemble de la pile, donc je m'attends généralement à une approche de développeur de pile complète, c'est ainsi que nous avons divisé notre travail au sein de l'équipe B, conçu et élaboré les interactions entre les différentes parties.

entrez la description de l'image ici

J'ai récemment appris cependant que l'équipe A veut être en charge de certaines parties de la pile, et ils proposent une division entre les deux équipes, où la couche d'abstraction des données (et la mise en contenu dans la couche de données) est gérée par eux-mêmes sans développement de l'équipe B. Le fossé ressemblerait à quelque chose comme ça:

entrez la description de l'image ici

Pour moi, cela semble très naturel. Chaque équipe a des objectifs et des délais différents pour atteindre ces objectifs, mais l'équipe B dépendra de l'équipe A pour implémenter les fonctionnalités. La solution proposée est que les interfaces communes soient définies à l'avance (il y a probablement une échelle de temps de 2 ans sur le projet donc elles pourraient être nombreuses). L'équipe A développera ensuite les bits requis pour ces interfaces très tôt malgré ses propres objectifs, tandis que l'équipe B bloquera tous les appels pour le court terme immédiat afin de pouvoir progresser.

Je suis préoccupé par cette approche concernant:

  • Les interfaces peuvent changer et l'équipe A peut ne pas avoir la bande passante ou le temps pour s'adapter à l'évolution des besoins.
  • Les bogues dans le code de l'équipe A pourraient empêcher la progression de l'équipe B, et encore une fois, ils peuvent ne pas être la priorité pour les corriger car l'équipe A a une file d'attente de priorisation différente.
  • Manque de connaissances réparties entre les équipes - L'équipe B peut ne pas comprendre pleinement ce qui se passe sous le capot et peut prendre de mauvaises décisions de conception à cause de cela.

Il a été suggéré que de nombreuses entreprises de l'industrie ont des sous-équipes et doivent être en mesure de gérer cela. D'après ma compréhension, les équipes sont généralement divisées comme je l'avais initialement prévu (Full Stack) ou en décomposant la pile technologique comme ci-dessous:

entrez la description de l'image ici

Je souhaite donc savoir ce que fait le reste de l'industrie. La plupart des divisions sont-elles verticales / horizontales? Une division diagonale a-t-elle un sens? Si une division diagonale devait se produire, mes préoccupations semblent-elles valables et y a-t-il autre chose dont l'équipe B devrait s'inquiéter? A noter que je vais probablement être tenu pour responsable du succès ou de l'échec de l'équipe B.

Ian
la source
10
Le «reste de l'industrie» fait probablement toutes les combinaisons de divisions auxquelles vous pouvez penser. Mais honnêtement, vous ne nous avez pas dit pourquoi l' équipe A voulait être en charge. Et cela fait une différence dans la taille de vos équipes et si elles sont également qualifiées.
Doc Brown
Dans votre troisième illustration, le travail de l'équipe A et de l'équipe B est-il séparé par une API distincte? Y a-t-il une frontière claire et logique imposée par cette ligne de division? La division du travail n'est pas exactement une chose nouvelle; Par exemple, Stack Exchange a son propre concepteur.
Robert Harvey
@DocBrown Je crois que l'équipe A veut être en charge parce qu'ils ont l'impression que «trop de cuisiniers gâchent le bouillon» après un échec d'un projet précédent avec une équipe plus grande - mais je ne sais pas vraiment avec certitude. Les équipes sont composées d'environ 5 développeurs chacune et ont une compétence raisonnablement égale.
Ian
1
Si vous ne parvenez pas à les convaincre d'une séparation verticale, vous voudrez peut-être que l'équipe A s'engage à traiter les demandes de l'équipe B avec une priorité plus élevée en tant que leurs propres demandes. Cela pourrait empêcher le blocage et le mauvais sang, et semble un prix raisonnable à payer.
Hans-Peter Störr
1
@hstoerr: Fait intéressant, c'est exactement ce que l'alliance Scrum suggère. Une équipe de composants consommatrice (l'équipe de composants qui utilise ou "consomme" les produits livrables des autres équipes de composants) agit en tant que propriétaire du produit de l'équipe de producteurs. extrait de scrumalliance.org/community/articles/2012/september/…
Ian

Réponses:

12

Vos préoccupations sont extrêmement valables. Surtout les deux premiers points à propos de l'équipe A n'ayant pas le temps d'ajouter des fonctionnalités ou de corriger des bogues qui affectent l'équipe B. J'ai vu cela se produire à plusieurs reprises dans mon propre travail.

Cela pourrait être une bonne idée si:

  • Il est connu que l'équipe A travaillera sur les projets qui nécessitent de nouvelles fonctionnalités dans la base de données, tandis que l'objectif de l'équipe B est essentiellement de ne faire que "des fonctionnalités frontales". Par exemple, si l'équipe B écrit la nouvelle application iPhone de votre entreprise, il est probable qu'elle n'ajoutera pas de nouveaux champs de base de données pendant un certain temps, car elle doit porter / réimplémenter toutes les fonctionnalités de la version de bureau.

  • La «pile complète» est devenue suffisamment complexe pour qu'aucun développeur (ou équipe de développeurs) ne puisse «s'approprier» le tout. Par «propre», je veux dire non seulement ajouter des fonctionnalités et corriger des bugs, mais comprendre et prendre soin de l'ensemble du système au point qu'ils peuvent éviter d'y ajouter plus de dettes techniques au fil du temps. Dans ce cas, la division "diagonale" est la décision judicieuse si l'équipe A possède une interface utilisateur / API Web qui est extrêmement simple ou inévitablement étroitement couplée à la mise en œuvre de la base de données / DAL (peut-être certains outils de diagnostic internes?), Tandis que l'équipe B le fait toutes les choses compliquées de l'interface utilisateur.

  • La direction comprend le risque que l'équipe A devienne un goulot d'étranglement et serait prête à dé-diagonaliser les choses si ou quand ce risque se transforme en véritable problème.

Je ne peux pas parler de ce qui est plus ou moins courant dans l'industrie, mais au moins là où je travaille, il est clair que tous les développeurs d'applications doivent être "full stack". Ce que nous avons, ce sont des équipes "d'infrastructure" qui développent / maintiennent notre base de données interne, notre cadre de service Web et notre cadre d'interface utilisateur (ai-je mentionné que ma société est énorme?), Afin que toutes nos centaines d'applications puissent avoir une pile complète devs alors que l'entreprise dans son ensemble peut toujours fournir des performances et une interface utilisateur cohérentes à tous nos services.

Récemment, notre société a créé un tout nouveau cadre d'interface utilisateur, il y a donc eu une période où certaines de nos nouvelles applications ont été très mal bloquées contre les bogues et les fonctionnalités manquantes dans le nouveau cadre. Ce n'est plus le cas, principalement parce que certains d'entre nous ont été autorisés à soumettre des demandes de tirage à l'équipe qui possède le framework (pas tout à fait "dé-diagonalisation", mais vous avez l'idée).

Ixrec
la source
2
Sur votre deuxième point, cela semble vrai pour toute application d'entreprise de taille raisonnable. Les bibliothèques avec des API bien définies semblent être les limites logiques, à condition qu'elles ne soient pas trop grandes.
Robert Harvey