Scambio di coppie: quali sono i pro e i contro?


15

L'idea generale adottata dalla maggior parte dei teorici di Agile / XP sembra essere che le coppie debbano scambiarsi regolarmente. Ad esempio ogni programmatore dovrebbe scambiare le coppie una volta al giorno; metà delle persone si scambia all'inizio della giornata, metà delle persone si scambia dopo pranzo: a causa di fattori esterni come riunioni, festività e simili, la maggior parte delle persone tenderà a invertire i tempi di scambio una o due volte alla settimana in modo da distribuire le configurazioni delle coppie abbastanza uniformemente in tutta la squadra.

Uno dei motivi alla base del frequente scambio è che la conoscenza viene diffusa tra il team in modo rapido e uniforme, piuttosto che avere competenze specifiche e conoscenze concentrate in individui particolari, il che implica che il lavoro può continuare senza intoppi se le persone sono assenti o lasciano l'azienda. Un'altra logica, che è una sorta di corollario del dogma che circonda la stessa programmazione della coppia, è che ogni volta che qualcuno scambia su di te si ottiene una nuova revisione del codice da un nuovo paio di occhi, quindi può solo migliorare la qualità del codice.

Entrambe le affermazioni sembrano ragionevoli; da un punto di vista gestionale sembra che tu abbia un aumento sia della stabilità che della qualità, e come tale scambio frequente è praticamente una teoria standard nella maggior parte dei libri Agile / XP che ho visto.

Quindi, quando concretamente messo in pratica, cosa pensano veramente le persone dello scambio di coppia

  • Il punto di vista di un programmatore?
  • Il punto di vista di un manager?

E

  • Cosa dovrebbe determinare quando qualcuno scambia da / su una coppia?

È la stessa cosa di "Pair Programming?"
Robert Harvey,

@Robert Harvey - Beh, è ​​un aspetto della programmazione delle coppie. Una volta che un team decide di programmare in coppia (per una parte della giornata lavorativa), deve decidere come disporre i programmatori in coppie, ovvero quando un programmatore deve lasciare una coppia (un altro dovrebbe unirsi contemporaneamente ). Questo è "Pair Swapping".

+1 per la grande domanda. Purtroppo, penso che sia abbastanza difficile trovare un negozio che esegua l'accoppiamento su base regolare, figuriamoci abbastanza per avere dati sullo scambio di coppia. Spero di sbagliarmi e di avere delle buone risposte, sono molto interessato a sentirne alcune.
Jesse McCulloch,

2
Personalmente troverei lo scambio di coppie molto fonte di distrazione. Cercare di affrontare così tante personalità e livelli di abilità così diversi in quarti così vicini produrrebbe troppa dissonanza cognitiva.
Robert Harvey,

@Jesse McCulloch - Lavoro in un posto che abbina solo programmi e scambi praticamente come i libri dicono che una squadra dovrebbe. Ho anche lavorato in un ambiente da solo e quindi ho una buona prospettiva sul contrasto. Tuttavia, mi piacerebbe sentire le opinioni degli altri come vorrei vedere se corrispondono alle mie senza influenzarle troppo.

Risposte:


4

La programmazione delle coppie è difficile.

È difficile perché funziona meglio quando le 2 persone coinvolte sono vicine nel livello di abilità e ciò può essere difficile in alcuni ambienti di lavoro. Può essere più difficile quando si sostituisce perché è necessario trovare qualcun altro con il livello di abilità appropriato e quindi portarlo al passo con il problema attuale. Il vantaggio è che più persone sono esposte a qualsiasi dato codice che è stato associato. Questo dovrebbe portare meno volte in cui il codice non può essere riparato perché nessuno ne sa abbastanza. Dovrebbe anche propagare la proprietà del gruppo e la capacità di chiunque di raccogliere qualsiasi lavoro.

Ho scoperto che anche negli ambienti in cui viene eseguita l'associazione, lo scambio di coppia non vale il costo. Tuttavia, ciò può essere dovuto al fatto che i nostri compiti non richiedono mai più di ~ 1,5 giorni. Abbiamo riscontrato un grande vantaggio nel portare a termine le attività non più grandi di ~ 1,5 giorni di lavoro. Lo scambio di coppia può avere più senso nel contesto di attività più lunghe.


Personalmente, mi diverto ad accoppiare persone a tutti i livelli. A volte sto imparando, a volte insegno, a volte stiamo solo facendo le cose. Ma l'apprendimento e l'insegnamento creano capacità di squadra a lungo termine, che ritengo sia importante quanto il controllo delle funzionalità.
William Pietri,

potresti pensare di sì, ma il project manager che vede evaporare la sua scadenza mentre la tua esperienza si abitua ad addestrare le persone sul suo tempo piuttosto che a sfornare il codice il più velocemente possibile. Ed è così che funziona la maggior parte dei progetti, semplicemente non c'è tempo per addestrare le persone ad avere le competenze necessarie per fare il lavoro in modo che i giovani rimangano penzoloni, buono solo per prendersi la colpa per i sovraccarichi di bilancio.
jwenting

@William Pietri: nella mia esperienza l'associazione non è un buon formato per insegnare. Non ho problemi a prendere qualcuno e guidarlo attraverso il codice per spiegare loro cosa sta succedendo. Tuttavia, questa non è una programmazione di coppia.
dietbuddha,

