La maggior parte degli sviluppatori tendono a vedere compiti come quelli architettonici, mentre sono di natura amministrativa. Per implementarlo correttamente, è necessario modificare il flusso di lavoro, non il codice! Considera, cosa succederebbe se, dopo tutte le tue correzioni, la vecchia squadra tornasse e continuasse i suoi vecchi modi? La maggior parte del tuo lavoro verrebbe sprecata immediatamente!
Nota che il tuo comando non sarà in grado di ottenere miglioramenti senza il supporto delle parti interessate. Nella maggior parte dei casi, ciò significa che stai chiedendo l'impossibilità, in quanto il capo squadra non è in grado di comunicare il concetto di debito tecnico al proprietario del prodotto. Il tuo compito come sviluppatore è quello di raccogliere prove obiettive, che l'architettura corrente diminuisce il valore del progetto del progetto rallentando il progresso e introducendo bug.
Non cambiare nulla senza una ragione. Non iniziare mai nessuna modifica solo perché non ti piace l'implementazione corrente.
Introduci le politiche applicate dal capo squadra e seguite da tutti:
- L'integrazione continua e la pre-convalida non sono un'opzione - lo sono
supporto vitale.
- Revisione del codice: nessuna modifica deve essere unita fino a quando non viene completata
passa l'intera suite di test e una revisione da parte di un altro sviluppatore.
- Ogni modifica dovrebbe migliorare le proprietà architettoniche del codice base. Ciò implica qualsiasi refactoring necessario per raggiungere un determinato compito, ma niente di più. I modi esatti per farlo potrebbero essere ottenuti da altre risposte, ma non dovrebbero. È responsabilità del tuo team sia migliorare la progettazione attuale sia mantenere un minimo di modifica. In particolare, la maggior parte dei test di integrazione non richiede una grande riscrittura, e il test non dovrebbe essere un motivo per toccare migliaia di file che introducono la testabilità dell'unità.
- Ogni cambiamento dovrebbe introdurre più esami rilevanti di passaggio (qualsiasi tipo di
test automatici, non necessariamente unità).
- Ogni correzione di bug dovrebbe includere un test di regressione che fallisce prima di cambiarlo e passarlo dopo.
- Con ogni revisione del codice, discuti le decisioni più importanti prese e riutilizzate
loro nelle revisioni seguenti. Non cercare di documentarli, non è così
lavorare, basta sviluppare la sinergia del tuo team e propagarlo usando
recensioni. Le decisioni possono includere alcune modifiche architettoniche proposte in
altre risposte, il risultato esatto è irrilevante, cerca solo di usare
la tua esperienza di membri rispettati.
Questi requisiti rafforzano la propagazione dell'esperienza e facilitano la coerenza nella base di codice. Sfortunatamente si basano molto sull'esperienza personale dei membri del tuo team, quindi il successo del team sarà limitato dal tuo miglior senior. Questo è inevitabile, ma può essere alleviato un po 'imparando le migliori pratiche da fonti esterne come questo SE.
Questo non significa che devi lasciare il casino com'è. Per ogni richiesta di modifica del comportamento funzionale o di correzione di un bug, esaminare un ambito di modifica. L'ambito dovrebbe includere il necessario refactoring che lascerebbe uno stato più pulito e una buona copertura di prova. Tale ambito sarebbe grande fintanto che il codice base è un casino. Ridurrà di dimensioni se seguirai sempre il principio del boy-scout. La chiave del successo è riutilizzare le risorse già esistenti, introducendo il nuovo valore in modo incrementale.