Che cos'è il Modello di maturità per l'eccellenza ingegneristica?
Chi sviluppa di solito sa bene quali sono i punti dolenti del codice. Più difficile è mettersi d'accordo come team su quali problemi contano di più e a che punto siete nel risolverli. Con il Modello di maturità per l'eccellenza ingegneristica il team valuta 12 pratiche suddivise in quattro gruppi (Qualità del codice e standard, Architettura e scalabilità, Gestione del debito tecnico, Collaborazione e abilitazione ingegneristica) su una scala a cinque livelli, da Ad hoc a Ottimizzato. Poiché ogni livello è descritto, le valutazioni trasformano sensazioni vaghe sulla qualità in qualcosa di concreto: code review che individuano i bug ma non diffondono la conoscenza, oppure un debito tecnico che tutti conoscono ma che nessuno traccia. Questo linguaggio comune aiuta sviluppatori e responsabili a concordare cosa migliorare per primo. Ripetendolo con regolarità vedrete se le modifiche introdotte hanno fatto salire le pratiche di un livello.
Dimensioni
Qualità del codice e standard
Quanto coerentemente il team scrive codice pulito, manutenibile e ben revisionato, seguendo standard condivisi.
Coerenza degli standard di codifica
Quanto coerentemente il team applica linee guida di codifica condivise.
- Ad hocLe pratiche di codifica variano molto; non si seguono standard condivisi.
- EmergenteEsistono alcuni standard, ma vengono applicati in modo incoerente.
- DefinitoGli standard sono documentati e di solito rispettati.
- GestitoGli standard sono applicati con coerenza e rivisti regolarmente.
- OttimizzatoLa cultura della qualità del codice è solida; gli standard evolvono grazie alla collaborazione e alle best practice.
Manutenibilità del codice
La facilità con cui il codice può essere letto, compreso, modificato ed esteso.
- Ad hocIl codice è difficile da leggere, da navigare o da riutilizzare.
- EmergenteSono stati fatti alcuni miglioramenti, ma i problemi di manutenibilità persistono.
- DefinitoIl codice è in gran parte comprensibile e manutenibile.
- GestitoIl codice è pulito, modulare e prevedibile, con solide pratiche di manutenibilità.
- OttimizzatoLa manutenibilità è una norma culturale; i team migliorano ed evolvono in modo proattivo la struttura del codice.
Qualità delle code review
Quanto efficacemente le code review migliorano la qualità e l'apprendimento del team.
- Ad hocLe review sono rare, frettolose o superficiali.
- EmergenteLe review si fanno, ma variano molto per profondità e utilità.
- DefinitoLe review individuano i problemi e migliorano la qualità in modo affidabile.
- GestitoLe review sono costruttive, coerenti e migliorano sia la qualità sia le competenze del team.
- OttimizzatoLe review sono collaborative, ricche di conoscenza e parte integrante dell'eccellenza ingegneristica.
Architettura e scalabilità
Quanto è chiara l'architettura del sistema e quanto bene il sistema scala, offre prestazioni e gestisce il rischio tecnico.
Chiarezza architetturale
Quanto l'architettura del sistema è definita, documentata e compresa.
- Ad hocL'architettura non è chiara o non è documentata.
- EmergenteEsiste un po' di documentazione, ma è incompleta o poco chiara.
- DefinitoL'architettura è documentata e compresa dalla maggior parte del team.
- GestitoL'architettura orienta le decisioni ed evolve attraverso una collaborazione strutturata.
- OttimizzatoL'architettura è scalabile, intenzionale e affinata di continuo in base a insight e apprendimenti.
Scalabilità e robustezza
La capacità del sistema di reggere la crescita, le esigenze di prestazioni e i requisiti di affidabilità.
- Ad hocIl sistema fatica sotto carico; la scalabilità non è pianificata.
- EmergenteAlcuni componenti scalano, ma restano dei limiti.
- DefinitoIl sistema gestisce il carico tipico con prestazioni accettabili.
- GestitoIl sistema scala in modo affidabile e le prestazioni sono monitorate e ottimizzate attivamente.
- OttimizzatoLa scalabilità è un punto di forza; il sistema assorbe la crescita in modo fluido e prevedibile.
Gestione del rischio tecnico
Quanto efficacemente i rischi tecnici vengono identificati, valutati e mitigati.
- Ad hocI rischi emergono tardi e causano disagi significativi.
- EmergenteI rischi vengono discussi occasionalmente, ma non sono gestiti in modo sistematico.
- DefinitoI rischi vengono identificati in fase di pianificazione e affrontati quando serve.
- GestitoUna valutazione strutturata dei rischi consente una mitigazione proattiva.
- OttimizzatoLa gestione del rischio è integrata in tutti i processi ingegneristici e previene i problemi gravi.
Gestione del debito tecnico
Quanto il debito tecnico è visibile, tracciato, ridotto e collegato al suo impatto sulla delivery.
Visibilità del debito
Come il debito tecnico viene identificato, tracciato e comunicato.
- Ad hocIl debito tecnico è nascosto e non gestito.
- EmergenteC'è una certa consapevolezza del debito, ma raramente viene documentato.
- DefinitoIl debito viene tracciato e rivisto periodicamente.
- GestitoIl backlog del debito è prioritizzato e incluso nella pianificazione.
- OttimizzatoVisibilità e prevenzione del debito sono pratiche ingegneristiche fondamentali.
Pratiche di riduzione del debito
Quanto efficacemente il team affronta e riduce il debito tecnico.
- Ad hocIl debito si accumula senza interventi.
- EmergenteDel debito si parla, ma raramente viene risolto.
- DefinitoIl debito viene affrontato quando possibile.
- GestitoLa riduzione del debito è proattiva e fa parte del lavoro ordinario.
- OttimizzatoIl team mantiene il debito al minimo grazie a un'ingegneria disciplinata e al miglioramento continuo.
Consapevolezza dell'impatto
Comprensione di come il debito tecnico influisce su velocità, qualità e rischio.
- Ad hocIl team non collega il debito tecnico ai problemi di delivery.
- EmergenteC'è una certa consapevolezza, ma le azioni sono limitate.
- DefinitoL'impatto del debito è compreso e influenza alcune decisioni.
- GestitoL'impatto del debito guida costantemente pianificazione e prioritizzazione.
- OttimizzatoUna forte cultura attenta al debito ne previene l'accumulo e sostiene una velocità sostenibile.
Collaborazione e abilitazione ingegneristica
Quanto efficacemente il team condivide la conoscenza, diffonde le competenze e fornisce agli sviluppatori gli strumenti per lavorare al meglio.
Condivisione della conoscenza
Quanto efficacemente conoscenze e competenze tecniche vengono condivise all'interno del team.
- Ad hocLa conoscenza è chiusa in silos; il rischio legato al bus factor è alto.
- EmergenteUn po' di condivisione avviene, ma in modo discontinuo.
- DefinitoLa conoscenza viene condivisa attraverso canali informali o strutturati.
- GestitoLa conoscenza circola senza intoppi; l'onboarding è efficiente.
- OttimizzatoCultura altamente collaborativa, con apprendimento continuo e ownership condivisa.
Ampiezza delle competenze e flessibilità
La capacità del team di lavorare su più aree del sistema.
- Ad hocSilos marcati creano colli di bottiglia dovuti alle dipendenze.
- EmergenteDi tanto in tanto si sviluppano competenze trasversali.
- DefinitoI membri del team riescono a coprire la maggior parte delle aree principali.
- GestitoGrande flessibilità; il team si adatta rapidamente ai carichi di lavoro.
- OttimizzatoCompetenze profonde e ampie in tutto il team consentono una delivery rapida e resiliente.
Abilitazione degli sviluppatori
Qualità di strumenti, processi e ambiente a supporto della produttività degli sviluppatori.
- Ad hocGli strumenti sono obsoleti o incoerenti; l'attrito è elevato.
- EmergenteSono in corso miglioramenti, ma restano delle lacune.
- DefinitoGli sviluppatori dispongono di strumenti affidabili che soddisfano le esigenze di base.
- GestitoGli strumenti sono snelli, efficienti e migliorati costantemente.
- OttimizzatoUna developer experience di altissimo livello che permette un lavoro ingegneristico rapido e di alta qualità.
Quando utilizzare questo controllo dello stato di salute
- Per stabilire una baseline della maturità tecnica del team di sviluppo su codice, architettura e collaborazione.
- Nelle retrospettive trimestrali o di rilascio, per seguire l'evoluzione delle pratiche ingegneristiche.
- Quando arriva un nuovo responsabile tecnico che ha bisogno di un quadro sincero dei punti di forza e delle lacune attuali.
- Prima di investire in strumenti, refactoring o cambiamenti di processo, per decidere dove l'impegno renderà di più.
- Quando il team cresce e volete che standard, condivisione della conoscenza e architettura tengano il passo.
Consigli e suggerimenti
- Fate valutare ciascuno in autonomia prima della discussione, così le opinioni sincere emergono prima che subentri il pensiero di gruppo.
- Dedicate la maggior parte del tempo alle dimensioni con i punteggi più dispersi. Il disaccordo spesso rivela dove le persone vedono il sistema in modo diverso.
- Considerate i livelli come gradini, non come voti. Passare da Emergente a Definito è un progresso reale, quindi ditelo.
- Scegliete una o due dimensioni da migliorare prima del prossimo check, invece di cercare di far progredire tutto insieme.
- Ripetetelo con cadenza regolare, così i progressi nelle pratiche ingegneristiche restano visibili.