mercredi 26 mai 2010

Le mythe du mois-homme (encore et encore)

Toujours dans ma re-lecture de Le mythe du mois-homme de F. P. Brooks. Et encore quelques éléments que j'ai envie de retenir du chapitre 3...

Au sujet de l'importance de la compétence :

Dans l'une de leurs études, Sackman, Erikson et Grant ont mésuré les performances d'un groupe de programmeurs expérimentés. Rien qu'à l'intérieur de ce groupe, le rapport entre les meilleurs et les plus mauvaises performances étaient en moyenne de 10 pour la productivité et, étonnamment, de 5 pour la vitesse du programme et de la mémoire occupée ! Bref, le programmeur gagnant 20 000 $ par an peut fort bien être 10 fois plus productif que celui qui en gagne 10 000. L'inverse peut aussi être vrai. Les données ne montraient absolument aucune corrélation entre l'expérience et les performances. (Je doute que ce soit vrai partout.) p.24

Employer le moins de monde possible et des gens compétents :

La plus grosse partie du coût est [...] due à la communication et à la correction (le débogage) des effets néfastes d'un manque de communication. C'est une autre bonne raison pour vouloir construire un système avec aussi peu de monde que possible. Et, de fait, la plupart des grands projets logiciels montrent que la force brutale est coûteuse, lente, inefficace, et produit des systèmes qui souffrent d'un manque d'intégrations.[...]
La conclusion est simple : si une équipe de 200 hommes a 25 managers qui sont les programmeurs les plus expérimentés et les plus compétents, limogez les 175 trouffions et remettez les managers à la programmation. p. 24

Malheureusement... une petite équipe pointue [...] ne va pas assez vite pour les projets vraiment grands. Il présente alors la proposition de Mills (l'équipe chirurgicale) :

Mills propose que chaque segment d'un gros travail soit attaqué par une équipe, mais que celle-ci soit organisée comme une équipe chirurgicale plutôt que comme un groupe d'équarisseurs. Au lieu de laisser chaque membre de l'équipe tailler dans le problème, on laisse opérer une seule personne, et les autres lui fournissent toute l'aide susceptible d'améliorer son efficacité et sa productivité. p. 25

Il fait remarquer que :

[...] dans l'équipe conventionnelle, les partenaires sont égaux, et les inévitables divergences d'avis qui surviennent doivent être discutées et aplanies par des compromis. Comme le travail est divisé les différences d'avis sont confinées à la stratégie globale et aux interfaces, mais elles sont motivées par des conflits d'intérêts[...]. Dans l'équipe chirurgicale, il n'y a pas de conflits d'intérêts et les divergences d'opinions sont tranchées unilatéralement par le chirurgien. Ces deux différences - absence de division du travail et relation supérieur-subordonné - permettent à l'équipe chirurgicale d'agir uno-animo. p. 28

Il introduit ensuite la notion d'intégrité conceptuelle qui est le centre de plusieurs des chapitres suivants. Au passage, il présente l'architecte comme le garant de cette intégrité conceptuelle :

[...] l'ensemble du système doit également posséder une intégrité conceptuelle, et [...] cela exige qu'un même architecte-système le conçoive de A à Z. p. 29

Cet extrait du guide de la cathédrale de Reims au début du chapitre 4 résume bien l'importance que Brooks accorde à l'intégrité conceptuelle et à la compétence :

Cette grande église est une incomparable œuvre d'art. Elle ne contient ni aridité, ni confusion dans ses principes. Elle représente l'apogée d'un style. Elle est due au travail d'artiste qui avaient compris et assimilés toutes les réussites de leurs prédécesseurs, et qui maîtrisaient totalement les techniques de leur temps, sans se croire obligés de faire étalage de leur habilité par des prouesses de style. Ce fut sans doute Jean d'Orbais qui conçut le plan d'ensemble du batiment. Ce plan fut respecté au moins dans les grandes lignes par ses successeurs. C'est là une des raisons de l'extrême cohérence et de l'unité de l'édifice. p. 33

Un architecte garant de l'intégrité conceptuelle du système... beaucoup tremblent déjà devant les dérives possibles. Brooks les a déjà constatée et s'en inquiète déjà en 1975 :

Comment peut-on parvenir à l'intégrité conceptuelle ?
Cela n'implique-t-il pas l'existence d'une élite, d'une aristocratie d'architecte et d'une horde d'implémenteurs plébéiens aux talents et idées créatives étouffées ?
Comment peut-on empêcher les architectes de sortir des limites de l'épure avec des spécifications ruineuses ou impossibles à implémenter ?
Comment s'assurer que chaque petit détail d'une spécification architecturale est communiquée à l'implémenteur, correctement compris par lui, et fidèlement incorporé au produit ? p.34

Terrifiant d'actualité....

jeudi 20 mai 2010

Le mythe du mois-homme (encore)

Je relis Le mythe du mois-homme de Frederick P. Brooks, Jr. La première édition date de 1975 et ce qu'on y lit est toujours d'actualité et semble toujours ignoré aujourd'hui. Je reproduis ici quelques extraits qui me paraissent intéressants et qu'on découvre dès les premières pages. En commençant bien sûr par...

loi de Brooks : Ajouter des gens à un projet en retard le retarde encore davantage.

Si chaque tâche doit être coordonnée avec chaque autre, l'effort [de communication] augmente en n(n-1)/2, où n est le nombre de taches. Trois travailleurs réclament trois fois plus d'intercommunication que deux, quatre en réclament six fois plus que deux. [...] si [...] il faut des conférences à trois, quatre, etc., [...] L'effort supplémentaire de communication peut complètement annihiler les gains apportés par la division de la tache[...] A ce stade, ajouter des hommes allonge le délai au lieu de le raccourcir. p. 15

Quelques références quantitatives à garder en mémoire :

V. A. Vyssotsky des laboratoires Bell estime que dans un grand projet, on peut augmenter la main-d'œuvre de 30 % par an. Si on dépasse ce chiffre, on freine, ou pire, on inhibe la mise en place des structures informelles essentielles au projet [...] note 1, p. 15

[répartition empirique du temps lors de la planification d'un projet] :
1/3 de planification ;
1/6 de codage ;
1/4 de test unitaire de composants isolés et de tests d'intégration préliminaires ;
1/4 de test d'intégration général, avec tous les composants en main. p. 16