Comme beaucoup de ces questions, je pense que la réponse est:
Ça dépend
Il y a des raisons de croire que prendre la position que chaque programmeur devrait savoir que chaque ligne de code est erronée.
Si nous supposons un instant que quelqu'un qui a une compréhension profonde d'un élément de code apportera des modifications 5 fois plus rapidement que quelqu'un qui ne le sait pas du tout (ce n'est pas un acte de foi énorme dans mon expérience) et que cela prend environ un mois d’expérience de codage pour bien comprendre un module de taille importante (ce qui n’est pas non plus déraisonnable), nous pouvons alors exécuter des nombres (complètement fictifs et fictifs):
- Programmeur A: a une compréhension profonde
- Programmeur B: aucun
Disons que le programmeur A effectue 1 unité de travail par jour. En 4 semaines de 5 jours ouvrables, il / elle peut obtenir 20 unités de travail.
Ainsi, le programmeur B, commençant à 0,2 unité de travail par jour et se terminant à 0,96 unité de travail le 20e jour (le 21e jour, est aussi bon que le programmeur A), accomplira 11,6 unités de travail dans le même Période de 20 jours. Au cours de ce mois, le programmeur B a atteint une efficacité de 58% par rapport au programmeur A. Cependant, vous avez maintenant un autre programmeur qui connaît ce module aussi bien que le premier.
Bien sûr, sur un projet de taille décente, vous pourriez avoir ... 50 modules? Donc, se familiariser avec chacun d’entre eux prend environ 4 ans, ce qui signifie que le programmeur d’apprentissage travaille en moyenne avec une efficacité de 58% par rapport au programmeur A… hmmm.
Alors considérez ce scénario: mêmes programmeurs, même projet (A sait tout, et B ne sait rien du tout.) Disons qu'il y a 250 jours ouvrables dans l'année. Supposons que la charge de travail est répartie de manière aléatoire sur les 50 modules. Si nous divisons les deux programmeurs de manière égale, A et B ont tous deux 5 jours ouvrables pour chaque module. A peut faire 5 unités de travail sur chaque module, mais B n’obtient, selon ma petite simulation Excel, que 1,4 unité de travail sur chaque module. Le total (A + B) est de 6,4 unités de travail par module. C'est parce que B passe le plus clair de son temps sans aucune connaissance du module sur lequel il travaille.
Dans cette situation, il est préférable que B se concentre sur un sous-ensemble plus petit de modules. Si B se concentre sur seulement 25 modules, il dispose de 10 jours, totalisant 3,8 unités de travail pour chacun. Le programmeur A pourrait ensuite passer 7 jours chacun sur les 25 modules sur lesquels B ne travaille pas, et 3 jours sur les mêmes modules que B. La productivité totale varie de 6,8 à 7 unités par module, soit une moyenne de 6,9, ce qui est nettement supérieur. que les 6,4 unités par module que nous avons obtenues lorsque A et B ont réparti le travail de manière uniforme.
Si nous réduisons la portée des modules sur lesquels B travaille, nous obtenons encore plus d’efficacité (jusqu’à un certain point).
Entraînement
Je dirais également que quelqu'un qui en sait moins sur un module interrompra la personne qui fait beaucoup plus que quelqu'un qui a plus d'expérience. Ainsi, les chiffres ci-dessus ne tiennent pas compte du fait que plus B consacre de temps au code qu'ils ne comprennent pas, plus le temps de A est long, en posant des questions, et parfois, A doit aider à réparer ce que B a fait. Former quelqu'un est une activité qui prend du temps.
Solution optimale
C'est pourquoi je pense que la solution optimale doit être basée sur des questions telles que:
- Quelle est la taille de votre équipe? Est-il judicieux de faire en sorte que tous les participants soient formés de manière croisée, ou si nous avons une équipe de 10 personnes, pouvons-nous simplement nous assurer que chaque module est connu d'au moins 3 personnes? (Avec 10 programmeurs et 50 modules, chaque programmeur doit connaître 15 modules pour obtenir une couverture 3x.)
- Comment est le roulement de votre personnel? Si vous renvoyez des employés tous les trois ans en moyenne, et qu'il faut plus de temps pour vraiment connaître tous les aspects du système, ils ne seront pas assez longtemps pour que la formation soit remboursée.
- Avez-vous vraiment besoin d'un expert pour diagnostiquer un problème? Beaucoup de gens utilisent l'excuse, "et si cette personne part en vacances", mais on m'a appelé à plusieurs reprises pour diagnostiquer un problème dans un système pour lequel je n'avais aucune expérience. Il est peut-être vrai que la personne expérimentée pourrait le trouver beaucoup plus rapidement, mais cela ne signifie pas que vous ne pouvez pas vivre sans eux pendant une semaine ou deux. Peu de systèmes logiciels sont si critiques que le problème doit être diagnostiqué en 1 heure au lieu de 5 heures, sinon le monde va se terminer. Vous devez peser ces risques.
C'est pourquoi je pense "ça dépend". Vous ne voulez pas diviser 20 modules entre deux programmeurs en plein milieu (10 chacun), car vous n’avez alors aucune flexibilité, mais vous ne voulez pas non plus former 10 programmeurs sur les 50 modules, car vous perdriez beaucoup de temps. l'efficacité et vous n'avez pas besoin de beaucoup de redondance.