Fixed Date nei Progetti Agili

Loading

Introduzione

Quando si pensa ai progetto “Agili”, realizzati con un qualsiasi framework, il pensiero successivo è “perdo il controllo”. Non ho più date fisse e il budget non è sotto controllo. Me lo sono sentito dire molte volte, come se agilità fosse un sinonimo di improvvisazione.

Niente di più sbagliato!

Vedremo anzitutto come le date variabili possono essere fonte di incertezza e possono creare anche più problemi; allo stesso tempo chiariremo il dubbio su tempi e costi di un progetto agile.

Date, Budget, Scope

In un articolo a proposito della gestione delle date fisse nei progetti Agili, Ron Jeffries, scrive: ”It's not that we don't have enough time. We have too much to do.”

Mantenere i tempi ed aumentare il carico di lavoro prima o poi fa “scoppiare il team”: rende le comunicazioni pessime e diminuisce la proattività del team. Questi sono dati ottenuti da varie fonti autorevoli che si occupano di teamwork e di soft skills, cito Goleman piuttosto che Scharmer. 

In questo tipo di situazione è il management che deve intervenire perché il suo compito è quello di identificare gli obiettivi e identificare risorse e persone necessarie a raggiungerli in modo razionale e pianificato. Non si tratta di puntare a caso il dito sul calendario, fissare una data e poi costruirci intorno un processo di sviluppo che, in molti casi, non la potrà soddisfare.

Del resto il management non può e non deve neanche delegare il team a identificare una data perché farlo vorrebbe necessariamente dire delegare anche l’autorità per gestire risorse e persone al fine di centrare la data. E’ chiaro che stiamo chiedendo al team di fare il manager. In realtà il team può solo fare il manager di se stesso e dei suoi compiti relativi al processo di sviluppo. Infatti per poter centrare una data di rilascio sarebbe necessario avere il controllo delle persone e delle features (dello scope).

Quindi il manager dovrebbe assumere un ruolo differente ed entrare in un’ottica di facilitatore. La responsabilità di gestione della data rimane la sua con l’aiuto del product owner.

Le variabili in gioco sono quindi tre, la data, lo scope ed il budget, rappresentabili con un triangolo:

Avere una data fissa per una certa release a volte aiuta, altre è proprio necessaria. Il rilascio di una funzionalità o di un prodotto potrebbe infatti coinvolgere più uffici, non solo il team di sviluppo, anche il marketing o la logistica che devono organizzare i propri piani di lavoro per arrivare all'obiettivo. Se non avessimo quella data stabilita potrebbe essere, ad esempio, impossibile far partire delle campagne pubblicitarie per il prodotto che stiamo rilasciando.

Stabilito quindi che è possibile gestire le date fisse, come gestiamo le altre due grandezze, budget e scope?

Anzitutto fissiamo il budget. In genere il business e l’it amano fissare il budget per ogni progetto al fine di avere quella sensazione di “ho tutto sotto controllo”. In realtà invece spesso si sfora con il budget perché le modifiche richieste sono spesso numerose ed impattanti. Consideriamo comunque, ai nostri fini, che il budget sia stato stabilito. In ogni caso stakeholder e eventuali sponsor dovrebbero sapere quanti soldi voglio investire nel progetto.

Come gestiamo lo scope?

Come per le altre due variabili possiamo fissarlo o renderlo variabile. Uno scope variabile ci permette di gestire i cambiamenti e le richieste di modifiche che, da manifesto agile, dovrebbero essere ben accolte. Ma accettare il cambiamento e accompagnarlo attraverso la rimodulazione dello scope, cosa che nell’agilità si fa attraverso il product backlog, è il primo passo per essere antifragili.

Quindi se il nostro obiettivo, mantenendo un focus variabile, è quello di avere una data ed un budget fissi, necessariamente dobbiamo avere il controllo sul team di persone, potendolo anche rinforzare, considerando sempre la legge di Brooks:  aggiungere forza lavoro ad un progetto software in ritardo, lo farà ritardare ancora di più.

Conclusioni

Tenendo in mente il nostro triangolo e fissata la data ed il budget, manteniamo variabile lo scope di progetto.

