Progettazione Agile in tempi di cambiamento…(Parte 3/3)

Loading

Terza e ultima parte del nostro percorso nel mondo della pianificazione Agile con l'aiuto di Mike Cohn e del suo bellissimo libro Agile Estimating and Planning.

Introduzione

Nella seconda parte di questa serie di articoli abbiamo visto perchè la pianificazione nei progetti spesso fallisce.

In quest'ultima parte vedremo come pianificare accettando di convivere, anzi, incoraggiando i cambiamenti che avvengono nel corso del progetto.
Cambiare un piano non significa necessariamente cambiare le date. Forse servirà ma invece magari
scopriamo che alcune funzionalità che dovevamo realizzare non servono più oppure
potremmo introdurre più persone nel team. 

Questo è un primo pensiero di base. Ma ci sono altre tecniche che possiamo utilizzare per modificare la nostra iniziale stima.


Replanning

Un piano di progetto per essere utile deve essere accurato, ma dobbiamo accettare che
piani fatti nelle prime fasi del progetto portino in sé incertezza.
Se vogliamo poter accogliere nuovo requisiti e avere il massimo feedback possibile dal
committente ad ogni iterazione allora è necessario che il nostro piano sia flessibile, che
tutti i partecipanti accettino questa flessibilità e che soprattutto il nostro budget si adegui di
conseguenza sebbene seguendo determinati parametri.
Allo stesso tempo è possibile che i task non corrispondano esattamente alla stima che avevamo
ipotizzato.
Diciamo, per fare un esempio, che il nostro progetto è stimato in story points ed è composto da tre task.

Nel corso della prima iterazione pianifichiamo di realizzare i primi due task ma al termine ci
accorgiamo di non esserci riusciti.
Il task 1 infatti ha occupato tutta l’iterazione.
Che fare?
Convochiamo il team e nel retrospective meeting decidiamo la strategia da seguire.
Per gestire la situazione dobbiamo necessariamente fare replanning ma di cosa? Di quali
storie?
Un modo è identificare le relazioni tra le storie. Se ad esempio la storia 1, quella che era stata sotto-
stimata, ha relazione con la 2 e la 3 , allora meglio rifare la stima di entrambe.
In questo modo possiamo procedere nella prossima iterazione con dati aggiornati e basati
sull’esperienza.
E’ chiaro che ciò che stiamo facendo è spostare la data di fine del progetto,
ma nel contempo stiamo lavorando su dati reali, su stime sempre più accurate e stiamo
anche accogliendo i feedback del committente perché, come ogni progetto Agile che si
rispetti, ad ogni iterazione accogliamo tutte le osservazioni.

 

Buffering

Anche questa è una tecnica usata ovvero tenersi del tempo di buffer nella stima delle attività.
E’ una tecnica usata anche in progetti con una gestione più lineare come il waterfall. Fatto
100 il mio impegno per realizzare una attività, la stimo 120 al fine di tenermi un buffer per
gestire le incertezze.
C’è però una grossa differenza. In waterfall arrivo troppo tardi ad accorgermi di
cambiamenti necessari e richiesti dall’utente. Gestirli potrebbe ritardare ulteriormente e
nessun buffer ci può salvare.

Così come le stime possono essere sbagliate o poco precise, anche il cliente cambia idea,
e non è poco frequente.
Non sempre il cliente chiede cambiamenti che implicano un allungamento dei tempi, a volte rinuncia a
features rendendosi conto che non servono o che era poco attuabili.
Lo può fare se nel corso del progetto ha dei propotipi con cui “giocare”.
Da qui, togliendo feature, emerge la possibilità di recuperare del tempo o di inserire altre
funzionalità, ecco quindi che cambiare non vuol dire necessariamente...peggiorare.

Riassumendo quindi pianificare tutto e con troppo anticipo non ci consente di accogliere l'incertezza che è sempre presente in ogni progetto. Come è già stato delineato in "Un Cono al gusto di incertezza" e in "Se vuoi una garanzia comprati un tostapane" la certezza è una chimera che non fa parte della progettazione. Forzare i progetti entro schemi rigidi vuol dire non renderli antifragili e quindi potenzialmente fragili, delicati come dei bicchieri di cristallo.

Apriamo quindi la mente progettuale ad accettarli al fine di evolvere assieme al progetto accogliendo ogni richiesta di modifica in termini, appunto, evolutivi.

Progettazione Agile in tempi di cambiamento…(Parte 2/3)

Loading

