Condividi l'articolo

Agile Mindset

FARE NON E’ ESSERE

Agilità è…

la capacità di creare e rispondere ai cambiamenti nell’ottica di migliorare il profitto in un ambiente aziendale turbolento. Agilità è l’abilità di trovare un equilibrio tra flessibilità e stabilità  (Highsmith, 2002)

Turbolenza

Il più grande pericolo in tempo di turbolenza, non è la turbolenza in sé; ma agire con la logica di ieri

(Peter Druker)

L’Agile Manifesto

La formalizzazione dei valori e principi su cui si basano framework e metodologie “leggere” è stata oggetto del lavoro di un gruppo di progettisti software e guru dell’informatica che si sono spontaneamente riuniti nella cosiddetta Agile Alliance.

Nel 2001 è stato formalizzato il manifesto dell’Agile Alliance

I valori del Manifesto

  1. Individuals and interactions over process and tools
  2. Working software over comprehensive documentation
  3. Customer collaboration over contract negotiation
  4. Responding to change over following a plan

La struttura del Manifesto si basa sul confronto di alcune coppie di elementi;  pur se importante il secondo elemento di ciascuna coppia, il primo viene fortemente privilegiato dall’Agile.

Esempio: Individuals and interactions over process and tools.

Pur essendo importanti processi e strumenti va privilegiata l’importanza strategica degli individui e le loro interazioni.

Dire che il secondo elemento è meno importante, non significa  annullarne la validità, ma, come viene sottolineato, i processi e gli strumenti aiutano le persone a lavorare con maggior efficienza, la documentazione aiuta la comunicazione, il contratto consente di gettare la basi per una proficua partnership tra il cliente ed il fornitore, seguire un piano significa mantenere una governance a livello progettuale.

Ma l’elemento di sinistra è quello che deve maggiormente ispirare il team di progetto, e l’organizzazione nella quale opera, nello sviluppare un prodotto che abbia valore per il cliente

Ecco quindi che:

1 – Le relazioni e la comunicazione tra tutti gli attori di un progetto sono fondamentali.
Le persone rappresentano un ingrediente troppo importante per il successo.
Non è un caso che il primo valore del Manifesto sia incentrato sulle persone e le loro interazioni: sono le persone che svolgono le mansioni, sono le persone che realizzano valore per il progetto e non i processi; sono le persone che si organizzano per risolvere un problema e non gli strumenti.

Il teamwork  rappresenta “l’ultimativo vantaggio competitivo” introdotto con la metodologia Agile.

2 – Bisogna rilasciare nuove versioni del software ad intervalli frequenti e bisogna mantenere il codice semplice e avanzato tecnicamente, riducendo la documentazione al minimo indispensabile.
Un prodotto senza documentazione è un disastro. Un prodotto con eccessiva documentazione allegata, per paura di non essere esaustivi o comprensibili, è decisamente peggio.

3 – La collaborazione diretta offre risultati migliori dei rapporti contrattuali.
Un contratto che specifica requisiti, schedulazione, costi è fondamentalmente difettoso. In alcuni casi, si comprende l’oggetto del contratto solo dopo che il progetto è terminato o solo dopo aver firmato il contratto.

Il miglior contratto è quello che governa e regola il modo in cui il team ed il cliente lavoreranno insieme. Il software non può essere regolamentato come un qualsiasi altro prodotto. Non è possibile fare una descrizione di un software ed avere qualcun altro che lo sviluppi con un fixed schedule ed un fixed price.

4 – Il team di sviluppo dovrebbe essere autorizzato a suggerire modifiche al progetto in ogni momento affinché i piani aderiscano e si adattino meglio alle mutate condizioni esterne.

Uno dei tanti aforismi che vengono citati in testi di Agile è  “planning is everithing, plan is nothing” (Dwight Eisenhower).

La pianificazione rappresenta un’attività  importante che non deve essere derogata, ma i piani, affinché ricalchino il contesto attuale, devono poter essere snelli acquisendo tutte le informazioni recepite sia dall’esterno che dall’interno.

Il piano, nel contesto turbolente dell’Agile, deve poter abbracciare il cambiamento e non ostacolarlo. Inoltre, essendo le persone più importanti dei processi e degli strumenti, primo valore del Manifesto, è indispensabile che siano proprio le persone che lavorano a poter prendere decisioni tattiche considerando il mutevole contesto lavorativo.

