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:
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.
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:
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:
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.