Inventario nel software—codice che esiste ma non è in produzione.
Nella produzione, l'inventario è costituito da parti e prodotti che giacciono sugli scaffali—denaro immobilizzato, spazio consumato, valore non consegnato. La produzione snella ha notoriamente ridotto l'inventario quasi a zero.
Nel software, l'inventario è meno visibile ma altrettanto problematico:
Questo è lavoro parzialmente completato—sforzo investito ma valore non consegnato. È la forma più costosa di spreco perché rappresenta un investimento reale con rendimento zero.
Il Problema del Deterioramento
L'inventario fisico rimane su uno scaffale. L'inventario software si deteriora. Un branch non unificato diventa più difficile da unire ogni giorno man mano che il branch principale evolve. I documenti dei requisiti diventano obsoleti man mano che la comprensione cambia. Più a lungo il lavoro parzialmente completato rimane fermo, più sforzo è necessario per completarlo.
I team raramente creano inventario intenzionalmente. Si accumula attraverso:
Dimensioni dei lotti elevate: Più grande è la funzionalità, più tempo passa prima che sia completata. Un progetto di tre mesi rappresenta tre mesi di inventario prima che venga consegnato qualsiasi valore.
Sistemi push: Lavoro assegnato in base alla disponibilità piuttosto che alla capacità. Quando inizi più di quanto puoi finire, l'inventario cresce.
Feedback ritardato: Attesa per revisioni del codice, QA o approvazioni. Ogni coda è accumulo di inventario.
Lavoro prematuro: Iniziare elementi prima che siano necessari. Scrivere specifiche per funzionalità che potrebbero non essere realizzate. Progettare per requisiti futuri immaginati.
Paura di unificare: I team che hanno paura di integrare mantengono le modifiche isolate. Più aspettano, più spaventosa diventa l'integrazione, creando un circolo vizioso.
La soluzione non è lavorare più velocemente—è lavorare in modo più ridotto. Ridurre le dimensioni dei lotti. Implementare l'integrazione continua. Tirare il lavoro in base alla capacità, non spingerlo in base alle assegnazioni.
Un team ha 47 pull request aperte, alcune vecchie di mesi. Ognuna rappresenta un investimento che non sta consegnando valore. I conflitti di merge si accumulano. Il contesto viene perso. Alla fine, le PR vengono abbandonate completamente—spreco al 100%.
Un team effettua commit sul main più volte al giorno. Nessun branch vive più di poche ore. Le PR sono minuscole e revisionate rapidamente. L'inventario rimane vicino allo zero. Il lead time scende da settimane a ore.
Strategie per ridurre l'inventario:
Finire prima di iniziare: Stabilire limiti WIP. Prima di iniziare qualcosa di nuovo, finire qualcosa in corso. "Smetti di iniziare, inizia a finire."
Ridurre le dimensioni dei lotti: Suddividere funzionalità grandi in incrementi piccoli e indipendentemente preziosi. Rilasciare ogni incremento prima di iniziare il successivo.
Integrazione continua: Unificare sul main costantemente. Non lasciare che i branch vivano più di un giorno. Rendere l'integrazione noiosa attraverso la frequenza.
Cicli di feedback veloci: Se le PR aspettano giorni per la revisione, quello è inventario. Dare priorità alla revisione. Renderla veloce. Ancora meglio, fare pair programming così la revisione è integrata.
Eliminare il pre-lavoro: Non scrivere specifiche per funzionalità che non sono le prossime. Non progettare sistemi che non stai costruendo in questo sprint. Pianificazione just-in-time.
L'obiettivo è il flusso: il lavoro si muove attraverso il sistema senza accumularsi in nessuna fase. Quando vedi l'inventario accumularsi, hai trovato un ostacolo al flusso.
Misuralo
Conta il tuo lavoro in corso. Quanti elementi sono iniziati ma non completati? Quante PR sono aperte? Quanto codice non rilasciato esiste? Traccia questi numeri. Ridurli è solitamente il percorso più veloce verso una consegna più rapida.