Tag Archives: Agile

Agile save the Queen

Recentemente mi sono imbattuto nell’ennesimo articolo introduttivo al mondo Agile dal titolo “Agile – What it is, why it works and how to do it

E’ fatto bene, riesce brevemente a riassumere alcuni tra i principali concetti e terminologie utilizzate.

Si parla di Scrum master, di team, di bad smell, di Continuous Integration, di feedback continuo e veloce, di user stories. Si parla delle tanto bistrattate retrospettive.

E fin qua non ci sarebbe motivo per dedicargli un post.

C’è un ma. Se non fosse per la parte iniziale dell’url che l’ha pubblicato: www.gov.uk

Si, il Governo del Regno Unito ha definito una “strategia digitale” per rendere i servizi transazionali della pubblica amministrazione “Digital by default”. L’obiettivo è riassunto in questa frase:

ensure that government produces services so good that people prefer to use them [in a digital form]

Per raggiungere questo obiettivo il Governo del Regno Unito ha definito uno standard su 26 punti che è necessario rispettare per essere Digital by default.

Alcuni dei requisiti richiesti sono:

  • profonda conoscenza del dominio applicativo
  • performance
  • gestione della privacy
  • security
  • 6 – costruire un prototipo funzionante usando i metodi Agili, iterativi e user-centered
  • 8 – analizzare il prototipo e garantire che il feedback degli utenti venga trasformato in feature per la successiva fase di sviluppo
  • 9 – creare un servizio talmente semplice ed intuitivo che l’utente deve riuscire al primo tentativo, senza aiuto
  • 14 – avere la capacità e gli skills tecnici per aggiornare e migliorare il servizio frequentemente
  • 17 – essere in grado di eseguire dei test end-to-end in un ambiente che replichi quello di produzione, con degli account di test e su tutti i browser e device
  • 19 – dimostrare di aver costruito un servizio che può essere migliorato ogni giorno, garantendo che il feedback degli utenti e i dati di performance siano trasformabili in attività di sviluppo
  • 25 – avere un piano di rollback
Senza il minimo dubbio il Governo ha individuato in Agile e nelle sue implementazioni SCRUM e eXtreme Programming l’insieme dei framework e delle metodologie pratiche per raggiungere tutti questi obiettivi.

320px-Government_Ensign_of_the_United_Kingdom.png

  • La centralità dell’utente fa parte del DNA di una User Story.
  • Il testing in Agile ha un tale valore che viene effettuato ancora prima di scrivere codice (Test Driven Development) e quindi non serve neanche parlarne. Unit testing, User Acceptance Test e end-to-end testing hanno in Agile un valore direi maggiore del codice stesso.
  • I rilasci frequenti sono alla base di un feedback rapido e sono abilitati da strumenti di Continuous Integration.
  • La pianificazione delle release successive si basa sulle Retrospettive e i Demo Meeting che servono per distillare l’esperienza fatta fino ad oggi e per rilanciare il lavoro delle fasi successive.
  • La gestione degli ambienti di sviluppo, di staging e di produzione e il Continuous Deploy/Rollback fanno parte anch’essi della cultura Agile.
Per me da oggi in poi non sarà solo un “God save the Queen”, ma anche un
Agile save the Queen!
PS: l’articolo ” Agile – What it is, why it works and how to do it” è esso stesso un esempio di “miglioramento continuo” che fa parte di Agile. Non è un pesante articolo burocratico, con un certo formato, con il numerino di revisione, con i nomi di revisore, responsabile, accettatore e della nonna, e che probabilmente sarebbe vecchio già in questo momento. E’ una pagina di un CMS facilmente modificabile, è in Beta, e giustamente si presume di aggiornarlo frequentemente lungo il cammino man mano che si imparano nuove cose o si incontrano problemi e limiti.
Riferimenti:
Digital by Default Service Standard – Services so good that people prefer to use them

Slide della sessione “Tecniche Agili su TFS 2012″ al Microsoft Dev Camp

Mi sono accorto di non aver mai pubblicato il materiale della presentazione che ho tenuto al Microsoft Dev Camp a novembre 2012.

