Quand la programmation en binôme fonctionne-t-elle? Quand l'éviter?

51

Plutôt que de faire du programme par paire servile tout le temps, nous utilisons la programmation par couple de manière sélective dans notre équipe. Je pense que cela fonctionne mieux dans les circonstances suivantes:

  • Renforcer les nouveaux membres de l'équipe sur un projet (au lieu de les laisser parcourir eux-mêmes la documentation ou le code).
  • Faire travailler ensemble des juniors et des seniors (aide à montrer certaines des compétences et des astuces des développeurs plus expérimentés, en plus de permettre aux vieux chiens d’apprendre parfois de nouvelles astuces).
  • Lorsque quelqu'un essaie de localiser un défaut, il est souvent utile de le coupler à de nouveaux yeux.

Quand utiliser le programme de paires et pourquoi?

Quand éviter la programmation en binôme? Pourquoi?

Paddyslacker
la source
11
Essayer de comprendre la valeur et la logique de clore cette question trois ans après avoir été clairement répondu de manière objective par des références à des recherches empiriques. De toutes les pratiques communes à Agile, c'est l'une des plus documentées et documentées. Le libellé de la question doit-il être modifié d'une manière ou d'une autre? Les attentes / normes ont-elles changé au cours des trois années écoulées depuis sa publication?
Michael

Réponses:

44

Les recherches compilées par Laurie Williams indiquent que la programmation en binôme fonctionne mieux dans les équipes industrielles lorsque

  • Les paires travaillent sur des tâches de spécification, de conception et de programmation complexes . Les expériences indiquent qu'aucune amélioration de la qualité n'est affichée lorsque vous travaillez sur des tâches simples dans une paire, mais que des améliorations peuvent être apportées en termes de rapidité. Notez également que la "programmation" en binôme comprend souvent des activités autres que la rédaction de code.
  • Chaque personne dans une paire a à peu près le même niveau d’expertise - alors que la programmation par paire est excellente pour la formation, les paires sont les plus engagées quand elles ont à peu près le même niveau.
  • Les rôles changent régulièrement - une rotation régulière permet de garder le copilote actuel engagé, car les individus ont tendance à contribuer davantage lorsqu'ils conduisent ou ont le sentiment qu'ils sont sur le point de conduire.
  • Les paires tournent régulièrement - les équipes ont exprimé leur satisfaction de connaître les différentes parties du système qu'elles construisent. La rotation des paires facilite le transfert de connaissances, ce qui réduit certains risques dans le projet. Dans un contexte académique, des paires sont souvent assignées, mais l'industrie est généralement auto-assignée souvent lors de stand-ups. Dans les deux cas, la paire est plus efficace lorsque les deux individus sont des participants volontaires qui voient la valeur de l'activité de pairage.

D'après mon expérience personnelle, j'ai constaté que mon équipe XP consacrait en moyenne environ 60% de notre temps de développement à la programmation par paires. Le reste du temps est consacré au développement individuel. Il n'est pas rare de créer une première conception, de travailler seule sur la conception pendant quelques heures, puis de revenir à la fin pour finir des parties difficiles ou difficiles du code.

J'ai également constaté que la programmation par paires est plus efficace dans des blocs d'environ 1,5 à 2,5 heures. Quoi que ce soit moins, cela nécessite généralement trop de frais généraux pour la configuration, alors que beaucoup plus et les couples ont tendance à être grincheux et fatigués. Grincheux et fatigué signifie que vous ne communiquez pas bien et que vous laissez peut-être des défauts glisser dans le système.

Michael
la source
Super réponse Michael. Accepter cela parmi de nombreuses bonnes réponses, car il y avait un bon mélange d'expérience personnelle et un excellent lien avec la recherche.
Paddyslacker
Ironiquement, bien que le lien ait fonctionné lorsque vous avez publié votre réponse, il s’agit maintenant d’un 404, doh!
Paddyslacker
J'ai corrigé le lien hypertexte dans votre réponse, Michael, donc tout va bien à nouveau.
Paddyslacker
la partie "complexe" est très importante. Si vous faites un travail de dactylographie trivial, votre partenaire s'ennuiera très rapidement.
Dave O.
3
@DaveO .: Je ne peux faire que des choses simples en utilisant la programmation par paire. Pour les tâches complexes, il faut que je réfléchisse, et la programmation en binôme n'est qu'une source de distraction (voir la réponse de Will Sargent). Je trouve toujours très utile de discuter de problèmes complexes avec des collègues, mais c’est différent d’écrire tout le code ensemble.
Giorgio
29