Lo facciamo attraverso un backlog di prodotto che cambia nel tempo in base alle richieste del business e dei clienti e anche all’andamento del progetto stesso. Alcune features potrebbero ad esempio essere tolte dal pb se non sono di primaria importanza e se il tempo o il costo di progetto sta aumentando troppo.

Lo scope quindi è il nostro strumento per essere antifragili e per rispondere alle avversità che sicuramente incontreremo, siano esse tecniche, che di persone.

I progetti agili permettono di far variare forma al triangolo vedendo appunto lo scope variabile. 

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.

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

Loading

Introduzione

Alcune domande che ho avuto in testa nei miei primi approcci all’Agilità, intesa come modalità di condurre i progetti e lavorando nel settore dell’information technology in stile waterfall, erano: come faccio a gestire un progetto in modalità Agile dovendo gestire anche la pianificazione di budget e di scadenze? In altre parole se l’agilità accetta ed anzi promuove i cambiamenti in quanto fonte di miglioramento, come faccio a gestirmi il piano? Cambiano i tempi di consegna se accetto, anzi promuovo le modifiche in corso d’opera? Per non parlare dei costi.

Potrei anche accettare di non basarmi su un Gantt ma se ho stimato 100 giorni uomo e un costo di qualche centinaio di migliaia di euro, come faccio ad andare dal committente a dirgli che qualcosa è cambiato nella data di rilascio e nei costi?

In questa serie di tre articoli vi proporrò un percorso che ha come tema la pianificazione in ambito progettuale. Nel primo articolo analizzeremo la necessità di pianificare, nel secondo perché la pianificazione fallisce ed infine nel terzo ed ultimo vedremo l’approccio Agile alla pianificazione. Riassumendo come gestire l’incertezza iniziale di alcuni (o forse molti) progetti cambiando approccio.

Perché si pianifica 

Quanto mi costa? Quando me lo consegnerai ? Quando potrò vedere qualcosa? 

Spesso queste domande arrivano in coda al primo incontro col cliente in cui si sta delineando l’opportunità di realizzare un progetto/prodotto/servizio.

Le risposte a queste domande servono per pianificare campagne di marketing, gestire i costi aziendali, organizzare l’eventuale training degli utenti e così via.

Non è sempre possibile dare risposte perché non abbiamo chiaro il contesto o tutti i dettagli necessari. Non è solo importante la vision del progetto ma anche la vision degli stakeholder. In altre parole cosa vogliamo realizzare per loro? Se vogliamo avvicinarci alle loro aspettative dobbiamo quasi sicuramente avanzare a step. Se invece il nostro obiettivo è realizzare un progetto “chiavi in mano” e puntare a consolidare tutti gli step in anticipo, anche perchè non siamo troppo avvezzi ai cambiamenti, allora molto probabilmente avremo una visione degli stakeholder come soggetti che sono quasi fastidiosi nell’ambito del progetto. Gli stakeholder introducono cambiamenti, chiariscono in ritardo rispetto all’inizio e quindi alterano i piani.

Già da queste considerazioni si capisce bene il senso del concetto “mindset Agile”. Andare verso l’agilità non è solo organizzare persone e lavoro in modo da cambiare il nome alle riunioni e fare qualche board dove appendere i nostri post-it, bensì è qualcosa di concettualmente più profondo. Le interessantissime testimonianze portate da alcune persone, principalmente HR e It manager nel corso dell’Agile for management forum tenutosi a Milano e organizzato da AgileReloaded lo hanno dimostrato: 

l’agilità è sistemica. 

Sebbene molti abbiano iniziato con un progetto pilota, il progetto per essere sostenuto e per potersi poi diffondere ha bisogno di appoggi da parte di diverse funzioni aziendali. 

Per dirla con un bellissimo concetto espresso da Marquet nel libro Turn the Ship Around, non dobbiamo spostare l’informazione verso “l’alto” (intesa come vertici aziendali) ma portare “l’alto” verso l’informazione. Nell’agilità è proprio questo uno dei passaggi fondamentali. “L’alto” deve andare “in basso” e acquisire le necessarie informazioni per capire le criticità e per vedere come un diverso modo di organizzare il lavoro può migliorare il processo e la vita stessa dei dipendenti. 

Quando il piano sfugge