La sessione riguardava i metodi Agili, SCRUM e il supporto che Team Foundation Server può dare a tali metodi.

Purtroppo non sono state fatte registrazioni video quindi posso solo pubblicare le slide.

Che c’azzecca TFS con i metodi Agili? Ve lo racconto al Microsoft Dev Camp – Bologna

Giovedì 8 Novembre la community DotDotNet vi invita al Microsoft Dev Camp a Bologna.

L’evento è completamente gratuito e suddiviso in due parti.

Durante la mattina sarà possibile confrontarsi sui temi quali lo sviluppo su Windows 8, Windows Phone e Azure in un Lab pratico e interattivo.

Il pomeriggio invece seguirà un formato classico con alcune sessioni relative a Windows Azure, allo sviluppo di giochi, a TFS e ASP.Net.

Se non vi ho ancora annoiato abbastanza parlando di metodi Agili, SCRUM, TDD o Continuous Integration o se invece non ne avete ancora sentito parlare nel pomeriggio terrò una sessione su come sfruttare Team Foundation Server 2012 a supporto di un team Agile.

Come al solito al termine ci fermeremo a cena assieme.

Ci vediamo lì.

Agenda

Riporto il calendario completo dell’evento

ore 9.00

 


Registrazione

ore 9.30

 

Laboratorio Windows 8, Windows Phone e Azure

 

ore 13.30

Pranzo libero

ore 14.30

Anteprima Windows 8 e Windows Azure 

ore 15.00

Lorenzo Barbieri – Sviluppo giochi per Windows 8

C++ e DirectX/XAML, XAML e .NET, HTML 5 e JavaScript, MonoGame, Unity, altri framework open e closed. Ci sono moltissimi modi per realizzare giochi per il Windows Store che sfruttano appieno le caratteristiche di Windows 8 come il touch, la tastiera e il mouse, il supporto ai controller XBOX….

 

ore 16.00

Pausa

ore 16.15

Stefano Benedetti – Tecniche agili su TFS 2012: un esempio pratico

 

Test driven development, continuous integration, release often and early, visibility: sono alcuni dei principi e delle pratiche cardine del mondo Agile.
In questa sessione vedremo come concretizzarli con Visual Studio, il nuovo Team Foundation Server 2012 ed i suoi template Agili al fine di migliorare il processo di sviluppo ed il project management.

ore 17.15

Luca Milan e Igor Antonacci – Novità di ASP.NET 4.5 

In questa sessione, verranno illustrate le principalinovità di ASP.NET 4.5 attraverso lo sviluppo, passo passo, di un’applicazione Web moderna e responsiva. Con l’uso di Visual Studio 2012, vederemo com’è semplice introdurre le principali tecniche di ottimizzazione.

ore 18.15

Fine lavori

Location e data

Hotel Amadeus

Via M.E.Lepido 39
40132  Bologna 

Giovedì 8 novembre 2012 ore 9.00

Registrazione

L’evento è gratuito ma è richiesta la registrazione

Registrami al Microsoft Dev Camp a Bologna

A short history of Software Engineering by Paolo Perrotta

Me la salvo qui per riguardarla ogni tanto ma soprattutto per farla vedere ai clienti che non conosco il mondo Agile o sono scettici.

Se sei minimamento coinvolto nel settore IT devi trovare 30 minuti per guardarla.

Se sei un Architetto devi trovare 30 minuti per guardarla.

Se sei un Program Manager (ops scusate ho detto una parolaccia) DEVI trovare 30 minuti per guardarla.

Se sei un’Analista DEVI trovare 30 minuti per guardarla (e poi puoi cambiare lavoro).

Chi non evolve in questa direzione è spacciato. Punto.

Anatomia di una User Story card – Retro

Continuo la saga sul tema delle user stories.

Dopo i due post:

vediamo adesso cosa contiene il retro di una user story card.

User-story-back

Ricordo che la User Story parte da una frase che descrive ciò che un utente fa o vorrebbe fare su un sistema o comunque nel suo lavoro quotidiano ed è scritta nel linguaggio dell’utente.