@jwenting: se stai dicendo che la programmazione delle coppie non funzionerà bene nei negozi che si concentrano sulle scadenze delle cazzate su qualità e sostenibilità, non direi. Il mio consiglio: lavora da qualche parte che non è pazzo.
William Pietri,

@dietbuddha: funziona per me! Il modo più veloce per me di imparare una nuova lingua, un framework o una libreria è fare coppia con persone che lo conoscono bene. E non conosco un modo migliore per accelerare un noob che l'accoppiamento. Ad esempio, questa versione dell'esperienza: slesinsky.org/brian/code/starting_xp.html
William Pietri,

3

Sono sia un programmatore che un manager. Ecco la mia opinione:

Lo scambio regolare è fantastico. Preferisco scambiare 2-4 volte al giorno, il che è più veloce di quanto penso tu possa fare. Per noi, questo arriva in punti di rottura naturali: generalmente pranzo e metà pomeriggio. Cambiare ogni giorno o due probabilmente va bene, ma mi preoccuperei di andare molto più a lungo. (Ho sentito parlare di un posto scambiarsi raramente come ogni sei settimane, che penso sia pazzo; dopo tanto tempo insieme saresti pronto a pugnalare un santo.)

Come programmatore lo adoro perché ottengo nuove prospettive, controllo altre aree del codice e posso attenermi o passare da qualcosa come preferisco. Di recente sono passato dal codice in solitario al pairing e sono elettrizzato: imparo di più, mi diverto di più e faccio di più.

Come manager, penso che sia fantastico perché risolve molti problemi legati al fattore camion e al collo di bottiglia. Ad esempio, questo fine settimana sto prendendo un lungo weekend per il matrimonio di un amico, e non sono affatto preoccupato: tutto ciò su cui ho lavorato è stato lavorato anche da altre persone. Penso anche che aiuti davvero i membri del team ad apprezzare reciprocamente i punti di forza e di debolezza e incoraggiare la proprietà del codice collettivo.

Per quanto riguarda chi rimane con il lavoro attuale, sento che dipende principalmente dalle persone coinvolte. A volte vuoi vedere qualcosa attraverso, a volte sei pronto per un cambiamento. A volte scambiamo anche per portare esperienza, o così qualcuno può imparare qualcosa a cui sono interessati. Cerchiamo di mantenere le nostre unità di lavoro piuttosto piccole (0,5-2,0 giorni al giorno), quindi non è un grosso problema comunque lo scambio va .


Per me devo dire che lo scambio è buono solo quando a) Non mi piace codificare con il ragazzo con cui sto codificando, b) Non mi piace la storia su cui sto lavorando (come sistemare una corda) vecchio bug di memoria). Altrimenti, voglio rimanere dall'inizio alla fine. Personalmente penso che lo scambio di coppie riduca la qualità del codice perché un buon codice dovrebbe avere un'unica visione chiara, più persone lavorano su una singola parte, più la visione diventa confusa. Per quanto riguarda la condivisione delle conoscenze, direi che la maggior parte delle persone ha un'idea di quello che sta succedendo, ma nessuno capisce davvero nulla.

@B Tyler - Penso che una base di codice sia un lavoro intellettuale congiunto, quindi devi avere una visione chiara che sia anche una visione comune. Questo fa parte del motivo per cui penso sia importante scambiare: ci vuole molta interazione e discussione per sviluppare un solido approccio condiviso.
William Pietri,

1

Ok, ecco la risposta di un autoproclamato programmatore agile / xp pragmatico. Lavoro in coppia da più di due anni. Se la programmazione delle coppie è buona, scambiare le coppie frequentemente (idealmente ogni due ore, se non ogni mezza giornata). Nel nostro ufficio, facciamo in modo di scambiare coppie ogni giorno (di solito) o ogni due giorni (nel caso peggiore). Farlo di per sé potrebbe darci molta fiducia nella qualità del codice che commettiamo e apprendiamo o portiamo via con ogni rotazione di coppia (sappiamo che la revisione del codice è buona, più è meglio e prima è più bello. Questo è ciò che "realizza la programmazione di coppie, inclusa la pratica di scambiare coppie" ).

Perché non cambiamo coppia ogni due / quattro ore? Bene, in realtà sono stato in squadre che praticano anche questo. Certamente è molto più fresco e produttivo. Ma ecco l'affare, l'intervallo di tempo delle coppie di scambio non dovrebbe essere una regola, dovrebbe accadere da solo; solo allora il manager o l'azienda possono vedere i suoi benefici.

Ho visto e vissuto questo. Ora sono il suo evangelista. Non è una teoria. Piuttosto è completamente pragmatico :) Felice accoppiamento ping-pong e coppie di scambio.


1
Purtroppo ora sono totalmente convertito all'opinione che la programmazione di coppia sia in genere una cattiva idea; lo scambio frequente di coppie nella programmazione delle coppie peggiora le cose. Ho ascoltato tutta la teoria e l'ho provata molto in pratica e penso solo che sia incredibilmente inefficiente, molto più noioso e frustrante della programmazione solista e porta a un codice di qualità inferiore.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.