# Lean software development

Il Lean Software Development è una traduzione della Produzione Snella (in inglese lean production o lean manufacturing) e dei principi e pratiche del Lean IT nel dominio dello sviluppo software. Adattato dal Toyota Production System, una sottocultura pro-lean sta rapidamente emergendo dall'interno della comunità Agile.

## Origini

Il termine Lean Software Development ha avuto origine in un libro omonimo, scritto da Mary Poppendieck e Tom Poppendieck. Il libro presenta i tradizionali Principi Snelli in forma modificata, così come un insieme di 22 tool che vengono confrontati e comparati con le pratiche agili. Il coinvolgimento di Mary e Tom nelle comunity legate all'Agile software development, incluso la loro presenza come relatori a numerose conferenze Agili, ha fatto sì che tali concetti fossero più ampiamente accettati e condivisi all'interno della comunità Agile.

## Principi Lean

Lo sviluppo Lean potrebbe essere riassunto da sette principi, molto vicini concettualmente a quelli della Produzione snella.

### Eliminare gli sprechi

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

### Amplificare l'apprendimento

Lo sviluppo del software è un processo di apprendimento continuo con la sfida aggiuntiva dei team di sviluppo e delle dimensioni del prodotto finale. L'approccio migliore per migliorare un ambiente di sviluppo software è quello di massimizzare l'apprendimento.

### Decidere il più tardi possibile

Dato che lo sviluppo del software è sempre associato con qualche incertezza, i risultati migliori dovrebbero essere raggiunti con un approccio basato sulle opzioni, rinviando le decisioni il più possibile fino a che non può essere effettuata sulla base di fatti e non su previsioni ed ipotesi incerte.

### Consegnare il più velocemente possibile

Nell'era della rapida evoluzione tecnologica, non è il più grande che sopravvive, ma il più veloce. Quanto prima il prodotto finale viene fornito senza difetti considerevoli, tanto prima possono essere ricevuti i feedback, ed inseriti nella prossima iterazione. Quanto più corte sono le iterazioni, tanto migliore sarà la formazione e la comunicazione all'interno del team.

### Dare potere al team

Per lungo tempo c'è stata un'opinione diffusa, nella maggior parte delle aziende, riguardo al processo decisionale per l'organizzazione: i dirigenti erano abituati a dire ai lavoratori come svolgere il proprio lavoro. Nella tecnica work-out, i ruoli si trasformano: ai manager si insegna ad ascoltare gli sviluppatori, in modo da poter essere in grado di spiegare meglio le azioni che possono essere adottate, nonché fornire proposte di miglioramento.

### Integrità nella costruzione

Il cliente deve avere una esperienza complessiva del sistema - questa è la cosiddetta integrità percepita: il modo in cui viene pubblicizzato, consegnato, diffuso, accesso, quanto intuitivo è il suo utilizzo, il prezzo e quanto risolva dei problemi.

### Vedere il tutto

I sistemi software al giorno d'oggi non sono semplicemente la somma delle loro parti, ma anche il prodotto delle loro interazioni.

## Pratiche del Lean software

Le pratiche di sviluppo software Lean, o ciò che i Poppendieck chiamano "strumenti" sono espressi in modo leggermente diverso dai loro equivalenti nello sviluppo di software agile, ma ci sono degli evidenti paralleli. Esempi di tali pratiche includono:
* Vedere gli sprechi
* Value Stream Mapping
* Sviluppo basato sui Set
* Sistemi pull
* Teoria delle code
* Motivazione
* Misure & metriche
Alcuni di questi strumenti trovano facilmente riscontro nei metodi agili. Lean Workcells, per esempio sono espressi nei metodi agili come team inter-funzionali.