A questo punto le informazioni necessarie e che richiedono un alto livello di visibilità per tutti sono:

  • quali task e attività servono per completare concretamente la storia?
  • quali test devono essere scritti o implementati per garantire il livello di qualità richiesto e soprattutto per verificare con il cliente che la user story è effettivamente completa?
  • quanto manca per finire?

Le risposte a queste tre domande si trovano sul retro della user story card.

I test di accettazione (UAT)

In fase di planning è necessario elencare quali saranno gli User Acceptance Tests (UAT) che dovranno essere implementati per soddisfare questi requisiti:

  • servono in fase di analisi per chiarire ulteriormente le idee al cliente
  • servono a chi sviluppa per poter dire “ho fatto” e spostare quindi la user story card in “Done”
  • servono in fase di Demo Meeting per dimostrare e verificare che la user story è stata correttamente implementata e che l’implementazione fa ciò che ci si aspettava.

L’elenco dei task

Quando la scheda entra in una sprint deve essere già stato analizzato quali sono i passi da compiere per completare la User Story.

Elencando i task si ottengono questi vantaggi:

  • di nuovo viene stimolata la scomposizione della User Story in attività più piccole (ed in questo contesto in attività concrete quali sviluppo di righe di codice, attività di infrastruttura, realizzazione di DB ecc ecc)
  • viene data una stima dei task in ore. Dato che la User Story è già temporalmente limitata, la stima dei task che sono attività dettagliate e ancora più piccole dovrebbe essere più realistica
  • i task possono essere eseguiti in parallelo da sviluppatori (o pair programmer) diversi

Nota bene: è solo in questo contesto che compare per la prima volta il tempo, tipicamente in ore, come unità di misura. Ricordo che fino ad ora la User Story è stata stimata in Story Point e quindi svincolata dal fattore temporale.

La scomposizione in task ed ore e la relativa somma consentono di fare un controllo incrociato con gli Story Point per avere un ulteriore conferma della stima della User Story.

Ricordo sempre che lo spazio sulla scheda è limitato e quindi sia i test di accettazione sia i task non devono necessariamente essere esaustivi ma devono essere un promemoria per stimolare la comunicazione.

Il tempo residuo

Infine la domanda più importante, più frequente e con il maggiore grado di incertezza nella risposta: quanto ci vuole per terminare?

Tutto il lavoro di scomposizione, analisi e stima fatto fino ad ora sulla User Story Card viene riassunto nella somma delle ore residue che viene mostrata nella User Story Card e che deve essere aggiornato ogni giorno (normalmente dopo lo stand-up meeting e può essere fatto dallo Scrum Master).

E’ importante notare che in questa fase non è di alcun interesse parlare di ore lavorate ma di ore residue.

Le ore residue infatti vengono tracciate sul burndown chart e danno un’indicazione quotidiana dello scostamento dalla situazione ideale in modo da poter intraprendere ogni giorno le necessarie azioni correttive.

Ovviamente le ore lavorate sono un’informazione importantissima che deve essere tracciata su sistemi elettronici di Issue Tracking, ma che non incide sulla sprint e deve essere oggetto di analisi in fase di Retrospettiva.

Anatomia di una User Story card – Fronte

Nel post precedente abbiamo visto cos’è una User Story e quali sono le motivazioni che la rendono uno strumento di analisi, di condivisione delle informazioni chiave e di stimolo al confronto all’interno di un team.

Adesso voglio scendere nel dettaglio della struttura di una User Story card.

Innanzitutto un primo nota bene: una User Story raccoglie in maniera discorsiva ciò che un utente fa o vorrebbe fare nel suo lavoro quotidiano.

Una User Story Card è la rappresentazione cartacea (tipicamente in formato A6) della storia ma non solo. Raccoglie altre informazioni quali la “dimensione” della storia, i task per completarla, i test di accettazione e così via.

Ha un visibilità enorme, la si può spostare, ci si scrive sopra velocemente, sono facilmente riordinabili e confrontabili e soprattutto lo possono fare tutti. Compreso il cliente.

