Negli ultimi anni, i modelli di gestione aziendale si sono dovuti adattare a nuove condizioni di produzione, caratterizzate da altissima competizione e richieste di maggiore produttività, velocità e qualità. Un contesto che ha portato al cambiamento della natura dei progetti da gestire, per i quali i principi del Management “tradizionale” non bastano più.

Proprio per aiutare le imprese e l’organizzazione aziendale nella gestione di ‘progetti complessi’, sono state introdotte metodologie e tecniche evolute di Project Management, prime tra tutte e più efficaci, il metodo Agile e Scrum.

Cos’è il metodo Agile?

Si tratta di una metodologia innovativa basata sull’interazione continua con gli Stakeholder, la cui soddisfazione è chiaramente determinante per la buona riuscita del progetto e per lo sviluppo dell’organizzazione. L’idea di base delle metodologie agili è di non essere predittive, non cercano cioè di prevedere come evolverà il sistema, ma di essere adattive, propongono cioè valori e pratiche per favorire l’adattamento all’evoluzione dei requisiti dell’utente, prima che del sistema software.

Nei progetti software, le esigenze del cliente sono in costante mutamento: sebbene l’avere in anticipo tutti i requisiti dell’utente sia un aspetto desiderabile, spesso non è ottenibile.

Tutto cambia nel software. I requisiti cambiano. La progettazione cambia.  Gli aspetti commerciali cambiano.  La tecnologia cambia.  I componenti del team cambiano. Il problema non è il cambiamento, di per sé, perché i cambiamenti avverranno; il problema, piuttosto, è l’inabilità di far fronte ai cambiamenti quando essi avvengono.

Kent Beck

Questa metodologia, di fatto, porta profondi cambiamenti al processo di sviluppo. Uno tra i più importanti è quello di ridurre i tempi di consegna: questo risulta possibile perchè il progetto totale viene suddiviso in porzioni più piccole, ognuna delle quali sarà trasmessa al cliente, con funzionalità utilizzabili al 100%. Ciò permette di arrivare sul mercato nel minore tempo possibile, con dei rilasci periodici perfettamente funzionanti, a differenza di quanto avviene utilizzando un modello a cascata tradizionale.

Ciascuna iterazione può essere immaginata come un piccolo progetto da portare a termine, nel quale sono presenti le consuete fasi del processo di sviluppo del software, con la differenza, rispetto alle vecchie metodologie, che si ha un immediato riscontro da parte del cliente, dato soprattutto dalla stretta collaborazione tra il team di sviluppo e gli esperti di business.

Con una metodologia Agile, grazie ai ridotti passaggi di consegna, è possibile anticipare la concorrenza e uscire prima sul mercato, riducendo allo stesso tempo il rischio di fallimento del progetto e dando la possibilità al cliente di beneficiare del nuovo software in tempi molto più rapidi.

La comunicazione tra team di sviluppo e cliente è di fondamentale importanza, sia nei casi positivi che in quelli negativi, perché aiuta a gestire le eventuali nuove esigenze e le priorità in maniera molto rapida. Fornisce, inoltre, una migliore visibilità (intesa come monitoraggio) dell’avanzamento del progetto.
Lavorando a stretto contatto con il cliente si possono comprendere meglio le sue necessità, evitando di prendere percorsi sbagliati e di sprecare del tempo inutilmente. L’efficacia della comunicazione con il cliente durante tutte le iterazioni porta alla completa soddisfazione del cliente stesso.

 In un certo senso, si può vedere la metodologia Agile come una raccolta di quelle tecniche che rivoluzionano i metodi tradizionali e che condividono i valori e i princìpi del Manifesto Agile. Sotto questo nome, infatti, si raggruppano metodologie innovative come Extreme Programming (o XP, ideato da Kent Beck), Crystal (ideato da Alistair Cockburn), Scrum (ideato da Ken Schwaber) e Lean Software Development (ideato da Tom e Mary Poppendieck).

Oggi vogliamo parlarti dell’approccio utilizzato in Coderblock: lo Scrum Method!

Cos’è Scrum?

 Scrum is not a methodology – it is a pathway

 Ken Schwaber

Scrum è il metodo Agile più diffuso, particolarmente indicato per lo sviluppo di progetti complessi ed innovativi. Si tratta di un framework, un particolare insieme di best practice, che divide il processo di gestione di un progetto in Sprint (concetto fondamentale che approfondiremo qualche riga più in là) per strutturare lo sviluppo del prodotto e, allo stesso tempo, le esigenze del committente/cliente. 

Il termine Scrum deriva dal rugby e può essere tradotto con pacchetto di mischia, ovvero quella fase di un incontro in cui l’arbitro ordina la ripresa del gioco tra due gruppi ordinati di giocatori contrapposti, uno per squadra. In tal senso, tutti i protagonisti scesi in campo, devono lavorare insieme per raggiungere un unico obiettivo: nel rugby, lo scopo è di spingere tutti nella stessa direzione per conquistare la palla; nell’informatica, fine ultimo è quello di sviluppare il software più efficiente e di migliore qualità.

