C'est un adage assez courant que l'ajout de programmeurs à un projet tardif aggravera les choses. Pourquoi est-ce?
C'est un adage assez courant que l'ajout de programmeurs à un projet tardif aggravera les choses. Pourquoi est-ce?
Réponses:
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.
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.
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:
Les hommes et les mois ne sont des produits interchangeables que lorsqu'une tâche peut être répartie entre de nombreux travailleurs sans aucune communication entre eux. Cela est vrai pour la récolte du blé ou la cueillette du coton; ce n'est même pas approximativement vrai de la programmation des systèmes.
Il mentionne la formation comme faisant partie du problème:
Le fardeau supplémentaire de la communication se compose de deux parties: la formation et l'intercommunication. Chaque travailleur doit être formé à la technologie, aux objectifs de l'effort, à la stratégie globale et au plan de travail. Cette formation ne peut pas être divisée, cette partie du travail varie donc linéairement avec le nombre de travailleurs.
... mais note que l'intercommunication est de loin le facteur le plus important:
Étant donné que la construction de logiciels est intrinsèquement un effort systémique - un exercice d'interrelations complexes - l'effort de communication est important et il domine rapidement la diminution du temps de tâche individuelle provoquée par le partitionnement. Ajouter plus d'hommes allonge, non raccourcit, le calendrier.
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 .
Ce n'est pas simplement un adage; c'est vérifiable. Découvrez le mois mythique de Brooks .
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.
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!
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é.
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.
L'adage qui a toujours fonctionné pour moi est que vous ne pouvez pas obliger neuf femmes à faire un bébé en un mois.
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.
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.
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.
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 :-).