La programmation en binôme a fonctionné pour moi dans très, très peu de situations.

Où la programmation par paires échoue pour moi

La nouvelle est que la programmation en binôme ne fonctionne pas pour moi en tant que moyen principal de développement de logiciels. Je peux jumeler un programme pendant une journée, voire une semaine, surtout si nous nous concentrons sur un problème particulier. Mais après ça? J'ai fini. Pain grillé. Je ne veux voir personne, parler à personne, et il me faut au moins deux jours dans une grotte jusqu'à ce que je sois de nouveau apte à la compagnie humaine.

C'est une histoire triste, mais ce qui est drôle, c'est que je suis tellement plus heureux maintenant avec la façon dont cela s'est terminé. Je suis heureusement employé dans un contrat où je travaille à la maison ou dans un café, et je me suis fait de nouveaux amis et ai exploré plus de San Francisco que je n'aurais jamais cru possible. J'ai un vélo et un ordinateur portable, et tant que je respecte mes délais et vérifie régulièrement mon code, mon temps est le mien.

Je vais énumérer les gros problèmes que j'ai avec la programmation par paires à l’avance et vous donner plus tard les détails et les anecdotes.

  1. Focus divisé.
  2. Aucune expérimentation.
  3. Pas de notes hautes.
  4. Pas de fierté dans la propriété.
  5. Pas de fuite...

... J'ai demandé à mes collègues s'ils voyaient ce que je voyais, s'il me manquait quelque chose - je ne voyais pas comment cela pourrait fonctionner, comment les gens pourraient continuer à le faire. Ils ont dit que je me débrouillais bien, qu'il fallait juste du temps pour s'installer et s'adapter. Que c'était difficile pour tout le monde au début.

Finalement, je me suis replié sur moi-même. Entre les maux de tête aveuglants, l'insomnie et le martèlement, un besoin non satisfait d'écrire du code, j'ai arrêté de répondre à l'entrée. Je pouvais regarder un écran et ne rien voir. Quelqu'un pourrait me parler de façon inattendue et je ne les entendrais pas. Je remplissais les exigences fondamentales de mon travail, mais je n'y étais pas. J'avais utilisé tout ce que je venais de faire pour la journée. J'ai commencé à vérifier mon iPhone lorsque mon autre partenaire était en train de taper.

Finalement - juste trois mois plus tard, et pour la première fois de ma vie, j'ai été viré pour ne pas être une équipe apte à programmer par deux.

Pas seul

J'ai écrit ceci non seulement pour le comprendre, mais aussi pour pouvoir en parler. Il a été présumé que la programmation en binôme fonctionne pour la plupart des gens et est beaucoup plus facile et rapide que la programmation en solo. Cela peut être ou ne pas être le cas, mais comme pratique à long terme, la programmation en binôme ne fonctionne pas pour moi. Il y a beaucoup d'autres personnes pour lesquelles la programmation par paires ne fonctionne pas. Nous importons aussi ...

Will Sargent
la source
2
Moi aussi. Presque uniquement dans le suivi des défauts, et même alors, c’est plus une réflexion et une philosophie que la programmation réelle.
hplbsh
4
+1 réponse perspicace. Il semble parfois que les partisans de la programmation en binôme nous oublient les solitaires et les introvertis. Et comme par hasard, beaucoup de gens intéressés par la programmation sont aussi des introvertis ...
Andres F.
6
@AndresF. Outre les solitaires et les introvertis, il existe également des personnes indépendantes qui n'ont besoin que de leur espace pour organiser leurs pensées. Pour la diffusion des connaissances parmi les membres de l’équipe, la révision du code est au moins aussi efficace que la programmation en binôme.
Giorgio
2
@Giorgio Convenu. En fait, je suis en faveur de la programmation partielle en binôme: résoudre des problèmes complexes en binôme. Mais certains défenseurs pensent qu'il devrait être utilisé la plupart du temps pour la plupart des tâches de programmation, ce avec quoi je suis en désaccord.
Andres F.
4
@AndresF.: Je suis d'accord avec vous. "La programmation par paire partielle" ou, en utilisant des termes moins à la mode, "discuter au besoin d'un problème difficile ensemble" est une approche très raisonnable, utilisée non seulement pour la programmation, mais aussi pour apprendre à l'école, etc. Cependant, je ne considère pas cette pratique une balle d'argent qui devrait être utilisé tout le temps.
Giorgio
10

