Mi è stato assegnato il compito di insegnare ad altri team una nuova base di codice, ma continuo a riscontrare un problema. Ogni volta che vado a esaminare il codice con le persone, non andiamo molto lontano prima che l'intero esercizio si trasformi in un esercizio di bikeshedding (membri di un'organizzazione che dà peso sproporzionato a questioni banali). Dal momento che non conoscono la base di codice, ma pensano di dover contribuire a migliorarlo, si concentrano sulle cose che possono capire:
Why is that named that?
(2 minuti per spiegare perché prende il nome, 10+ minuti discutendo un nuovo nome)
Why is that an abstract base class rather than an interface?
(2 minuti per spiegare, 10+ minuti discutendo i meriti relativi di questa decisione)
...e così via. Ora, non fraintendetemi: sono importanti nomi validi e un design coerente e coerente, ma non possiamo mai discutere di ciò che il codice effettivamente fa o di come il sistema è progettato in modo significativo. Ho incontrato alcuni arbitri per incontrare le persone fuori da queste tangenti, ma se ne sono andati - distratti da ciò che il codice sarà / dovrebbe essere quando la loro banalità da compagnia viene risolta, e loro perdono il quadro generale.
Quindi riproviamo più tardi (o con una parte diversa della base di codice) e poiché le persone non hanno avuto abbastanza conoscenze per superare l'effetto del ciclismo, si ripete.
Ho provato gruppi più piccoli, gruppi più grandi, codice, lavagna, diagrammi visio, gigantesche pareti di testo, lasciando che discutessero a morte, abbreviando immediatamente gli argomenti ... alcuni aiutano più di altri, ma niente funziona . Diavolo, ho anche provato a farlo spiegare ad altre persone dal mio team perché pensavo che potrei essere solo cattivo a spiegare le cose.
Quindi, come si educano abbastanza gli altri programmatori che smettono di fissarsi sulle banalità e possono contribuire significativamente alla progettazione?