Après avoir lu ceci, J'ai vu qu'il semble y avoir beaucoup de désaccords sur la façon dont les équipes agiles devraient être structurées au sein d'un groupe de développeurs avec des capacités variables (aka presque toutes les équipes). Tous les meilleurs développeurs devraient-ils être placés dans leurs propres équipes et recevoir le travail le plus prioritaire? Cela garantira à peu près que les tâches les plus importantes seront accomplies. Dans le même temps, vous vous retrouvez alors avec des équipes «moins que parfaites» ailleurs accumulant des dettes techniques, même si ce n'est que pour des tâches de faible priorité. D'un autre côté, des équipes uniformément réparties pourraient avoir l'avantage d'améliorer un peu vos développeurs en retard, mais ont le potentiel de démotiver vos frappeurs les plus lourds. De plus, si vous mélangez un tas de bons modèles de conception avec un tas de terribles anti-motifs, vous pouvez vraiment vous retrouver avec quelque chose qui pourrait aussi bien être un tas d'anti-motifs.
9
Réponses:
Il y a des risques connus avec A-Teams, mais si la dynamique est bonne, je pense que oui, je mettrais mes personnes les plus fortes sur les projets les plus importants avec le (s) développeur (s) junior (s) avec le plus de potentiel. Pour vos projets moins prioritaires, vous avez besoin d'un bon chef d'équipe si possible pour les empêcher d'aller trop loin. La dette technique va se produire quoi qu'il arrive. Toutes les dettes techniques ne sont pas égales; le coût / passif de la dette technique est proportionnellement à la valeur commerciale du projet en premier lieu. être.
la source
Je me souviens quand j'étais à l'université, un de nos professeurs nous a raconté une anecdote sur les structures des équipes (j'ai jeté un œil au document dont il parlait tout à l'heure mais je n'arrive pas à le trouver).
Fondamentalement, l'histoire s'est déroulée comme suit:
Un groupe de programmeurs a été divisé en groupes en fonction de leurs capacités, les pires programmeurs x étant regroupés, les x suivants regroupés, etc., et les meilleurs regroupés.
Ils ont tous été affectés à la même tâche et ont reçu un délai précis pour l'achever.
À la fin du calendrier, les organisateurs ont examiné les solutions aux tâches et, à leur grande surprise, ils ont découvert que la solution la plus performante venait de l'équipe composée de personnes moyennes. En revanche, l'équipe composée des programmeurs A * a fait l'une des pires solutions car ils ont passé tout leur temps à discuter de la meilleure solution .
Si vous avez besoin d'une équipe qui va faire avancer les choses, obtenez un tas de gars moyens et un gars dominant qui peut diriger, a été la conclusion de l'étude (si je me souviens bien), sinon les membres les plus dominants passeront plus de temps à se battre qu'à se faire trucs fait!
la source
La grande majorité des développeurs inexpérimentés peuvent ne pas être en mesure de proposer eux-mêmes des conceptions robustes et élégantes, mais ils peuvent le reconnaître et le comprendre quand ils en voient un. S'ils ne le peuvent pas, ils n'ont généralement ni l'aptitude ni la préparation pour être embauchés en premier lieu.
Il existe également des développeurs plus expérimentés qui sont capables de comprendre des conceptions de logiciels très complexes, mais qui n'ont pas la discrétion de savoir quand quelque chose de plus simple serait mieux.
D'après mon expérience, vous n'avez généralement des problèmes permanents avec des équipes mixtes que si elles contiennent des membres non préparés, des membres inutilement complexes, ou les deux. Sinon, si votre équipe a des problèmes, ils peuvent généralement être résolus avec une meilleure communication ou en attribuant des rôles appropriés.
la source
Regrouper les meilleures personnes en équipe unique peut sembler une excellente solution à court terme, mais c'est un échec à long terme et cela a des coûts supplémentaires. Par exemple, mon entreprise préfère que les gens apprennent de leurs collègues plus qualifiés plutôt que de payer pour les formations. Si vous séparez les meilleures personnes, elles ne pourront pas transférer leurs connaissances à des personnes moins qualifiées. À court terme, vos meilleures équipes peuvent bien performer, mais faute de transfert de connaissances, le nombre de personnes qualifiées n'augmentera pas. Il est préférable d'avoir une équipe moins performante au début et d'augmenter les performances de toutes les équipes à mesure que les gens deviennent plus qualifiés.
De plus, que se passe-t-il si des personnes qualifiées décident de partir? Qui prendra leurs projets?
Un autre point est que l'équipe doit être composée de personnes ayant des compétences différentes. Vous aurez toujours des tâches faciles (et des tâches ennuyeuses) qui sont trop chères pour être effectuées par les développeurs les plus expérimentés.
la source
Ceux qui ne peuvent pas enseigner le font ...
Je pense qu'il y a plus de facteurs à considérer.
Vous obtiendrez le plus de valeur en distribuant ceux qui peuvent enseigner en tant que chefs d'équipe. Ils peuvent enseigner aux autres membres de l'équipe et contribuer à améliorer la qualité de leur travail.
Tous les programmeurs seniors ne feront pas de bonnes pistes. Cette capacité à communiquer des informations est une compétence en soi. Cette compétence n'est pas quelque chose qui se développe à travers l'expérience de programmation. Il se développe à travers l'enseignement et l'explication.
la source
L'affectation d'une équipe «A» présente deux problèmes importants. La première est la compatibilité. Avoir des équipes qui s'entendent et travaillent bien ensemble est beaucoup plus important que leur «capacité». Maintenant, cela peut être deux programmeurs de compétences "élevées", deux programmeurs de compétences "faibles" ou un mélange. Le fait qu'ils puissent bien travailler ensemble signifie qu'ils seront plus productifs.
Le deuxième numéro concerne la croissance. Deux programmeurs de compétences «faibles» n'apprendront pas beaucoup les uns des autres, à part les mauvaises habitudes. De même, deux programmeurs "hautement qualifiés" n'apprendront pas beaucoup l'un de l'autre. Cependant, mélanger les niveaux de compétence «faible» et élevé «aidera à améliorer les capacités de la compétence« faible ». Ils amélioreront également les capacités des compétences« élevées ». Comment? Je ne considère pas une compétence "maîtrisée" tant que vous ne pouvez pas l'enseigner à quelqu'un d'autre.
la source
De l'autre côté de la médaille, je pense qu'il est logique de garder des équipes qui peuvent "suivre" les uns avec les autres. Vos programmeurs de type A-Team ne veulent pas attendre sur les types B-Team pour faire leur part. Vos types B-Team peuvent être intimidés par le flux de travail de style A-Team.
la source