Lean Development: principi di base e best practice Introduzione all'approccio Lean Software Development, un sistema di principi e pratiche di sviluppo software basato sul pensiero snello e sulla riduzione degli sprechi

Lean Development: principi di base e best practice

Il Lean Software Development è una metodologia di sviluppo agile ispirata ai principi della produzione snella (nota anche come lean manufacturing o lean production), una filosofia produttiva che punta a minimizzare gli sprechi fino ad annullarli. Il termine è stato coniato all'interno dell' omonimo libro scritto nel 2003 da Mary e Tom Poppendieck, due project manager molto attivi all'interno della Agile community, che contiene la descrizione dei principali approcci metodologici e strumenti operativi del sistema.

Il Lean Software Development si compone di sette principi base, tutti considerati estremamente importanti all'interno della comunità Agile.

#1. Eliminare gli sprechi

Tutto ciò che non aggiunge valore al cliente va considerato come uno spreco. Esempi di spreco: codice e funzionalità non necessarie, ritardi nel processo di sviluppo del software, requisiti incerti, burocrazia, lenta comunicazione interna.

#2. Amplificare l'apprendimento

Lo sviluppo del software è un processo di apprendimento continuo, quindi il training & learning on the job, nonché la condivisione delle informazioni (knowledge sharing) costituisce un obiettivo primario.

#3. Decidere il più tardi possibile

Come misura di mitigazione delle incertezze, tipiche dello sviluppo del software moderno, si favorisce un approccio basato sulle opzioni, rinviando le decisioni fino a quando non si acquisiscono dati sufficienti per poter correggere previsioni e ipotesi potenzialmente imprecise (data-driven decision).

#4. Consegnare il più velocemente possibile

In questo particolare momento storico, contraddistinto da cambiamenti rapidi e continui, la velocità è il punto di forza dello sviluppo: per questo motivo le iterazioni devono essere prodotte nel più breve tempo possibile, così da poter ricevere i feedback da inserire nella successiva; da questo si evince anche che, quanto più corte sono le iterazioni, tanto migliore sarà la formazione e la comunicazione all'interno del team, nonché lo sviluppo del prodotto.

#5. Dare potere al team

Adozione della tecnica work-out, in cui i ruoli tra dirigenti e operativi si invertono: i manager sono tenuti ad ascoltare gli sviluppatori ed apprendere da loro il know-how necessario per poter effettuare di volta in volta le scelte più efficaci, nonché fornire proposte di miglioramento.

#6. Costruire l'integrità

E' importante che i clienti abbiano una percezione globale e ben definita del sistema (integrità percepita): come viene pubblicizzato, consegnato e distribuito, quanto è accessibile, quanto è intuitivo il suo utilizzo, quanto costa, quali problemi risolve e in che modo, etc.; inoltre, è importante che i singoli componenti del sistema funzionino bene insieme con un equilibrio tra flessibilità, manutenibilità, efficienza e reattività (integrità concettuale).

Per ottenere questi risultati è fondamentale il ricorso al refactoring, adottando un approccio che garantisca un miglioramento continuo (continuous improvement) e un sistema di rilasci frequente (continuous deployment) che consenta al software di evolvere in modo iterativo e veloce (continuous integration); è inoltre fondamentale adottare good practice di sviluppo (DRY - Don't Repeat Yourself et sim.) che consentano di mantenere semplicità, chiarezza e un numero minimo di funzioni all'interno del codice durante i vari refactoring, nonché un paradigma di test automatizzati (continuous testing, testing automation) per ridurre i difetti e i bug di regressione.

#7. Visione di insieme

I sistemi software al giorno d'oggi non sono semplicemente la somma delle loro parti, ma anche il prodotto delle loro interazioni. I difetti nel software tendono ad accumularsi durante il processo di sviluppo: segmentando le varie funzioni in sotto-processi più piccoli (segmentation) e standardizzando le diverse fasi dello sviluppo (standardization) è possibile individuare ed eliminare le cause alla radice dei difetti. Questo è particolarmente vero nei sistemi complessi, dove più organizzazioni sono coinvolte nel suo sviluppo ed esistono numerosi team di sviluppo: in quei casi è importante anche stringere relazioni ben definite tra diversi fornitori, al fine di produrre un sistema con componenti che interagiscono senza problemi.

Modalità di adozione

Il pensiero snello, per essere applicato con successo all'interno di un gruppo di lavoro, deve essere compreso bene da tutti i membri del team.

"Pensa in grande, agisci in piccolo, fallisci velocemente; impara rapidamente": questi slogan, presenti nel libro dei Poppendieck, riassumono bene l'importanza della comprensione del campo e l'idoneità dell'implementazione di principi snelli lungo l'intero processo di sviluppo del software:  i principi lean funzionano bene solo qunado sono implementati insieme, a patto di riuscire a sviluppare un sufficiente "buon senso" all'interno di tutto l'ambiente di lavoro coinvolto.

Lean Startup

Qualche anno dopo la diffusione degli approcci Lean applicati ai settori del manifatturiero, della produzione e - per esteso - dello sviluppo software, un imprenditore di nome Eric Ries ha provato ad applicare i medesimi principi base alle tecniche di lancio sul mercato di nuovi prodotti o servizi: in una parola, al mondo dell'imprenditoria. Nasce così la metodologia nota come Lean Startup, un approccio radicale per il lancio di idee e attività innovative che aiuta ad individuare un percorso verso un business sostenibile, riducendo drasticamente tempi e costi, e, di conseguenza, la possibilità di fallire.

La metodologia, elaborata nel 2008 propone un processo di ideazione-verifica-modifica continuo, con un massiccio uso del web, volto ad adattare passo dopo passo il prodotto alle necessità dei clienti, tenendo sotto controllo i costi. Questo approccio, palesemente ispirato al total quality (ISO 9001, PDCA) e alle metodologie di sviluppo Agile (continuous improvement, continuous feedback), è  solitamente utilizzato per ridurre le spese e le perdite di tempo, dando al progetto una maggior probabilità di successo.

E' importante comprendere che, nonostante i principi ispiratori siano grossomodo i medesimi, Lean Development e Lean Startup sono due concetti del tutto diversi e che non vanno dunque confusi o sovrapposti in alcun modo.

Conclusioni

Per il momento è tutto: ci auguriamo che questo piccolo approfondimento possa essere d'aiuto a chi ha deciso di avvicinarsi a questo interessantissimo e moderno set di good practice per lo sviluppo software.

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.