Recentemente mi sono trovato a parlare con il mio istruttore di vela e amico (M.V. metto solo le iniziali per rispettare la sua privacy), ottimo velista, imprenditore e skipper. Mi chiedeva cosa fosse l’agilità e scrum. Nello spiegarglielo (spero chiaramente) ho fatto spesso riferimento al suo mondo professionale: le barche a vela e la nautica.

Progettare in modo Agile vuol dire accettare di andare a vela. Conosco il tuo porto di arrivo ma quasi mai lo puoi raggiungere con una rotta diretta, se ho il vento contro dovrò “bordeggiare”, vedi figura.

Andatura di “bolina” di una barca a vela

Bordeggiare vuol dire adattarsi ai cambiamenti del vento, risalire le difficoltà, con una modalità antifragile piuttosto che robusta.

Sempre per rimanere in un contesto nautico, quanto impiega una barca a vela per raggiungere l’isola al largo delle coste dalle quali siamo partiti? Possiamo fare una stima certo, considerando il vento che probabilmente ci sarà, ma dovremmo anche considerare la corrente, già più difficile da calcolare. Quindi come facciamo a capire dopo quanto tempo arriveremo?

Stimiamo il percorso e accettiamo di avere una stima non totalmente precisa, iniziamo a percorrerne una parte e poi rifacciamo la stima per il percorso rimanente. Reiteriamo questo procedimento fino alla fine ad intervalli regolari. Questo è sinteticamente l’approccio che possiamo seguire ma, comandante dell’imbarcazione, equipaggio e persone che ci attendono a terra devono tutti essere consapevoli della modalità con la quale stiamo conducendo il nostro viaggio altrimenti andremo a creare delle false aspettative rispetto all’orario di arrivo.

Nell’accezione Agile di progettazione i cambiamenti sono i benvenuti. Naturalmente non è il solo principio da seguire, ma quello che vorrei qui mettere in evidenza. Se i cambiamenti sono i benvenuti e se i clienti sono sempre da soddisfare allora non sarebbe più facile lavorare day-by-day senza piani? Non avremmo l’assillo delle deadline, dei release plan, la velocity, gli sprint e quant’altro.

Chi ha lavorato con questa modalità sa, senza altro aggiungere, che lavorare così è una vera tortura. Alcuni addirittura si spingono a sostenere che non ci sono altre possibilità. 

Purtroppo a volte hanno ragione ed in contesti in cui gli stakeholder non sono in grado di formulare le proprie esigenze e il business dell’azienda è confuso non è facile pianificare e progettare. Malgrado queste premesse rimane costante domanda che tutti noi progettisti, PM, Agilisti e quant’altro temiamo:

“Ma quanto mi costa e quando me lo consegni?”

Sempre per cercare dei parallelismi credo che nessuno vada in concessionaria chiedendo: ”Vorrei un’auto che sia comoda da guidare in città e anche per lunghi viaggi con un di optional carini e utili e che trasporti un di persone. Quanto mi costa e per quando sarebbe pronta?”

Nella seconda parte di questo articolo risponderemo a queste domande.

“If you want a guarantee, buy a toaster”- Clint Eastwood.

Loading

Una delle prime domande, poste dal committente di un progetto, è:

"Quanto ci vuole per realizzare ciò di cui ho bisogno?"

In sostanza, che garanzia mi dai che poi non mi chiederai di più? La risposta è nella famosa frase di Clint Eastwood tratta dal film La Recluta del 1990 che da' il titolo a questo articolo:

"se vuoi una garanzia comprati un tostapane"

Premesso che sarebbe interessante valutare il livello di chiarezza dei requisiti sui quali dobbiamo fornire la stima, a questa domanda non andrebbe

MAI DATA RISPOSTA!

Se infatti diciamo 5 giorni di lavoro nella nostra testa vuol dire, "Dunque 5 giorni di effort ma considerando qualche urgenza e qualche riciclo saranno quasi sicuramente quasi due settimane prima della consegna".

Nella testa del committente invece è:"5 giorni? Ottimo al prossimo SAL (stato avanzamento lavori) tra una settimana la posso vendere come cosa fatta!!"

Ora, a parte la metafora, uno dei motivi per cui le stime spesso "saltano" è che vengono fraintese, diventano dei commitments. La differenza però è che le stime sono intrinsecamente legate ad un concetto di probabilità, i commitments no, sono legate a precise date di consegna.

Importante quindi tenerle distinte e comunicarle con diverse unità di misura.