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
Share

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.

Share

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.

Share

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.

Share

Le user story sono il miglior strumento di analisi che conosca

Innanzitutto 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”
Share

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.

Share

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.

Share

Installazione di Redmine – L’appliance VMWare

Il primo dubbio che ho avuto nel testare Redmine ha riguardato l’installazione.

E’ scritto in Ruby, è cross-platform (Linux, Unix, Mac e Windows) e utilizza MySQL, PostgreSQL o SQLite.

La procedure di installazione è completamente dettagliata sul sito però l’idea di dover capire molte cose di questo ecosistema che non conosco mi faceva temere di perdere molto tempo prima di arrivare ad una configurazione di test da cui partire.

Fortunatamente sono già disponibili delle appliance pre-configurate su questi due siti:

Le appliance sono disponibili per VMWare  e per Amazon EC2.
Ho scelto quella di bitnami e ho scaricato la virtual machine per VMWare (circa 500mb) per usarla con Virtual Box.
 
A questo punto ho creato in VirtualBox una nuova macchina virtuale Ubuntu seguendo la sezione “How to start your BitNami Virtual Applicance with Virtual Box“. Se volete usare il vostro DHCP la rete va impostata come bridged.
 
Nel giro di circa 15 minuti mi son ritrovato un’installazione di Redmine perfettamente funzionante.
 
Non male come inizio.
Share

Project management con Redmine

Una delle prime domande che mi viene posta ogni volta che inizio una consulenza Agile è

Quale strumento di project management ci consigli di usare?

Ovviamente la prima risposta è che i processi Agili privilegiano le persone e l’interazione piuttosto che gli strumenti e consiglio di partire con un progetto pilota usando Excel che tutti conoscono (dal dev fino al business e al cliente finale) in mondo da non introdurre troppa carne al fuoco.

E’ importante notare che il Manifesto Agile dà enfasi a persone e interazione ma non elimina gli strumenti (ci mancherebbe) e quindi l’adozione di un software di project management è indispensabile in qualunque software house, a meno che non si stia sviluppando la gestione DVD del negozio sotto casa.

Tra i vari tool che ho visto dai clienti oppure provato direttamente mi sono imbattuto in Redmine.

redmine-logo

Le caratteristiche sono di tutto rispetto:

  • Supporto multi-progetto
  • Gestione della sicurezza basata su ruoli
  • Issue Tracking system
  • Calendario
  • Gantt (tanto amato dai PM)
  • News, documenti e gestione file
  • Feeds
  • Notifiche via email
  • Wiki per progetto
  • Forum per progetto
  • Time tracking
  • Campi custom per le issue, le time entry, i progetti e gli utenti
  • Completa integrazione con i principali SCM (SVN, CVS, Git, Mercurial, Bazaar e Darcs)
  • Creazione di segnalazione tramite email
  • Autenticazione LDAP
  • Auto registrazione degli utenti
  • Supporto multilingua (italiano compreso)
  • Supporto multidatabase (MySQL, PostgreSQL, SQLite)
Sul sito è disponibile una installazione demo che mi ha molto impressionato e mi ha spinto a provarlo.
La cosa interessante è che sono già disponibili moltissimi plugin per coprire esigenze particolari non implementate direttamente in Redmine.
Ad esempio esiste un plugin per la gestione di un processo tramite SCRUM.
Mi sà che scriverò qualche altro post al riguardo.
Share