Non esiste LA user story card che va bene per tutti, questa è il punto di partenza che utilizzo io (fronte e retro):

User-story-frontUser-story-back

Innanzitutto una nota sulla dimensione della scheda: non deve essere troppo grande in quanto non è richiesta l’esaustività delle informazioni (per quella si va su un sistema elettronico) ma il riassunto delle informazioni fondamentali.

Partiamo dal fronte.

Titolo della User Story

Il titolo della user story serve per identificare sinteticamente e univocamente la storia.

Per esempio in un sistema di commercio elettronico può essere una frase del tipo:

  • Mario Rossi può inserire il prodotto nel carrello
  • Mario Rossi può rimuovere un prodotto dal carrello
  • Mario Rossi può svuotare completamente il carrello

Tipicamente il titolo è la descrizione sintetica con cui viene caricata nel sistema elettronico di gestione del progetto (Microsoft Team Foundation Server, Jira, OnTime, RedMine, AtTask per citarne alcuni).

Descrizione della User Story

Ricordo che la user story è un frase con questa struttura:

As Who, I want What so that Why

Continuando le storie precedenti potrebbe essere:

SONO “Mario Rossi”

e dalla pagina di dettaglio del prodotto VOGLIO inserire il prodotto nel carrello

PERCHE’ potrò avere in unico punto tutti i prodotti che vorrei acquistare

Ricordo l’aspetto essenziale: la user story deve essere scritta dal punto di vista dell’utente e utilizzando il suo linguaggio. Non c’è nulla di tecnico qui, non ci sono database, C#, o pezzi di interfaccia ma solo quello che un utente vuole fare interagendo con il sistema.

Anzi la situazione ideale è che la storia venga scritta dal cliente.

Un altro aspetto da notare è che non si parla di generico utente o cliente ma si utilizza uno specifico utente che appartiene ad una categoria che scaturisce dalla fase di user role modeling (anche di questo ne parlerò in un altro post).

In questo caso Mario Rossi è stato individuato come l’utente tipico B2C ed è chiaro a tutti quali sono le sue aspettative, le sue competenze tecniche, la sua conoscenza del dominio.

Dimensione e scadenza

La domanda scontata di fronte ad un requisito o, in questo caso, ad una User Story è: quanto ci vuole per implementarla?

Giorni? Ore? Giorni ideali? Giorni uomo? E le ferie? E i 2 membri del team che la prossima settimana devono lavorare su un altro progetto?

Il riassunto di questa e di altre informazioni “temporali” è racchiuso nel concetto di Story Point.

Genericamente si può dire che lo Story Point è una unità di misura delle User Story (al pari delle ore o dei metri) ed una misura sintetica della “dimensione della storia”.

Riesce ad essere indipendente dal tempo, non risente delle ferie o dei giorni di malattia, consente una stima molto veloce e il confronto tra le schede.

Una User Story da 8 SP è sicuramente più grande di una User Story da 5 SP. Facile, immediato e comprensibile da tutti, tecnici, commerciali, cliente.

Diventa anche il miglior metodo per fare un planning, per seguire l’andamento del progetto e per stimare e migliorare la velocità del team.

Ecco perchè DEVE essere in bella vista sul fronte della User Story Card.

Un’ultima informazione che, se presente, deve essere in primo piano è un’eventuale scadenza. Le storie entrano in una sprint in base alla priorità decisa dal Product Owner ma se c’è una scadenza ovviamente questo fa si che la storia venga selezionata per entrare in una sprint in base alla data di consegna.

Le user story sono il miglior strumento di analisi che conosca

Innazitutto cos’è una User Story?

Ovviamente partiamo dalla definizione di Wikipedia che cerco di riassumere:

“una User Story raccoglie in maniera discorsiva ciò che un utente fa o vorrebbe fare nel suo lavoro quotidiano”

E’ un insieme di frasi espresse in termini usati quotidianamente o termini di business e risponde a tre domande:

  • Who: chi fa o vorrebbe quella specifica cosa
  • What: cosa fa o cosa vorrebbe o si aspetta dal sistema
  • Why: perchè fa quella cosa o perchè la vorrebbe e quali vantaggi otterrebbe
