title: Lean software development
text: # 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.
  
  