Dans quelles circonstances - le cas échéant - l'ajout de programmeurs à une équipe accélère-t-il réellement le développement d'un projet déjà en retard?
Les circonstances exactes sont évidemment très spécifiques à votre projet (par exemple, équipe de développement, style de gestion, maturité du processus, difficulté du sujet, etc.). Afin de mieux définir cela afin que nous puissions en parler dans autre chose que des simplifications excessives, je vais reformuler votre question:
Dans quelles circonstances, le cas échéant, l'ajout de membres de l'équipe à un projet de développement logiciel en retard entraîne une réduction de la date d'expédition réelle avec un niveau de qualité égal à celui si l'équipe existante était autorisée à travailler jusqu'à la fin?
Il y a un certain nombre de choses qui, selon moi, sont nécessaires , mais pas suffisantes, pour que cela se produise (sans ordre particulier):
L'une des premières choses à discuter est de savoir si la date d'expédition peut être glissée, si les fonctionnalités peuvent être coupées et si certaines combinaisons des deux vous permettent de satisfaire la libération avec votre personnel existant. Plusieurs fois, ce sont quelques fonctionnalités qui monopolisent vraiment les ressources de l'équipe qui ne fourniront pas une valeur égale à l'investissement. Alors, examinez sérieusement les priorités de votre projet avant toute autre chose.
Si le résultat du paragraphe ci-dessus n'est pas suffisant, consultez la liste ci-dessus. Si vous avez détecté le bordereau de calendrier tôt, l'ajout des bons membres de l'équipe au bon moment peut sauver la version. Malheureusement, plus vous vous rapprochez de votre date d'expédition prévue, plus les choses peuvent mal se passer avec l'ajout de personnes. À un moment donné, vous traverserez le "point de non-retour" où aucune quantité de changement (autre que l'expédition de la branche de développement actuelle) ne peut enregistrer votre version.
Je pourrais continuer encore et encore mais je pense que j'ai touché les points principaux. En dehors du projet et en termes de carrière, de réussite future de l'entreprise, etc. l'une des choses que vous devez absolument faire est de comprendre pourquoi vous êtes en retard, si quelque chose aurait pu être fait vous alerter plus tôt et quelles mesures vous avez besoin à prendre pour l'empêcher à l'avenir. Un projet tardif se produit généralement parce que vous étiez:
J'espère que cela pourra aider!
Cela n'aide que si vous avez un projet axé sur les ressources.
Par exemple, considérez ceci:
Vous devez peindre une grande affiche, disons 4 par 6 mètres. Une affiche aussi grande, vous pouvez probablement mettre deux ou trois personnes devant elle et les faire peindre en parallèle. Cependant, placer 20 personnes devant ne fonctionnera pas. De plus, vous aurez besoin de personnes qualifiées, sauf si vous voulez une affiche merdique.
Cependant, si votre projet consiste à bourrer les enveloppes de lettres prêtes à imprimer (comme Vous POURRIEZ avoir gagné!), plus vous ajoutez de personnes, plus vite cela va. Il y a des frais généraux dans le fait de distribuer des piles de travail, donc vous ne pouvez pas obtenir d'avantages sociaux au point où vous avez une personne seule. enveloppe, mais vous pouvez bénéficier de bien plus que de 2 ou 3 personnes.
Donc, si votre projet peut facilement être divisé en petits morceaux, et si les membres de l'équipe peuvent se mettre à jour rapidement (comme ... instantanément), ajouter plus de personnes le fera avancer plus rapidement, jusqu'à un certain point.
Malheureusement, peu de projets sont comme ça dans notre monde, c'est pourquoi le conseil de docgnome sur le livre Mythical Man-Month est un très bon conseil.
Peut-être que si les conditions suivantes s'appliquent:
Je vous ferai savoir la première fois que je vois tout cela en même temps.
Selon le Mythical Man-Month, la raison principale pour laquelle des personnes sont ajoutées à un projet tardif le fait plus tard est la surcharge de communication O (n ^ 2).
J'ai rencontré une exception principale à cela: s'il n'y a qu'une ne personne sur un projet, c'est presque toujours condamné. L'ajout d'un second accélère presque à chaque fois. C'est parce que la communication n'est pas overhead dans ce cas - c'est une occasion utile de clarifier vos pensées et de faire moins d'erreurs stupides.
De plus, comme vous le saviez évidemment lorsque vous avez posté votre question, les conseils du Mythical Man-Month ne s'appliquent qu'aux projets tard. Si votre projet n'est pas déjà en retard, il est fort possible que l'ajout de personnes ne se fasse pas plus tard. En supposant que vous le fassiez correctement, bien sûr.
Si les programmeurs existants sont totalement incompétents, l'ajout de programmeurs compétents peut être utile.
Je peux imaginer une situation où vous aviez un système très modulaire, et le ou les programmeurs existants n'avaient même pas démarré sur un module très isolé. Dans ce cas, l'attribution de cette partie du projet à un nouveau programmeur peut être utile.
Fondamentalement, les références Mythical Man Month sont correctes, sauf dans des cas artificiels comme celui que j'ai inventé. M. Brooks a fait des recherches solides pour démontrer qu'après un certain point, les coûts de mise en réseau et de communication de l'ajout de nouveaux programmeurs à un projet l'emporteront sur tous les avantages que vous retirerez de leur productivité.
Plutôt que d'ajouter des programmeurs, on peut penser à ajouter une aide administrative. Tout ce qui supprimera les distractions, améliorera la concentration ou améliorera la motivation peut être utile. Cela comprend à la fois le système et l'administration, ainsi que des choses plus prosaïques comme les déjeuners.
Ce n'est que lorsque vous avez à ce stade avancé des tâches indépendantes (presque 0% d'interaction avec d'autres parties du projet) qui ne sont pas encore abordées par quiconque et que vous pouvez faire appel à quelqu'un qui est un spécialiste dans ce domaine. L'ajout d'un membre de l'équipe doit minimiser les perturbations pour le reste de l'équipe.
Je suppose que l'ajout de personnes vers la fin du travail pourrait accélérer les choses si:
Le travail peut se faire en parallèle.
Le montant économisé par les ressources ajoutées est plus que le temps perdu en faisant expliquer les choses aux personnes inexpérimentées par les personnes expérimentées dans le projet.
EDIT: J'ai oublié de mentionner, ce genre de chose n'arrive pas trop souvent. Habituellement, ce sont des choses assez simples, comme les écrans d'administration qui font un CRUD simple à une table. De nos jours, ces types d'outils peuvent de toute façon être générés automatiquement.
Faites attention aux gestionnaires qui misent sur ce genre de travail à confier. Cela semble génial, mais en réalité, il n'y en a généralement pas assez pour couper un temps significatif hors du projet.
Évidemment, chaque projet est différent, mais la plupart des travaux de développement peuvent être assurés d'avoir une certaine collaboration entre les développeurs. Dans ce cas, mon expérience a montré que de nouvelles ressources peuvent en fait ralentir involontairement les personnes sur lesquelles elles comptent pour les mettre à niveau et dans certains cas, ce peuvent être vos personnes clés (d'ailleurs, ce sont généralement des personnes `` clés '' qui prendraient le temps d'éduquer un nouveaub). Quand ils sont à jour, rien ne garantit que leur travail s'inscrira dans les "règles" ou la "culture de travail" établies avec le reste de l'équipe. Encore une fois, cela peut faire plus de mal que de bien. Donc, à part cela, ce sont les circonstances où cela pourrait être bénéfique:
1) La nouvelle ressource a une tâche exigeante qui nécessite un minimum d'interaction avec d'autres développeurs et un ensemble de compétences qui a déjà été démontré. (c'est-à-dire le portage du code existant vers une nouvelle plate-forme, la refonte externe d'un module mort qui est actuellement verrouillé dans la base de code existante).
2) Le projet est géré de manière à ce que le temps des autres membres plus expérimentés de l'équipe puisse être partagé pour aider à mettre le newb à niveau et à les encadrer en cours de route pour s'assurer que leur travail est compatible avec ce qui a déjà été fait.
3) Les autres membres de l'équipe sont très patients.
Je pense principalement à des choses qui les empêchent de suivre le chemin des gens qui se développent actuellement. Je suis d'accord avec Mythical Man-Month, mais je pense aussi qu'il y a des exceptions à tout.
Je pense que l'ajout de personnes à une équipe peut accélérer un projet plus que de les ajouter au projet lui-même.
Je rencontre souvent le problème d'avoir trop de projets simultanés. N'importe lequel de ces projets pourrait être réalisé plus rapidement si je pouvais me concentrer uniquement sur ce projet. En ajoutant des membres de l'équipe, je pouvais passer d'autres projets.
Bien sûr, cela suppose que vous avez embauché des développeurs capables et motivés, capables d'hériter de grands projets et d'apprendre de manière indépendante. :-)
Si la ressource supplémentaire complément votre équipe existante, elle peut être idéale. Par exemple, si vous êtes sur le point de configurer votre matériel de production et de vérifier que la base de données est réellement réglée au lieu de simplement renvoyer de bons résultats (que votre équipe connaît en tant qu'experts du domaine) en empruntant du temps à un bon dba qui travaille sur le projet suivant chez vous peut accélérer l'équipe sans trop de frais de formation
Tout simplement. Cela revient à comparer le temps restant et la productivité que vous obtiendrez de quelqu'un, à l'exclusion du temps nécessaire aux ressources supplémentaires pour accélérer et être productif et en soustrayant le temps investi à leur enseigner par les ressources existantes. Les facteurs clés (par ordre d'importance):
L'ajout de développeurs est logique lorsque la productivité apportée par les développeurs supplémentaires dépasse la productivité perdue pour la formation et la gestion de ces développeurs.
Lorsqu'une équipe est déjà habituée à coupler la programmation, l'ajout d'un autre développeur qui est déjà qualifié pour le couplage peut ne pas ralentir le projet, en particulier si le développement se poursuit avec un style TDD.
Le nouveau développeur deviendra lentement plus productif à mesure qu'il comprendra mieux la base de code, et tout malentendu sera détecté très tôt, soit par sa paire, soit par la suite de tests exécutée avant chaque enregistrement (et il devrait idéalement y avoir un contrôle au moins toutes les dix minutes).
Cependant, les effets des surcharges de communication supplémentaires doivent être pris en compte. Il est important de ne pas trop diluer les connaissances existantes sur le projet.