Mi è stato affidato il compito di insegnare ad altri team un nuovo codice, ma continuo a riscontrare un problema. Ogni volta che vado a conoscere il codice con le persone, non andiamo molto lontano prima che l'intero esercizio diventi un vendita delle biciclette (membri di un'organizzazione che danno peso sproporzionato a problemi banali) esercizio fisico. Dal momento che non conoscono il codice base, ma pensano di doverlo aiutare a migliorarlo, si concentrano sulle cose che possono capire:
Why is that named that?
(2 minuti per spiegare perché è chiamato così, più di 10 minuti discutendo un nuovo nome)
Why is that an abstract base class rather than an interface?
(2 minuti per spiegare, 10+ minuti per discutere i meriti relativi di questa decisione)
... e così via. Ora, non fraintendetemi: nomi importanti e un design valido e coerente sono importanti, ma non siamo mai in grado di discutere di cosa il del codice in realtà o di come il sistema sia progettato in modo significativo. Ho fatto alcuni incontri con gli arbitri per far uscire le persone da queste tangenti, ma sono sparite, distratte da ciò che il codice dovrebbe / dovrebbe essere quando la loro trivialità domestica viene sistemata, e perdono l'immagine più grande.
Quindi riproviamo più tardi (o con una parte diversa della base di codice) e poiché le persone non hanno abbastanza conoscenze per superare l'effetto di spostamento della bici, si ripete.
Ho provato gruppi più piccoli, gruppi più grandi, codice, lavagna, diagrammi visio, muri giganti di testo, permettendo loro di discuterne fino alla morte, tagliando argomenti immediatamente ... alcuni aiutano più di altri, ma niente lavori . Al diavolo, ho persino provato ad avere altre persone del mio team che lo spiegavano perché pensavo che potessi essere solo io a spiegare le cose.
Quindi, come educare gli altri programmatori a sufficienza da smettere di fissarsi su banalità e possono contribuire significativamente alla progettazione?