Dopo aver visto, nella prima parte di questa serie di tre articoli, la necessità di pianificare vedremo in questo secondo episodio perchè la pianificazione fallisce.

Introduzione

Quando si mollano gli ormeggi uno non va a Capraia ma parte per Capraia.
"Andare a"  o "Partire per" sono due concetti che sembrano simili ma profondamente
diversi... (cit Marco Viganò: insegnante di vela, skipper, navigatore, imprenditore)

Partiamo da qui per riassumere i principali motivi, secondo Mike Cohn, per i quali la
pianificazione nei progetti fallisce:

  •  perché ragioniamo per attività
  •  perché i ritardi si accumulano e le attività non sono indipendenti
  •  il multitasking è dannoso
  •  ignoriamo l’incertezza
  •  le stime diventano “impegni

Ragionare per Attività

Nell’approccio tradizionale alla gestione dei progetti l’organizzazione e la suddivisione del
lavoro è fatto per attività anziché per feature, facciamo un esempio. In ambito IT una
attività può essere lo sviluppo di tutto il supporto per memorizzare i dati del back end, ad esempio
implementazione del database in cui memorizzare i dati. Al termine di questa attività non
potremo comunque dimostrare nulla all’utente perché la parte applicativa: le interfacce, le
pagine del sito, non sono ancora pronte. Quando verranno completate andremo dal nostro
committente per fare una prima demo e quasi sicuramente verremo “rimbalzati” con
alcune segnalazioni. Accogliere questi feedback può voler dire non solo modificare le
pagine del sito, ma anche scendere a livello di db e modificarne la struttura con tempi e
costi notevoli.
Se invece avessimo sviluppato la feature per memorizzare i dati di login e password,
avremmo contenuto i tempi per arrivare al primo rilascio senza sviluppare strutture non
necessarie e passibili di modifiche.

I ritardi si accumulano

Legge di Parkinson:
Il lavoro si espande fino a occupare tutto il tempo disponibile; più è il tempo e più il lavoro
sembra importante e impegnativo
Questo è vero in media, poi certamente ci sono eccezioni.
Prendersi tutto lo slot di tempo disponibile per quell’attività vuol dire che se sono in ritardo
non ho un buffer per espandermi ma finirò a passare il ritardo all’attività successiva. Inoltre
ragionando come detto per attività, vediamo spesso che queste non sono indipendenti fra
loro. Lavorare per feature limita questa dipendenza e isola i ritardi.

Il multitasking

Un falso mito. Per anni abbiamo pensato che svolgere attività in parallelo fosse
vantaggioso. In realtà è stato dimostrato come occuparsi di due task in parallelo aumenta i
tempi. Bisogna infatti considerare il tempo di switch per passare da un contesto di un task
all’altro. In alcuni ambiti e situazioni non sono immediati. Se devo riprendere un lavoro
complesso che ho abbandonato qualche giorno fa, può essere necessaria qualche ora
prima di ridiventare operativo.

Inoltre lo stesso "penny game" dimostra con un semplice gioco questa teoria. Lo potete vedere in un video su YouTube qui oppure descritto in tutti i suoi dettagli su Mokabyte.
In sostanza il multitasking costa energie mentali e psicofisiche, non produce benessere
per la persona, anzi, aumenta lo stress.

Ignorare l’incertezza

Pensiamo che una volta scritte le specifiche funzionali, fatta la stima , ottenuto e approvato
il budget, il progetto partirà e sarà stabile fino alla fine. Ma inevitabilmente le idee
cambiano, il committente ci darà nuove specifiche, incontreremo problemi tecnici e
gestionali (una persona si licenzia e va sostituita). In sostanza la differenza, come scritto
nella citazione iniziale di Marco Viganò tra partire per e andare a.
L’incertezza va prevista, accolta e ne va fatto un elemento che ci rinforza.

Le stime

Se io stimo un lavoro 5 giorni lavorativi ecco come verrà percepito.
Da me: ho detto 5 giorni quindi diciamo che in base al resto delle attività che ho da fare,
tra due settimane potrò rilasciarlo.
Dal cliente (lo stesso che mi aveva già assegnato altri task che non considera possano
occuparmi tempo…): mi ha detto 5 giorni, siamo a lunedì, quindi per venerdì ho tutto.
Una stima porta in sé un concetto di “probabilità” e quindi di incertezza. Non può essere
considerata come un commitment.

Quindi come possiamo pianificare e raggiungere delle stime in modalità Agile? Lo vedremo nell'ultima parte di questa serie di articoli.