Mon équipe a fait de la programmation en binôme depuis ses débuts, bien avant que je travaille là-bas, dans le cadre d’une boutique de style essentiellement "programmation extrême". La programmation par paires est l' état par défaut . les gens ne vont vraiment à la singularité que s'il y a un nombre impair, ou occasionnellement pour des enquêtes, en particulier celles qui impliqueront de jouer avec du matériel hostile et d'essayer de le faire fonctionner.

"Junior / senior" n'est pas la seule solution. "Intermédiaire / junior" est utile; cela aide le gars de niveau intermédiaire à synthétiser les connaissances qu'il a acquises en l'obligeant à les communiquer à quelqu'un d'autre. Défis "Intermédiaire / Intermédiaire" Deux personnes travaillent ensemble pour partager leurs connaissances, communiquer et travailler en équipe. Et même si vous avez deux types très expérimentés, ils ont probablement des domaines d’expertise différents et des approches différentes. Les aspects de partage des connaissances ne s'arrêtent pas lorsque quelqu'un est vaguement "au courant" d'un projet. La programmation en binôme est plutôt la quintessence d'une organisation apprenante . Les nouvelles techniques et les meilleures pratiques se répandent rapidement.

La programmation en binôme aide également à maintenir la qualité du code (moins de défauts) et la santé du code (il ne fait pas ce qu'il a l'intention de faire, mais il fait ce qu'il devrait ... idéalement sans tomber dans un lapin de plusieurs semaines- trou faire la mauvaise chose, ou deux bonnes choses différentes qui seront en conflit sauvage). Cela aide les programmeurs à rester concentrés: ici, au cœur de la Silicon Valley, siège de la semaine de travail de 80 heures, nous ne pouvons travailler que 40 heures par semaine, car nous effectuons un codage intense huit heures par jour, en changeant avec l'un l'autre. (En outre, si vous programmez plus longtemps la programmation en binôme, vous risquez de vous écraser. Ou du moins de vous épuiser.) C’est une bonne solution pour l’équilibre travail / vie privée, et cela aide également votre organisation dans la mesure où il est important d’obtenir un délai d'exécution rapide (délai d'exécution à faible temps de latence, en particulier).

Ce n'est pas tout, complètement, 100% pêches et crème; Je trouve que la programmation en binôme est parfois un obstacle à l’application de processus cérébraux intuitifs utiles pour certains problèmes. Plus récemment, lors d’une tâche de fuite de mémoire, j’ai passé du temps avec et sans paires; sans un, je me sentais plus libre de perdre mon temps et d'essayer des expériences sans vraiment savoir exactement comment expliquer ce que je faisais à un moment donné. Il est également avantageux de travailler en mode singleton, de pouvoir prendre une tangente et de procéder à certaines refactorisations sauvages (appréciées dans la méthodologie XP) sur un coup de tête.

Mais globalement, les avantages dépassent de loin les coûts et le couplage a fonctionné de manière spectaculaire pour nous: depuis la phase de démarrage jusqu’à l’acquisition par une plus grande entreprise et notre intégration ultérieure. (En parlant de cela, la programmation en binôme nous a aidés à maintenir une culture continue grâce à notre expansion et malgré un faible roulement).

(Nous développons une appliance logicielle en Perl, prix catalogue compris entre 4 000 et 40 000 dollars.)


la source
4

Je n'ai jamais travaillé dans une configuration de «programmation par paire» et pourtant je peux prétendre avoir fait partie des trois circonstances que vous avez énumérées. Le scénario que vous évoquez semble plus «une programmation régulière» avec des phases d’aide / de formation. N'avons-nous pas fait tout cela avant la «programmation par paire»? Je suppose que la programmation en binôme nécessiterait une approche plus engagée du fait que le processus de partage au sein d'une équipe n'arrête pas la minute où vous abordez la tâche ou le problème immédiat. Mais alors c'est ce que je "pense" et pas ce que je "sais".

Personnellement pour la programmation en binôme, j'aimerais travailler dans une équipe où j'ai l'occasion d'apprendre et de partager mes connaissances. Une équipe déséquilibrée dans laquelle chaque personne avec laquelle vous travaillez a des milles d’avance sur vous, ou alors un niveau bien inférieur à la moyenne peut devenir assez inintéressante assez rapidement. De plus, j'aurais peur de travailler avec des personnes qui ont des convictions profondes et qui sont difficiles à convaincre.

Preets
la source
Vous avez raison, nous pourrions résoudre les problèmes que j'ai mentionnés sans programmation par paires, mais nous utilisons les techniques de programmation par paires qui permettent à une personne de contrôler et d'observer l'autre et de la désactiver à intervalles réguliers. C'est un peu plus formel que simplement aider / former. Beaucoup de magasins XP font beaucoup plus de programmes en paires que cela - je me demande quelle a été la "bonne" quantité de paires pour les gens.
Paddyslacker
Oui, j'aimerais aussi avoir des nouvelles de personnes qui ont travaillé avec PP pendant de longues périodes. Je peux comprendre comment les consultants qui travaillent avec plusieurs entreprises ou équipes peuvent tirer parti du PP, mais ces missions durent généralement quelques mois. Il serait intéressant de savoir comment fonctionne PP dans une entreprise de logiciels typique, où les projets durent généralement plus d'un an.
Preets
2

Nous expérimentons la programmation en binôme dans notre équipe depuis quelques mois. Je trouve cela très utile lorsque vous travaillez sur quelque chose de nouveau (nouvelle technologie, nouvelle fonctionnalité, etc.), car vous pouvez rapidement échanger des idées avec une autre personne de l'équipe et les faire valider / invalider. En outre, un examen par les pairs côte à côte aide à éliminer les bogues.

Un autre coéquipier a essayé d’utiliser la programmation en binôme avec un test pour réaliser ATDD et il était plutôt satisfait des résultats (selon ses calculs, une augmentation de 20% du coût en développement entraînait une diminution d’environ 50% du temps de test).

Amit Wadhwa
la source
1

Bonne nuit

Nous avons maintes fois débattu des pratiques de la programmation extrême et de la programmation en binôme . Dans le passé, nous sommes en mesure de comprendre que la programmation est une activité en solo, car les programmeurs avaient besoin de concentration et d’isolement. Les programmeurs de cette époque se trouvaient dans la zone , un état mental dans lequel ils pouvaient se concentrer efficacement sur le code et prendre des décisions agréables et créatives.

La programmation en binôme semble également risquée si vous supposez qu'un programmeur s'interrompt. D'autre part, il est plus difficile d'interrompre deux programmeurs travaillant ensemble. En programmation solo, par exemple, il sera plus facile de s’interrompre; il est donc presque impossible pour un programmeur solo de rester dans la "zone".

La qualité du code en est une autre lorsque la date butoir est imminente. Les gens seront toujours pressés, qu'ils soient programmeurs en couple ou en solo: ils n'appliqueront pas certaines des meilleures pratiques et oublieront simplement les tests unitaires.

Je resterais avec la programmation par paire. Parce qu'en termes de risques, lorsqu'un programmeur est parti, vous aurez toujours un autre gars pour documenter le processus et enseigner à tous les autres comment il fonctionne.

Junior M
la source
1

Travailler sur des tâches de complexité non triviale tend à être un bon candidat pour la programmation en binôme afin que plusieurs personnes comprennent le code plutôt que qu'un seul développeur connaisse une partie de la base de code. Un autre cas est celui où une personne souhaite transférer certaines compétences. Par exemple, si quelqu'un qui est vraiment doué pour les tests unitaires fait la paire avec quelqu'un qui n'est pas aussi familier avec le concept, cela aide à prendre l'habitude de quelque chose.

En ce qui concerne les endroits où éviter la programmation en binôme, créez des tâches simples, dans lesquelles il serait préférable de diviser le travail en deux groupes et de laisser chaque développeur effectuer une partie du travail séparément pour que le travail soit effectué. Certaines tâches peuvent nécessiter un peu de frappe mais ne sont pas si grandes qu'il vaut la peine de passer quelques heures à essayer de trouver une meilleure façon de le faire, comme cela pourrait être fait si chaque développeur adopte une approche de force brute pendant quelques instants. heures.

JB King
la source