C'est un adage assez courant que l'ajout de programmeurs à un projet tardif aggravera les choses. Pourquoi est-ce?
project-management
Henri
la source
la source
Réponses:
Frais généraux d'introduction
Chaque nouveau développeur doit être initié à la base de code et au processus de développement, ce qui prend non seulement le temps de la nouvelle personne mais nécessite également l'aide d'un [développeur] senior (les guider à travers le processus de construction, expliquer le processus de test, les aider avec des pièges dans la base de code, des revues de code beaucoup plus détaillées, etc.) .
Par conséquent, plus vous ajoutez de nouveaux développeurs au projet, plus vous devez consacrer de temps à les amener à un point où ils peuvent réellement contribuer au projet.
la source
En plus des autres réponses: Un autre facteur à considérer est la communication.
Le pire des cas pour la quantité de canaux de communication dans une équipe (ce qui n'est pas rare), est un graphique complet . Comme vous pouvez l'imaginer, l'ajout d'un seul développeur peut augmenter considérablement les canaux de communication. Avec des méthodes de communication plus rationalisées, l'impact est moindre ... mais il s'additionne toujours.
la source
Le problème cité dans le livre qui a initialement promulgué cette loi, Le Mois de l'homme mythique , est la communication. Il commence par dire:
Il mentionne la formation comme faisant partie du problème:
... mais note que l'intercommunication est de loin le facteur le plus important:
Il convient également de noter que Fred Brooks (l'auteur) a les antécédents pour savoir de quoi il parle. La majeure partie du livre est basée sur son expérience dans la gestion du projet OS / 360 d'IBM. Malgré des décennies d'adhérents prêchant toutes sortes de méthodes de gestion "améliorées", et certains proposant même des noms sympas (eXtreme, Agile, Scrum, etc.) quand vous y arrivez, peu d'essence 1 semble avoir changé depuis.
1 Pour la définition de "essence", voir le "No Silver Bullet: Essence and Accident in Software Engineering" du même auteur, inclus dans l' édition du 20 e anniversaire de The Mythical Man-Month .
la source
Ce n'est pas simplement un adage; c'est vérifiable. Découvrez le mois mythique de Brooks .
la source
Voici quelques réflexions sur cette question ...
maintenant, ajouter de nouvelles ressources pour les tests n'est peut-être pas une mauvaise idée ... cela pourrait accélérer le processus de test (si vos cas de test sont bien écrits), et oui, l'utilisation d'outils de test vous aidera aussi.
la source
Parce que la programmation n'est pas un travail de base sur la chaîne de production. Se familiariser avec un projet logiciel prend du temps. Les nouvelles personnes doivent poser beaucoup de questions, ce qui conduit à une productivité négative (c.-à-d. Nouvelle personne apprenant, personne âgée leur enseignant -> aucun travail réel n'est fait).
Pour simplifier, imaginez un projet individuel relativement simple qui devrait durer 1 semaine: jeudi, vous vous rendez compte que cela ne se fera pas à temps, qu'il faudrait plutôt un programmeur comme 6-7 jours à la place de 5. Si vous ajoutez un autre programmeur à ce stade, il devra travailler avec programmer1 pendant au moins quelques heures ou un jour environ, poser beaucoup de questions pour se mettre au courant, etc. Vous n'obtiendrez probablement pas toute productivité nette positive pour le reste de la semaine. Le nouveau programmeur est également susceptible d'introduire quelques bogues supplémentaires (car ils ne connaîtront pas le code existant ainsi que programmer1), ce qui fera exploser le cycle d'implémentation et de test d'ici un jour ou deux de plus. Le projet durera facilement deux semaines complètes au lieu de l'original!
la source
Fred Brooks a écrit un livre entier "The Mythical Man-Month" pour répondre à cette question.
Voici la version quick-n-dirty:
1) Il y a une limite à combien vous pouvez diviser un projet en morceaux distincts à affecter à plus de programmeurs.
2) La division d'un projet à plus de personnes augmente la quantité de communication requise pour coordonner toutes les parties de l'application. Plus de communication = plus de travail.
3) Pour chaque personne que vous ajoutez au projet, vous ajoutez plus d'un canal de communication qui doit être dirigé vers l'équipe. Ce nombre augmente géométriquement et augmente la quantité de communication qui doit se produire. Plus de communication = Plus de travail.
4) Il y a une "courbe en J" lorsque vous ajoutez chaque membre de l'équipe. Autrement dit, les ressources productives existantes doivent passer du temps à préparer les nouvelles personnes qu'elles auraient autrement pu consacrer à travailler sur le projet. En fin de compte, vous pouvez augmenter la capacité, mais cela ralentit temporairement le projet. Plus le projet est avancé, plus il faut en apprendre, donc plus l'effet est prononcé.
la source
Un autre facteur que je n'ai pas vu mentionné est que certaines tâches doivent être effectuées dans un ordre spécifique. Vous ne pouvez pas faire la tâche 4 tant que la tâche 3 n'est pas terminée car elle dépend de 3. Il n'est pas utile d'embaucher quelqu'un pour effectuer la tâche 4 en même temps que quelqu'un effectue la tâche 3. Souvent à la fin d'un projet , les tâches qui doivent être exécutées en premier sont les tâches restantes.
Ce sont aussi souvent certaines des tâches les plus complexes qui doivent être accomplies, celles-là mêmes qui nécessitent la meilleure compréhension de l'ensemble de la conception pour éviter de casser ce qui a déjà été accompli. Ils nécessitent également généralement la connaissance la plus étendue du domaine d'activité. Je pourrais après avoir travaillé sur le projet pendant des mois être en mesure de faire la tâche en une semaine ou moins. Quelqu'un de nouveau passerait plus d'une semaine à se mettre au courant (et à m'éloigner de mes tâches pour une bonne partie de ce temps pour répondre aux questions) et serait probablement même si extrêmement qualifié prend plus de temps pour faire la tâche. Ce n'est pas parce qu'il ou elle n'est pas compétent mais à cause de sa méconnaissance de la structure réelle du projet ou du backend de la base de données.
la source
L'adage qui a toujours fonctionné pour moi est que vous ne pouvez pas obliger neuf femmes à faire un bébé en un mois.
la source
Je suggérerais également "Peopleware" par DeMarco et Lister.
Et "The Deadline" par DeMarco présente cela, et un certain nombre d'autres maladies et erreurs fallacieuses de gestion de projet logiciel d'une manière légère et très lisible.
Il plonge également dans la dynamique des personnes qui font du travail de projet / d'équipe, et entre dans certains détails sur la façon dont des choses comme la communication et l'introduction épuisent le temps de travail disponible d'une équipe.
Ces livres sont assez bon marché, je vous suggère de les obtenir (Amazon ou The Book Depository en ont) et de les lire. Les réponses courtes ici ne peuvent pas vraiment rendre justice à la question posée.
la source
Parce que personne ne prend le temps d'avoir un processus bien pensé, planifié et testé pour: embaucher, former, développer et superviser des programmeurs et encore moins les mettre au courant d'un projet particulier.
Si vous dirigez une équipe de développeurs, vous devriez avoir plusieurs contacts en ce moment des personnes que vous souhaitez embaucher si vous avez une ouverture. Rejoignez des groupes de développeurs.
À quelle vitesse pouvez-vous obtenir une toute nouvelle configuration de machine de développement et prêt à démarrer?
Avez-vous déjà testé la documentation et les spécifications de votre projet en les montrant à un développeur sur un autre projet? L'ont-ils examiné et déterminé qu'ils pourraient commencer à travailler sur le projet si nécessaire?
À quel point le calendrier du projet est-il à jour?
Économisez pour un jour de pluie, car lorsqu'un projet prend du retard, il ressemble plus à un ouragan.
la source
Mis à part le problème de communication (dont je pense que toutes les autres réponses parlent), il est également très possible qu'une personne ajoutée à un projet crée des bogues, car elle ne connaît pas encore très bien le code.
Chaque fois que je suis ajouté à un projet, je m'efforce toujours de ne pas casser les choses. Cela signifie que je suis beaucoup plus lent à réparer les choses au début.
la source
Je voudrais signaler quelque chose de totalement ignoré jusqu'à présent par les autres réponses.
Au moment où les gens sont ajoutés à un projet tardif, beaucoup de choses ont mal tourné dans l'organisation. La direction et le client ne sont pas contents. Les gens ont subi des pressions pour continuer. Les choses sont assez tendues.
Imaginez maintenant que vous faites partie de cette équipe. De toute évidence, rien de tout cela n'est de votre faute. La planification (dont aucune n'était la vôtre) a été trop optimiste. Toutes les mauvaises décisions ont été prises sans vous consulter. Vous essayez d'en tirer le meilleur parti et tout à coup, un tas de nouvelles personnes arrivent. Quel message cela transmet-il?
Les gens à l'étage ont évidemment perdu confiance en vous. Ils ont appelé les grands garçons pour compenser ce que vous avez gâché.
Serez-vous toujours motivé pour en faire un succès? Ou ... serez-vous toujours plus frustré et préféreriez-vous tout voir s'écraser après tout?
Prends ton temps :-).
la source