Fisicamente la User Story è una scheda cartacea in formato A6 che riassume queste e altre informazioni fondamentali.User-Story
Il primo vantaggio che si ottiene dall’approccio tramite User Story è che obbliga i tecnici e gli sviluppatori a ragionare come l’utente finale e non immediatamente in termini di righe di codice, righe di tabelle, tecnologie, ecc ecc.
Inoltre facilita enormemente il dialogo e la comprensione con il cliente. Il cliente usa il linguaggio del dominio e siamo noi che dobbiamo adattarci al suo modo di pensare e parlare. E’ il nostro sistema che deve risolvere il suo problema ed è più facile se parliamo tutti da subito la stessa lingua (Ubiquitous Language).
Il cliente tocca la user story, la vede, la modifica e SOPRATTUTTO lo aiuta a chiarire nella sua testa che cosa vuole esattamente.
Il cliente può e deve ordinare le user story in base a ciò che per lui è prioritario (in termini economici ma non solo) e lo fa semplicemente spostando le schede.
E’ fondamentale ricordarsi che una User Story non vuole e non deve essere una analisi dettagliata di una funzionalità ma piuttosto un reminder di alcune cose che ci siamo detti e di altre che invece devono essere chiarite: la User Story stimola ed enfatizza la comunicazione verbale rispetto quello scritta.

Il fatto che venga scritta su delle schede serve anche per ottenere questo risultato in quanto le informazioni che possono essere scritte sono forzatamente limitate dallo spazio fisico della scheda.

Ovviamente maggiori informazioni possono essere raccolte in un sistema di tracking elettronico, ma ultimo ma non meno importante la user story DEVE essere cartacea perchè il suo punto di forza è l’estrema visibilità che dà alle informazioni in essa contenute.

In un altro post scenderò nei dettagli di altre informazioni più o meno tecniche che fornisce una User Story:

  • consente un confronto immediato e visivo tra le dimensioni delle storie
  • facilità la suddisivisione in storie più piccole
  • contiene la definizione dei task che servono per completare la storia
  • contiene l’elenco dei test di accettazione che servono per dire “ho finito” e dimostrano al cliente che il software fa esattamente quello che si aspetta
  • facilita il planning della release e delle sprint
  • consente di rimandare ad un momento successivo la definizione di dettagli che probabilmente oggi non abbiamo
A questo punto penso di poter dire: “Please, more user stories, less Word documents, less Power Point”

Agile Coach Camp Italy 2012

Sei interessato al Coaching Agile?

Ti occupi di change management o di mentoring?Agile-Coach-camp-2012

L’Agile Coach Camp è un weekend che affronta questi temi in maniera collaborativa e autogestita con l’obiettivo di confrontarsi concretamente con chi fa questo lavoro quotidianamente.

Il camp si terrà dall’8 al 10 Giugno 2012 in trentino.

Il programma

Venerdì 8 giugno

18:00 Arrivo dei partecipanti

19:00 Cena

21:00 Evento serale

Sabato 9 giugno

9:00-18:00 Open Space

21:00 Evento serale

Domenica 10 giugno

9:00-17:00 Open Space

Tutte le informazioni sul sito ufficiale dell’evento: Agile Coach Camp Italy 2012

Differenze tra SCRUM e Extreme Programming (XP)

Recentemente mi è stata posta questa domanda durante una presentazione dei metodi Agili: “Quali sono le differenze tra SCRUM e XP?”

Entrambi sono classificabili come “applicazioni” dei principi Agili.

La differenza principale è che SCRUM è maggiormente orientato alla gestione di un processo mentre XP è maggiormente focalizzato sugli aspetti tecnici legati allo sviluppo del software.

SCRUM è un framework di management che comprende aspetti quali il reporting, il planning, lo stato di avanzamento, la definizione degli incontri con l’obiettivo di favorire la comunicazione e avere un feedback molto rapido (al limite giornaliero) dello stato di un progetto.
releaseburndown
SCRUM cerca di ridurre al minimo l’overhead di burocrazia necessario per la gestione di un progetto e si focalizza su un processo iterativo e incrementale che porta a produrre solo ciò che serve e di maggior valore per l’azienda.

