Quando si tratta di una struttura organizzativa in un contesto agile, molte persone sostengono che i team di caratteristiche sono in genere una scelta migliore rispetto ai team di componenti. Questo almeno è quello che trovo quando discuto con i colleghi, sia nella mia attuale che nella mia precedente posizione. Inoltre, Larman e Vodde discutono con veemenza contro i team di componenti (Practices for Scaling Lean & Agile Development) e hanno portato questa posizione anche nello Scrum Primer ( link ).
Esistono tuttavia fonti che indicano che la scelta tra team di componenti e componenti non è una decisione "tutto o niente" e che ci sono criteri che possono rendere una scelta saggia (almeno un paio di componenti). Ad esempio, in link gli autori indicano che un alto grado di riutilizzabilità e un alto grado di specializzazione tecnologica sono criteri che rendono favorevoli i team di componenti per quella rispettiva parte del sistema. Anche Mike Cohn e Ken Rubin nei loro libri hanno una visione più equilibrata.
Nel mio ambiente professionale (fornitori automobilistici) ci sono tradizionalmente molti team di componenti. Quando si passa a un modo di lavorare agile, molti colleghi pensano che, stando con una struttura di componenti, la direzione farebbe qualcosa di fondamentalmente sbagliato. Non lo vedo in questo modo per diversi motivi:
- In primo luogo, ciò che un fornitore automobilistico offre come prodotto è, dal punto di vista del veicolo, solo un componente. Le caratteristiche effettive del cliente sono a livello del veicolo. Quindi, di conseguenza e idealmente, i team di feature dovrebbero lavorare su un veicolo trasversale (attraverso i confini di fornitore e OEM). Questo, tuttavia, non è mai nemmeno discusso come un possibile modo di lavorare.
- Ci sono lotti di componenti in uso, come sistemi operativi (Linux, QNX, AutoSar, ...), librerie standard, librerie di terze parti (navigazione, riconoscimento vocale), librerie open source , ... E, per la maggior parte di queste librerie, nessuno ha l'esperienza per migliorare comunque gli interni della biblioteca. Per dirla in modo un po 'sarcastico: avere altri team che sviluppano componenti da usare è a portata di mano, ma lo sviluppo di componenti nella propria organizzazione agile è una cattiva scelta?
- E, certamente, ci sono molte aree in cui persone e team hanno sviluppato una profonda esperienza su anni e, dove questa competenza è veramente essenziale per evitare costosi ritorni sul campo. Sviluppare una strategia di aggiornamento del software che funzioni in tutte le circostanze sul campo con power-drop che si verificano in momenti arbitrari è qualcosa che solo pochi possono fare. Quindi c'è un alto rischio se tutti in un progetto più grande possono apportare modifiche a tale albero dei sorgenti. Allo stesso modo, le funzionalità di sicurezza sono ovunque, ma solo pochi comprendono i dettagli, anche i protocolli di comunicazione specifici del veicolo ecc.
Ora la mia domanda: quali altri criteri (ad eccezione del grado di riutilizzo e delle competenze tecniche) vedete che potrebbe rendere i team di componenti in determinati scenari di sviluppo software favorevoli mentre si lavora in un contesto agile?