Una caratteristica di Scrum è quella di condurre i suoi progetti in modo iterativo ed incrementale, consegnando al cliente un software funzionante con sessioni di durata definita (quindi Timeboxed). Lavorare seguendo questo approccio ha 6 benefici fondamentali:

  • Permette di concentrarsi su ciò che è più determinante, evitando l’overengineering.
  • Quantifica il tempo effettivo da dedicare al rilascio di una porzione di lavoro, massimizzando le ore lavorative e aumentando l’efficienza.
  • Consente di lavorare in modo produttivo anche in situazioni particolarmente complesse
  • È fortemente orientato verso risultati concreti e verso la gestione dei cambiamenti, piuttosto che alla pianificazione iniziale e statica
  • Aumenta il coinvolgimento del cliente e l’assunzione di responsabilità collettiva da parte del team
  • Favorisce la creazione di team coesi

All’interno di ciascun ciclo di sviluppo, definito Sprint, il team seleziona i propri Task da una lista di attività priorizzate e si impegna a completare tutte le attività selezionate entro la fine della sessione di lavoro stabilita. Scopo fondamentale della Sprint è quello di aiutare tutti a essere a conoscenza, in qualsiasi momento, dello stato di avanzamento del progetto: a tal proposito, vengono spesso utilizzati grafici e/o delle tabelle necessari a monitorare tutte le operazioni compiute e/o programmate, poste sulla cosiddetta Task Board (spesso post-it colorati su una parete oppure sezioni di una lavagna).


Le principali attiività di Scrum

Daily Scrum
Il Daily Scrum è una riunione quotidiana di 15 minuti circa tra il capo progetto e tutti i partecipanti. Viene effettuata sempre nello stesso luogo e alla stessa ora, ogni giorno. Ha lo scopo di identificare solamente i ‘colli di bottiglia’, cioè le difficoltà riscontrate nell’avanzamento dei lavori. Ogni membro del team dice brevemente quali Task sono stati conclusi il giorno prima, quali ostacoli ha riscontrato nella sua attività e cosa farà quel giorno.
In questa riunione non viene fatta nessuna discussione (si possono fare eventualmente una volta terminato il breve incontro), proprio perché mira soltanto a mettere al corrente gli altri membri della progressione del progetto e a far luce sugli eventuali problemi riscontrati.


Sprint Planning
Lo Sprint Planning è una riunione, fatta con il cliente che ha commissionato il prodotto e con gli altri stakeholders, per la pianificazione dello sprint, nel quale si definiscono i contenuti del prossimo rilascio, in base alle priorità evidenziate dal cliente e alle stime dell’impegno da parte del team. Si distinguono due parti: nella prima parte viene deciso ciò che sarà fatto nella Sprint, mentre nella seconda, il modo in cui il Team andrà ad implementare la nuova funzionalità.
Durante la progettazione dello sprint, il team individua i compiti che dovrà svolgere per ottenere le funzionalità necessarie a convertire il Product Backlog in Software.


Sprint Review e Sprint Retrospective
La Sprint Review e la Sprint Retrospective sono delle riunioni, fatte insieme al cliente e agli stakeholders, per esporre gli elementi che sono stati sviluppati e per fare la revisione dello sprint appena concluso, verificando il lavoro (funzionalità rilasciate o modificate) e facendo un esame delle criticità riscontrate, in modo da aggiornare il processo lavorativo per aumentare l’efficienza e la produttività.

Ruoli dello Scrum Team

Scrum Master: il responsabile del processo, colui che deve garantire che la metodologia Scrum venga compresa ed eseguita con successo. Deve accertarsi che il team lavori in maniera coerente con lo sviluppo del progetto, eliminare eventuali ostacoli esterni allo Scrum Team e organizzare i meeting di confronto.

Product Owner: colui che conosce tutti i requisiti del prodotto e porta avanti gli interessi di tutti gli stakeholder. L’interfaccia tra il business, i clienti e i requisiti del prodotto da un lato e il team dall’altro. Deve massimizzare il valore del prodotto e del lavoro svolto dal Team di Sviluppo.

Team di Sviluppo: il gruppo di professionisti cross-funzionali ed auto-organizzato, il cui numero di solito si mantiene da 5 a 9. Si occupa dello sviluppo del prodotto e del testing delle funzionalità, e ha la responsabilità di organizzare le priorità trasformandole in task da completare per portare a termine quel determinato sprint.

La peculiarità dell’approccio Agile è la volontà di mettere al centro non i processi e gli strumenti di lavoro ma le persone e il modo in cui interagiscono tra loro. Questo principio fa leva sull’idea che i processi, per quanto strutturati ed efficienti, senza il contributo delle persone non bastino, al contrario, le persone coinvolte, responsabilizzate e libere di creare il proprio percorso ottimale, possono raggiungere risultati straordinari. In un contesto di lavoro tradizionale, invece, tutte le decisioni sono centralizzate e, di conseguenza, risulta naturale la dilatazione dei tempi; invece in un contesto agile (in cui la responsabilità è distribuita a tutti i membri del team) si crea un circolo virtuoso nel quale aumenta la motivazione dei singoli e la qualità della relazione del team.