Il Manifesto detta valori ai quali ogni metodologia e framework dovrebbe ispirarsi, ma per fare questo servono anche delle regole guida, servono dei Principi che rappresentano un ponte (bridge) tra i valori e gli strumenti

I principi dell’Agile Manifesto sono i seguenti:

  1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. La priorità più alta è la soddisfazione del cliente tramite delivery anticipate e continue di software valido.
    La priorità più alta è quella di soddisfare il cliente attraverso continui rilasci di prodotto che abbiano valore e, quindi, che siano non solo funzionanti, ma tali che il cliente ne possa trarre un vantaggio competitivo. Alla fine di ogni iterazione, il ciclo di 15-20 giorni, il team deve rilasciare incrementi di valore attraverso funzionalità realmente funzionanti. Gli agilisti chiamano questi rilasci di funzionalità “done done”, dove il primo “done”, lato team di sviluppo, attesta il superamento dei test e la corrispondenza della funzionalità con i requisiti del cliente, mentre il secondo “done”, lato cliente, valida il requisito attraverso i test di accettazione (acceptance tests)
  2. Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage. Siano benvenuti i cambiamenti dei requisiti, anche durante lo sviluppo. I processi Agili sfruttano il cambiamento per dare vantaggio competitivo al cliente. Nell’approccio tradizionale, i cambiamenti all’ambito vengono trattati in termini di “corrective actions” e comportano una ripianificazione ed un aggiornamento della baseline del progetto. Nell’Agile, i cambiamenti all’ambito sono la norma e devono essere trattati non come rischio ma come opportunità per realizzare un prodotto che consenta al cliente il massimo vantaggio competitivo.
  3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale. Rilasciare frequentemente software funzionante, da un paio di settimane o un paio di mesi, favorendo una tempistica breve.
    La realizzazione del prodotto avviene per iterazioni che hanno la caratteristica di essere timeboxes, ossia di durata fissa. Minore è questa durata, più veloci saranno i rilasci e maggiore sarà la probabilità di aderire maggiormente alle aspettative del cliente. Anche in questo caso, i cambiamenti richiesti non devono spaventare in quanto potranno essere implementati nell’iterazione successiva.
  4. Business people and developers must work together daily throughout the project. Le persone del business e gli sviluppatori devono lavorare insieme di giorno in giorno durante il progetto.
    Nell’approccio tradizionale esiste il team di sviluppo da una parte ed il cliente dall’altra. Si presuppone che, già prima di terminare la fase di pianificazione, il cliente abbia ben chiaro il deliverable finale di progetto. A tal fine il cliente viene coinvolto per  ufficializzare un piano che il team (che spesso sino a quel momento non è stato ancora coinvolto!) deve poi realizzare in fase di esecuzione. Nell’approccio Agile, il cliente deve far parte del team di sviluppo e questo favorisce la comunicazione, l’interazione e la gestione dei cambiamenti
  5. Build projects around motivated individuals. Give them the environment, support their needs, and trust them to get the job done. Costruire i progetti su individui motivati, fornendogli l’ambiente adatto, supportando le loro esigenze e credere in loro nell’esecuzione del lavoro.
    L’Agile è lavoro di squadra (teamwork): sono le persone che creano valore. Per fare questo, le organizzazioni devono essere ottimizzate per riuscire a sbloccare la motivazione intrinseca dei knowledge workers (questi sono gli individui che ne sanno di più sul lavoro che svolgono rispetto ai loro capi)
  6. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation. Il metodo più efficiente ed efficace per raccogliere le informazioni del gruppo di sviluppo è una comunicazione frontale e diretta.
    Una delle pratiche dell’Agile è la cura del cosiddetto Agile Space: il team di progetto deve lavorare insieme nella stessa stanza. In tal caso il concetto della war room , espresso nell’approccio tradizionale, si sposa perfettamente anche con la metodologia Agile. Si rammenti che una e-mail è meglio di niente, che una telefonata è meglio di una e-mail e che un confronto de visu è migliore di una telefonata. In particolare la metodologia Crystal Clear introduce il concetto di comunicazione osmotica, che fa riferimento a tutta quell’informazione di fondo tra i membri del team. Questo è fattibile solo riunendo nella stessa stanza tutto il team. Quando una persona fa una domanda, altri nella stanza possono entrare in sintonia contribuendo alla discussione oppure continuare con il loro lavoro.
  7. Working software is the primary measure of progress. Il software funzionante è la principale misurazione dell’avanzamento.
    Al termine di ogni iterazione, il team di progetto deve rilasciare incrementi di software funzionante e questo rappresenta la metrica per la misurazione dell’avanzamento del progetto (progress). Questo significa semplicemente che se il team ha lavorato per rilasciare 5 funzionalità ma solo 3 sono funzionanti, verranno considerate solo queste ultime.
  8. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely . I processi Agili promuovono uno sviluppo sostenibile. Gli sponsor, gli sviluppatori e gli utenti dovrebbero essere in grado di mantenere un ritmo costante.
    Uno dei concetti chiave nell’Agile è che il team deve mantenere per tutta la durata del progetto un ritmo costante (sustainable pace) ed essere allocato per non più delle previste 40 ore settimanali. Il ritmo costante consente al team di definire un andamento ed una cadenza che si traduce in produttività costante per tutta la durata del progetto. Inoltre, se un team di sviluppo è correttamente allocato sulle attività di progetto qualora un’emergenza dovesse sorgere, il team sarebbe in grado di saperla gestire. Ma se la situazione di partenza è ben diversa, il team avrà difficoltà ad affrontare possibili emergenze oltre a quella della sovrallocazione stessa.
  9. Continuous attention to technical excellence and good design enhances agility . L’approccio agile viene migliorato da una continua attenzione all’eccellenza tecnica e da una buona progettazione.
    Gli sviluppatori devono tendere verso l’eccellenza tecnica perché questa fornisce valore per il cliente. Eccellenza tecnica non significa realizzare il prodotto perfetto, ma significa  realizzare un prodotto che fornisca valore per il cliente mantenendo la sua integrità, requisito essenziale per il successo commerciale ed elemento di soddisfazione per il team.
    L’integrità di un prodotto ha due dimensioni: integrità concettuale ed integrità percepita.
    Integrità percepita significa che il prodotto è stato in grado di raggiungere un corretto bilanciamento tra le funzionalità, l’economicità, l’affidabilità e le aspettative e i desideri del cliente. Integrità concettuale significa che il team (il sistema centrale) è stato in grado di lavorare in maniera coesa attraverso tutto il progetto. Significa anche che il cliente è stato correttamente coinvolto, soprattutto nella parte del design e che il prodotto è stato correttamente documentato.
  10. Simplicity is essential . La semplicità è fondamentale.
    La semplicità, elemento essenziale nella filosofia Agile, non significa assenza di complessità ma assenza di design non necessario o di funzionalità aggiuntive non richieste; quanto non necessario o non richiesto risponde al termine inglese Scope Creep, quindi la parola d’ordine è “No Scope Creep!”. Gestire un elemento dotato di semplicità significa aumentare la probabilità di realizzarlo nel modo migliore rispettando i tempi e le aspettative del cliente
  11. The best architectures, requirements, and designs emerge from self-organizing teams. La migliore architettura, i migliori requisiti e le migliori progettazioni nascono da un team auto-organizzato.
    Un team che si auto-organizza rappresenta l’elemento centrale dell’Agile. In un team con questa caratteristica, ogni membro si assume la responsabilità del risultato gestendo il proprio carico di lavoro (workload). Un team che si auto-organizza non è caratterizzato da una mancanza di leadership ma da un diverso stile di leadership. Creare un self-organizing team significa quindi ottenere le persone giuste, incoraggiare la partecipazione, definire i ruoli nella squadra, promuovere l’autodisciplina e guidare le persone anziché controllarle.
  12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly . Ad intervalli regolari, il team deve riflettere su come migliorare la propria efficacia e di conseguenza sintonizza e aggiusta il proprio comportamento.
    Affinché il cambiamento possa essere gestito, affinché la collaborazione e la comunicazione possano essere più efficaci, serve un elemento che faccia da collante: il feedback.

Nell’Agile esistono due pratiche caldamente consigliate a questo scopo: gli Stand-up Meeting ed il processo di Retrospective.
Lo Stand-up Meeting viene tenuto tutti i giorni alla stessa ora per un massimo di 10 minuti dove il team racconta brevemente le attività sulle quali lavorerà. Momento importante anche per capire se esistono ostacoli da rimuovere.
Retrospective significa fare tesoro delle lesson learned acquisite nella precedente iterazione. Il processo di retrospettiva non si limita solo a capire quello che è andato bene o male ma definisce le azioni da implementare durante la prossima iterazione