SCRUM in questo senso non è quindi strettamente legato ai processi IT ma può essere applicato con successo a qualsiasi processo aziendale.

Nell’ambito stesso di un’azienda IT si sottolinea l’importanza del fatto che SCRUM deve essere abbracciato dall’intera azienda quindi anche dal management, dai commerciali, dal marketing.

Una delle principali differenze pratiche è che SCRUM identifica una nuova figura, lo Scrum Master. Lo Scrum Master si discosta dal più classico Project Manager che definisce i task e dice chi fa cosa ma è un più generico servant-leader con questi compiti:

  • rimuovere gli impedimenti
  • assicurarsi che il processo SCRUM venga applicato correttamente
  • proteggere il Team dalle “distrazioni” (comprese le ingerenze del management e dei commerciali)

pair-programmingXP (Extreme Programming) pone invece maggiore enfasi su aspetti tecnici e pratici per lo sviluppo software.

Nel contenitore XP sono presenti tematiche quali:

  • Test-Driven Development
  • Continuous Integration
  • Pair Programming
  • Refactoring
  • Collective Ownership
  • On-site customer
  • Coding standards

Quale scegliere?

Secondo me in una azienda che sviluppa software la risposta corretta è entrambi in quanto le metodologie sono perfettamente complementari.

SCRUM da solo porterebbe sicuramente benefici in un ottica Just in time ma per raggiungere la massima efficacia e per far si che le promesse del Manifesto Agile vengano rispettate le tecniche XP si rivelano utili se non fondamentali.

All’opposto XP beneficia di SCRUM in quanto riceve un “contenitore” che garantisce il project management e l’interfaccia con il business, i commerciali ed i clienti senza troppo overhead e senza costrizioni.

Installare Redmine su Windows con SQLite

I requisiti per installare Redmine su Windows sono i seguenti:

  • lo stack Ruby+RubyGems+Rake+Rack
  • MySQL, PostgreSql oppure SQLlite

Per una prima installazione ho deciso di utilizzare SQLlite in modo da non dover installare un ulteriore motore di database.

Sul sito di Redmine c’è una completa guida di installazione ma in alcuni passi non è perfetta per una macchina Windows quindi li riporto di seguito.

Download di Redmine

http://www.redmine.org/projects/redmine/wiki/Download

Installare Rubyinstaller

Rubyinstallar è il package manager più diffuso per il mondo Windows.

Scaricare ed installare Rubyinstaller:

http://rubyinstaller.org/

Configurare database.yml

Copiare il file config/database.yml.example in config/database.yml

Configurare la sezione “production” per utilizzare SQLlite in questo modo:

production:
adapter: sqlite3
database: db/redmine.db
host: localhost

Installare la gemma SQLlite

Installare la gemma SQLite con il comando:

gem install sqlite3

Generare un session store

Generare un session store con il comando:

rake generate_session_store

Creare la struttura del database

Per generare la struttura del database entrare nella root directory dell’applicazione ed eseguire il comando:

rake db:migrate RAILS_ENV=production

Caricare i dati di configurazione

E’ consigliabile caricare nel database alcuni dati di configurazione di base da cui partire.

E’ sufficiente usare il comando:

rake redmine:load_default_data RAILS_ENV=production

In questo modo vengono caricati alcuni valori di default per i ruoli, i tracker, gli stati e gli enumerati.

Test dell’installazione

Installare la gemma WEBrick

gem install webrick

Lanciare il web server WEBrick

ruby script/server webrick -e production

e collegarsi all’url http://localhost:3000/

Se tutto è configurato correttamente viene visualizzata la welcome page.

Le credenziali di default sono username: admin e password: admin

NB: il webserver WEBrick non deve essere usato in produzione ma solo per le attività di testing. In un altro post vedremo come utilizzare Mongrel come servizio Windows per eseguire Redmine.