<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gabriele Lana &#187; lean</title>
	<atom:link href="http://www.gabrielelana.it/archives/category/lean/feed" rel="self" type="application/rss+xml" />
	<link>http://www.gabrielelana.it</link>
	<description>on Agile Methodologies and Programming</description>
	<lastBuildDate>Sat, 04 Jun 2011 15:51:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>I Kanban sono Agili?</title>
		<link>http://www.gabrielelana.it/archives/188</link>
		<comments>http://www.gabrielelana.it/archives/188#comments</comments>
		<pubDate>Sun, 12 Sep 2010 16:10:09 +0000</pubDate>
		<dc:creator>Gabriele Lana</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[lean]]></category>

		<guid isPermaLink="false">http://www.gabrielelana.it/?p=188</guid>
		<description><![CDATA[Leggendo un commento di Piergiorgio e un post di Tony entrambi riferiti al mio ultimo post, ho capito che probabilmente non mi sono spiegato bene sulla faccenda del &#8220;poco Agile&#8221;, termine che suona molto vicino all&#8217;offesa :-)
Parto quotanto la parte incriminata

Per ogni fase ci possono essere un numero limitato di user stories, in questo modo [...]]]></description>
			<content:encoded><![CDATA[<p>Leggendo un commento di <a href="http://www.gabrielelana.it/archives/174">Piergiorgio</a> e un <a href="http://tonyxzt.blogspot.com/2010/09/wash-dishes-using-kanban.html">post</a> di Tony entrambi riferiti al mio ultimo <a href="http://www.gabrielelana.it/archives/174">post</a>, ho capito che probabilmente non mi sono spiegato bene sulla faccenda del &#8220;poco Agile&#8221;, termine che suona molto vicino all&#8217;offesa :-)</p>
<p>Parto quotanto la parte incriminata</p>
<blockquote><p>
Per ogni fase ci possono essere un numero limitato di user stories, in questo modo si possono facilmente identificare eventuali stalli, fasi problematiche, sprechi di vario genere ecc…, peccato che tutto questo sia molto lontano dall’essere Agile… perchè? Semplice il limite è imposto sulle fasi, si presuppone quindi che ogni fase sia un sottosistema dimensionabile a piacere per equilibrare il flusso delle user stories fino al loro completamento, una fabbrica insomma, alla fine siamo tornati al waterfall (il cravattato ci prova sempre, non c’è niente da fare)</p>
<p>Molto più Agile e sensato sarebbe limitare la capacità produttiva del team sulle dimensioni del team stesso, banalmente una user story per sviluppatore, al limite per coppia di sviluppatori. Ad ogni sviluppatore assegnamo una calamita, le user story appese alla lavagna sono in lavorazione, una user story può essere appesa usando solo una di quelle calamite, una calamita può essere usata solo con una user story alla volta ed il gioco è fatto. Le fasi possono essere ancora conservate, possono essere utili per stanare certi problemi, ma l’enfasi dovrebbe essere sugli sviluppatori e non sulle fasi (“Individuals and interactions over processes and tools” vi ricorda qualcosa?)
</p></blockquote>
<p>Premettendo che ognuno può fare quello che vuole (ammesso che ne paghi direttamente le conseguenze), sarebbe meglio che lo facesse sapendo quello che sta facendo e perchè lo fa. Quello che ho notato è che chi ha adottato le Kanban Board lo ha fatto senza porsi delle domande fondamentali: qual&#8217;è l&#8217;oggetto della limitazione? Qual&#8217;è la misura del miglioramento? Come misuro la capacità produttiva del mio sistema? Ecc&#8230;</p>
<p>Ok lo ammetto, è una mia supposizione il fatto che la maggior parte non si ponga queste domande. Questa supposizione derivata dal fatto che mi sembra applicata troppo &#8220;by the book&#8221;, dove il &#8220;book&#8221; non riguarda affatto la produzione del software ma una catena produttiva manifatturiera.</p>
<p><a href="http://www.gabrielelana.it/wp-content/uploads/2010/09/kanban_board.jpg"><img src="http://www.gabrielelana.it/wp-content/uploads/2010/09/kanban_board-300x184.jpg" alt="" title="kanban_board" width="300" height="184" class="aligncenter size-medium wp-image-189" /></a></p>
<p>Le Kanban Board nel mondo del software generalmente sono divise per <strong>fasi</strong> e la limitazione è applicata appunto su queste fasi, perchè? Partendo dal presupposto che lo scopo è quello di stabilizzare e velocizzare il flusso delle user story nelle varie fasi, stiamo dicendo che è possibile &#8220;dimensionare&#8221; ogni fase a piacere? Quindi, per esempio, chi sviluppa non fa deploy di quello che ha sviluppato? Evidentemente, altrimenti non si spiega perchè la fase dello sviluppo è dimensionato a 5 user story e il deployment a 1</p>
<p>Sempre a proposito delle fasi, negli impianti manifatturieri il fatto che ogni fase sia limitata è una coseguenza banale del fatto che le linee produttive sono per loro natura limitate, ma vale la stessa cosa nel software? Nel nostro team siamo in 5, non possiamo essere nella fase di test tutti e 5? O non possiamo fare deploy tutti e 5? Perchè? A meno che non ci siano 3 analisti che si occupano della fase di analisi, 5 sviluppatori che si occupano della fase di sviluppo, 2 persone che si occupano dei test, ecc&#8230; Allora sarebbe un&#8217;altra storia, ma trattare il team a dipartimenti specializzati e ridimensionabili a piacere è quello che vogliamo? Personalmente mi fa venire la nausea, ma basta esserne consapevoli</p>
<p>Domanda ancora più importante: il total flow in questo caso come lo si immagina? O meglio, qualcuno misura il <a href="http://en.wikipedia.org/wiki/Lead_time">Lead Time</a>? Domanda lecita visto che non ne sento molto parlare, almeno non tanto quanto sento parlare di Kanban Board, e visto che la riduzione del Lead Time dovrebbe essere l&#8217;obiettivo finale&#8230; </p>
<p>Insomma, non vorrei che il seguire una moda possa fare più male che bene, sopratutto quando non ci si prende la briga di studiarla, di comprenderne il funzionamento e sopratutto senza domandarsi come misurare il miglioramento secondo i propri obiettivi. In particolare l&#8217;applicazione classica per <strong>fasi</strong> mi sembra pericolosa da questo punto di vista e suggerivo un&#8217;alternativa che mi sembrava meno rischiosa. Dato che l&#8217;approccio è di tipo sistemico, una volta messa in campo una Kanban Board &#8220;storta&#8221; si corre il rischio di stortare tutto :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielelana.it/archives/188/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>I Kanban non sono una metodologia</title>
		<link>http://www.gabrielelana.it/archives/174</link>
		<comments>http://www.gabrielelana.it/archives/174#comments</comments>
		<pubDate>Wed, 25 Aug 2010 17:21:43 +0000</pubDate>
		<dc:creator>Gabriele Lana</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.gabrielelana.it/?p=174</guid>
		<description><![CDATA[E&#8217; noto che nel nostro campo ogni nome viene sovraccaricato di significati, l&#8217;ultimo esempio riguarda i Kanban
Prima si è iniziato a parlare di Lean, poi qualcuno ha iniziato ad usare e a parlare di Kanban Board, infine adesso Kanban è diventato quasi il nome di una metodologia. Adesso quando uno parla di Kanban non so [...]]]></description>
			<content:encoded><![CDATA[<p>E&#8217; noto che nel nostro campo ogni nome viene sovraccaricato di significati, l&#8217;ultimo esempio riguarda i <strong>Kanban</strong></p>
<p>Prima si è iniziato a parlare di <a href="http://www.lean.org/whatslean/">Lean</a>, poi qualcuno ha iniziato ad usare e a parlare di <a href="http://www.limitedwipsociety.org/2009/11/16/kanban-example/">Kanban Board</a>, infine adesso Kanban è diventato quasi il nome di una <a href="http://www.crisp.se/henrik.kniberg/kanban-vs-scrum.pdf">metodologia</a>. Adesso quando uno parla di Kanban non so a cosa pensare:</p>
<ul>
<li>Starà parlando di Kanban come sinonimo di Lean? Si ma Lean come sinonimo di <a href="http://www.amazon.com/o/ASIN/0743249275">Lean Thinking</a>, ovvero la filosofia Lean o <a href="http://www.amazon.com/o/ASIN/0321150783">Lean Development</a>, ovvero l&#8217;applicazione della filosofia Lean allo sviluppo del software?</li>
<li>Starà parlando di Kanban come sinonimo delle <a href="http://www.agilejournal.com/blogs/the-kanban-board.html">board</a> che adesso vanno tanto di moda negli Agile shop?</li>
<li>Starà parlando di Kanban come di una non meglio precisata metodologia? Come lo <a href="http://www.amazon.com/o/ASIN/0578002140">ScrumBan</a>, ovvero uno Scrum che fa uso di Kanban Board o come <a href="http://www.amazon.com/o/ASIN/0984521402">Kanban</a>, ovvero l&#8217;uso delle Kanban Board misto a qualche pratica presa da XP?
</ul>
<p>Insomma un delirio, la salvezza come al solito sta nella conoscenza: bisogna tornare alle origini della parola, studiarne l&#8217;evoluzione per capirne le implicazioni ed un eventuale contesto d&#8217;uso</p>
<p>Kanban si traduce in <a href="http://it.wikipedia.org/wiki/Kanban">cartellino</a>: I giardini imperiali giapponesi sono curati all&#8217;ossessione e sono considerati un patrimonio del giappone, per questo solo poche (supponiamo 100) persone alla volta sono autorizzate ad entrare, per garantirlo vengono usate delle tessere di plastica bianche, ne esistono solo 100, una persona può entrare solo se possiede una di queste tessere che possono essere prelevate da un contenitore all&#8217;ingresso, quando il contenitore è vuoto nessuno può entrare, quando una persona esce deposita la sua tessera che verrà automaticamente trasferita nel contenitore all&#8217;ingresso consentendo a qualcuno di prelevarla ed entrare. Le tessere di plastica sono Kanban</p>
<p>Quindi <strong>i Kanban sono la rappresentazione sistemica del vincolo sulla capacità produttiva dell&#8217;impianto</strong>. Cosa significa quesa frase e come può tornare utile allo sviluppo del software lo spiego subito</p>
<p>L&#8217;applicazione del pensiero Lean porta ad eliminare una classe di problemi e/o di sprechi nell&#8217;attività produttiva attraverso un <strong>approccio sistemico</strong> ovvero creando un ambiente di lavoro che <strong>rende difficile commettere errori</strong>. Un esempio tipico sono i <a href="http://www.wireshop.it/img_prod/Supplier_1/BIG/imgpr473-01-1.jpg">connettori</a> la cui forma impedisce fisicamente di sbagliare verso. Un altro bell&#8217;esempio ce lo forniscono gli ospedali in cui si applica il pensiero Lean, nei quali tutte le attrezzature hanno un posto <a href="http://www.gembapantarei.com/visual%20management%20lean%20hospital%201.png">dedicato</a> che solitamente viene marcato con un&#8217;immagine stilizzata del tipo di attrezzo che dovrebbe occupare quello spazio, in questo modo</p>
<ul>
<li>E&#8217; molto semplice accorgersi se uno strumento è fuori posto perchè ci sarebbe l&#8217;immagine dello strumento senza lo strumento stesso</li>
<li>Nei momenti d&#8217;emergenza non devi metterti a pensare dove si trova uno strumento perchè sta sempre nello stesso posto</li>
<li>L&#8217;ordine non è più una questione di gusto personale :-)</li>
<li>Essendo la distribuzione degli strumenti così rigorosa è possibile fare esperimenti per capire se un&#8217;eventuale riorganizzazione (che è quasi sempre microscopica seguendo il principio del <a href="http://en.wikipedia.org/wiki/Kaizen">Kayzen</a>) produce un miglioramento o meno
</ul>
<p>Quando si ha a che fare con dei sistemi complessi è molto più efficiente ed efficace applicare un controllo indiretto invece che tentare di forzare le singole parti al proprio volere, basta pensare all&#8217;acqua, le singole particelle costituiscono un sistema complesso con proprietà emergenti, come fai a trasportare l&#8217;acqua? tenti di convincere le singole particelle? La sposti fisicamente? O crei un canale e lasci che felicemente scorra seguendo le proprie leggi ma finendo esattamente dove vogliamo Quest&#8217;ultimo può essere definito un <strong>approccio sistemico</strong></p>
<p>Ahhhh se solo la maggior parte dei manager sapesse&#8230; il mondo girerebbe diversamente, ma la resa dei conti arriverà presto caro cravattato dall&#8217;ignoranza bovina&#8230; ma sto divagando</p>
<p>Le <a href="http://www.agileproductdesign.com/blog/2009/images/kanban_board.jpg">Kanban Board</a> creano un ambiente di lavoro dove è difficile commettere una serie di errori classici della produzione: avere molte user stories in lavorazione (semilavorati) che non portano valore al sistema, evitare il sovraccarico di lavoro del team, individuare molto velocemente eventuali parti critiche dello sviluppo di una user story, ecc&#8230; Bene, ma dove sono i Kanban nelle Kanban Board che si usano nella produzione di software? Non sono le carte delle user stories (come banalmente si potrebbe pensare), i kanban rappresentano i limiti della produttività del sistema, in questo caso il limite è sul numero delle user stories che possono essere in lavorazione ovvero i kanban sono i singoli &#8220;posti&#8221; che possono essere occupati dalle carte delle user stories.</p>
<p>Per ogni <strong>fase</strong> ci possono essere un numero limitato di user stories, in questo modo si possono facilmente identificare eventuali stalli, fasi problematiche, sprechi di vario genere ecc&#8230;, peccato che tutto questo sia molto lontano dall&#8217;essere Agile&#8230; perchè? Semplice il limite è imposto sulle fasi, si presuppone quindi che ogni fase sia un sottosistema dimensionabile a piacere per equilibrare il flusso delle user stories fino al loro completamento, una fabbrica insomma, alla fine siamo tornati al waterfall (il cravattato ci prova sempre, non c&#8217;è niente da fare)</p>
<p>Molto più Agile e sensato sarebbe limitare la capacità produttiva del team sulle dimensioni del team stesso, banalmente una user story per sviluppatore, al limite per coppia di sviluppatori. Ad ogni sviluppatore assegnamo una calamita, le user story appese alla lavagna sono in lavorazione, una user story può essere appesa usando solo una di quelle calamite, una calamita può essere usata solo con una user story alla volta ed il gioco è fatto. Le fasi possono essere ancora conservate, possono essere utili per stanare certi problemi, ma l&#8217;enfasi dovrebbe essere sugli sviluppatori e non sulle fasi (&#8220;Individuals and interactions over processes and tools&#8221; vi ricorda qualcosa?)</p>
<p>Concludo dicendo una cosa ovvia: più si studia uno strumento/pratica/tecnica e più è facile utilizzarlo saggiamente nel contesto in cui ci si trova per raggiungere i nostri obiettivi, il pericolo è quello di abusarne o peggio essrne abusati :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielelana.it/archives/174/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Reframing In The Agile World</title>
		<link>http://www.gabrielelana.it/archives/64</link>
		<comments>http://www.gabrielelana.it/archives/64#comments</comments>
		<pubDate>Mon, 17 Sep 2007 22:57:51 +0000</pubDate>
		<dc:creator>Gabriele Lana</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[extreme]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.gabrielelana.it/archives/64</guid>
		<description><![CDATA[Ho appena finito di leggere un articolo del venerabile Paul Graham, autore di libri quali &#8220;Hackers and Painters&#8221; e &#8220;On Lisp&#8221; (libro da me molto ambito, ma alquanto difficile da avere)
L&#8217;articolo indica alcune pratiche che possono essere utilizzate dai programmatori per &#8220;mantenere un programma nella propria testa&#8221;, inizialmente sia l&#8217;obiettivo dell&#8217;articolo che alcune delle pratiche [...]]]></description>
			<content:encoded><![CDATA[<p>Ho appena finito di leggere un <a href="http://www.paulgraham.com/head.html">articolo</a> del venerabile <a href="http://www.paulgraham.com/">Paul Graham</a>, autore di libri quali <a href="http://www.amazon.com/o/ASIN/0596006624">&#8220;Hackers and Painters&#8221;</a> e <a href="http://www.amazon.com/o/ASIN/0130305529">&#8220;On Lisp&#8221;</a> (libro da me molto ambito, ma alquanto difficile da avere)</p>
<p>L&#8217;articolo indica alcune pratiche che possono essere utilizzate dai programmatori per &#8220;mantenere un programma nella propria testa&#8221;, inizialmente sia l&#8217;obiettivo dell&#8217;articolo che alcune delle pratiche proposte mi hanno un po&#8217; disorientato in quanto in apparente netto contrasto con quanto dettato dalle metodologie Agili: <em>&#8220;Se Paul Graham è un mito, e ha ragione, allora hanno torto le metodologie Agili?&#8221;</em> No, hanno ragione entrambi, i principi che stanno alla base sono gli stessi, come al solito tutto torna :-)</p>
<p><span id="more-64"></span>Prendiamo per esempio una delle pratiche più forti fra quelle proposte: <strong>&#8220;Keep rewriting your program&#8221;</strong>; come dargli torto? Capita spesso che durante la scrittura di un programma un programmatore arrivi ad un momento in cui la sua conoscenza attuale del problema e della relativa soluzione non sia più rispecchiata dal codice, riscrivendolo potremmo inserire nel codice tale conoscenza e quindi otterremmo del codice migliore. D&#8217;altra parte molti conosceranno la <a href="http://en.wikipedia.org/wiki/Second-system_effect">&#8220;Sindrome del secondo sistema&#8221;</a> e sapranno quindi che la maggior parte delle riscritture dei progetti software risulta fallimentare. <em>&#8220;Come è possibile che entrambe queste evidenze empiriche siano vere? Come risolvono la questione le metodologie Agili?&#8221;</em></p>
<p>Cos&#8217;è il <strong>refactoring</strong> se non un&#8217;attività di continua riscrittura del codice? Kent Beck spiega perchè eXtreme Programming è eXtreme: tutte quelle pratiche che hanno dimostrato nel tempo di essere valide sono state portate all&#8217;estremo. La revisione del codice funziona? Bene, revisioniamo il codice sempre! = Pair Programming. La riscrittura di programmi porta a dei programmi con un design migliore? Bene, riscriviamo i nostri programmi continuamente! = Refactoring</p>
<p>Attraverso la pratica del refactoring possiamo trasformare (riscrivere) continuamente il nostro codice affichè rispecchi nella maniera migliore possibile la conoscenza che attualmente abbiamo del dominio del problema e della sua soluzione. Continuamente! Il trucco è sempre quello: se un&#8217;attività è rischiosa, difficile, costosa, ma potenzialmente di grande valore, quello che dobbiamo fare non è evitarla o prevenirla, ma trovare un modo per renderla meno rischiosa, meno difficile e meno costosa, mantenendone il valore inalterato (pensate per esempio alla Continuous Integration)</p>
<p>Al solito ci sono pratiche a corollario che portano il codice ad essere rappresentazione della nostra conoscenza:</p>
<ul>
<li>Unit Tests: come specifica eseguibile del comportamento dei componenti del nostro software</li>
<li>Acceptance Tests: come specifica eseguibile delle funzionalità esibite dal nostro software</li>
<li>Shared Code: fare in modo che il nostro codice sia leggibile a tutti i componenti del team (lo considero un super set di <strong>&#8220;Write rereadable code&#8221;</strong> dell&#8217;articolo di Graham)</li>
<li>Domain Driven Design: sviluppare un linguaggio di dominio (Ubiquitous Language) all&#8217;interno del codice. Questa pratica potrebbe essere portata all&#8217;estremo scrivendo un&#8217;interprete per un <span alt="Domain Specific Language">DSL</span> (Graham come Lisper a questo proposito ne sa qualcosa)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielelana.it/archives/64/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

