Descriverò la mia esperienza e cercherò di ricavarne qualche "strategia".
Una volta ho programmato una coppia con un non-programmatore completo. Era esperto sull'argomento del prodotto software che abbiamo sviluppato. Al contrario, non avevo esperienza nel dominio del problema. Ed era anche il mio supervisore al momento (so che potrebbe sembrare strano:)
Il principale vantaggio di questa metodologia è stato il fatto che dovevo spiegare l'implementazione di molte cose dal suo dominio della conoscenza, assicurando in tal modo l'esattezza dell'attuazione e la sua comprensione del processo, il che significava che capiva perché ci voleva questa volta.
Un altro vantaggio è la messa a fuoco facile del compito, senza distrazioni (ha-ha, immagina di aprire Twitter prima del naso del tuo capo).
A volte, tuttavia, era piuttosto scoraggiante, dal momento che persino una pausa per il tè è diventata piuttosto una "distrazione dal lavoro" (non dal suo punto di vista, era solo scomodo chiedere una pausa e così via).
Quindi, non si tratta di una vera e propria programmazione in coppia, dal momento che praticamente non è stato in grado di rivedere il codice durante la digitazione. Tuttavia, sembrava essere una strategia sensata (almeno per qualche tempo). Alla fine ha funzionato del tutto a causa della relativa semplicità di entrambe le metodologie di sviluppo (voglio dire, non sono state coinvolte complesse tecniche di progettazione del software come i modelli OOP) e l'argomento. Questo non funzionerebbe nel caso in cui dovessimo sviluppare un compilatore, penso. Credo che potrebbe ancora funzionare nel caso in cui l'osservatore non programmatore partecipi al processo di sviluppo di piccoli pezzi chiaramente definiti. Diciamo, è giusto che guardi la programmazione di una funzione "calcola il parametro X da Y e Z con un determinato algoritmo", ma potrebbe non essere così ok per fargli vedere il processo generale di progettazione del sistema (ovvero lo sviluppo dell'architettura software, cioè la gerarchia di classi, poiché è troppo astratto).
Penso che funzionerebbe ancora meglio nel caso in cui avesse alcune abilità di programmatore di base, dato che non dovrei spiegare "cos'è un array".
Spero che aiuti:)