# Desenvolupament de programari Lean

El desenvolupament de programari Lean és una traducció dels principis i pràctiques de fabricació ajustada al domini del desenvolupament de programari. Adaptat del Toyota Production System, està sorgint amb el suport d'una subcultura pro-lean dins de la comunitat àgil. Lean ofereix un marc conceptual sòlid, valors i principis, així com bones pràctiques, derivades de l'experiència, que donen suport a les organitzacions àgils.

## Origen

L'expressió "desenvolupament de programari ajustat" es va originar en un llibre del mateix nom, escrit per Mary Poppendieck i Tom Poppendieck el 2003. El llibre reafirma els principis tradicionals Lean, així com un conjunt de 22 eines i compara les eines amb les pràctiques àgils corresponents. La participació dels Poppendieck en la comunitat de desenvolupament de programari àgil, incloses les xerrades a diverses conferències Agile ha donat com a resultat que aquests conceptes siguin més àmpliament acceptats dins de la comunitat àgil.

## Principis Lean

El desenvolupament Lean es pot resumir en set principis, molt propers en concepte als principis de manufactura Lean:
* Eliminar els residus
* Amplificar l'aprenentatge
* Decidiu el més tard possible
* Lliurament el més ràpid possible
* Potenciar l'equip
* Construeix la integritat
* Optimitzar el conjunt

## Eliminar els residus

La filosofia Lean considera que tot allò que no afegeix valor al client és un residu (muda). Aquests residus poden incloure:
* Treball parcialment fet
* Característiques addicionals
* Reaprenentatge
* Canvi de tasques
* Esperant
* Lliuraments
* Defectes
* Activitats de gestió

## Amplificar l'aprenentatge

El desenvolupament de programari és un procés d'aprenentatge continu basat en iteracions en escriure codi. El disseny de programari és un procés de resolució de problemes en què els desenvolupadors escriuen el codi i el que han après. El valor del programari es mesura segons l'aptitud per al seu ús i no segons els requisits.

## Decidiu el més tard possible

Com que el desenvolupament de programari sempre s'associa amb certa incertesa, s'han d'aconseguir millors resultats amb un enfocament basat en conjunts o en opcions, retardant les decisions tant com sigui possible fins que es puguin prendre basant-se en fets i no en supòsits i prediccions incertes. Com més complex sigui un sistema, més capacitat de canvi s'hauria d'incorporar-hi, permetent així el retard de compromisos importants i crucials. L'enfocament iteratiu promou aquest principi: la capacitat d'adaptar-se als canvis i corregir errors, que poden ser molt costosos si es descobreixen després del llançament del sistema.

## Lliurament el més ràpid possible

En l'era de la ràpida evolució de la tecnologia, no és el més gran el que sobreviu, sinó el més ràpid. Com més aviat es lliuri el producte final sense defectes importants, més aviat es podran rebre comentaris i incorporar-los a la següent iteració. Com més curtes siguin les iteracions, millor serà l'aprenentatge i la comunicació dins de l'equip. Amb la rapidesa, les decisions es poden retardar. La velocitat assegura el compliment de les necessitats actuals del client i no les que requerien ahir. Això els dona l'oportunitat de retardar la decisió sobre el que realment necessiten fins que adquireixin un millor coneixement. Els clients valoren el lliurament ràpid d'un producte de qualitat.

## Potenciar l'equip

Hi ha hagut una creença tradicional en la majoria de les empreses sobre la presa de decisions a l'organització: els directius expliquen als treballadors com han de fer la seva pròpia feina. En una tècnica d'entrenament, els rols es canvien: els gestors se'ls ensenya a escoltar els desenvolupadors, perquè puguin explicar millor quines accions es podrien dur a terme, així com oferir suggeriments de millora. L'enfocament magre segueix el principi àgil "construeix projectes al voltant d'individus motivats [...] i confia en ells per fer la feina", fomentant el progrés, detectant errors i eliminant els impediments, però no la microgestió.

## Construeix la integritat

El client ha de tenir una experiència global del sistema. Aquesta és l'anomenada integritat percebuda: com s'anuncia, s'entrega, es desplega, s'accedeix, com d'intuïtiu és el seu ús, el seu preu i com resol els problemes.

## Optimitzar el conjunt

Els sistemes de programari moderns no són simplement la suma de les seves parts, sinó també el producte de les seves interaccions. Els defectes del programari tendeixen a acumular-se durant el procés de desenvolupament: descomponent les tasques grans en tasques més petites i estandarditzant les diferents etapes de desenvolupament, s'han de trobar i eliminar les causes arrels dels defectes. Com més gran sigui el sistema, més organitzacions participen en el seu desenvolupament i més parts desenvolupen els diferents equips, més gran és la importància de tenir relacions ben definides entre diferents proveïdors, per tal de produir un sistema amb components que interactuen sense problemes. Durant un període de desenvolupament més llarg, una xarxa de subcontractistes més forta és molt més beneficiosa que l'optimització de beneficis a curt termini, que no permet relacions de benefici mutu.

## Pràctiques de programari Lean

Les pràctiques de desenvolupament de programari Lean, o el que els Poppendieck anomenen "eines" es relacionen lleugerament amb els equivalents originals en el desenvolupament de programari àgil. Alguns exemples d'aquestes pràctiques inclouen:
* Observar residus
* Mapatge de flux de valor
* Desenvolupament basat en conjunts
* Sistemes de tracció
* Teoria de la cua
* Motivació
* Mesura
* Desenvolupament basat en proves
Com que el desenvolupament de programari àgil és un terme paraigua per a un conjunt de mètodes i pràctiques basats en els valors i principis expressats en el Manifest àgil, el desenvolupament de programari ajustat es considera un mètode de desenvolupament de programari àgil.

## Referències

* ↑ Mary Poppendieck. Lean Software Development: An Agile Toolkit (en anglès). Addison-Wesley Professional, 2003. ISBN 978-0-321-15078-3.
* ↑ Mary Poppendieck. Lean Software Development: An Agile Toolkit (en anglès). Addison-Wesley Professional, 2003, p. 13–15. ISBN 978-0-321-15078-3.
* ↑ Mary Poppendieck. Lean Software Development: An Agile Toolkit (en anglès). Addison-Wesley Professional, 2003, p. 19–22. ISBN 978-0-321-15078-3.
* ↑ «12 Principles Behind the Agile Manifesto - Agile Alliance» (en anglès). agilealliance.org, 04-11-2015.
* ↑ Mark Lines. Disciplined Agile Delivery: A Practitioner's Guide to Agile Software Delivery in the Enterprise (en anglès). IBM Press, 2012, p. 54–. ISBN 978-0-13-281013-5.
* ↑ «What is Agile Software Development?» (en anglès). agilealliance.org, 29-06-2015.