In un contesto in rapida e continua evoluzione come quello odierno le aziende devono affrontare lo sviluppo dei nuovi progetti in condizioni sempre più incerte, volatili e complesse cercando di mantenere la competitività e cogliere i cambiamenti di mercato. Soprattutto negli ambiti di ricerca e sviluppo nuovo prodotto, l’incertezza condiziona fortemente i metodi di lavoro dei teams che si trovano incapaci di prevedere i risultati e gli eventi futuri a causa della differenza tra la quantità di informazioni richieste e quelle effettivamente disponibili.
I classici approcci di sviluppo plan-driven, concepiti secondo un criterio di linearità, risultano eccessivamente vincolati e poco reattivi, in quanto non consentono di accogliere rapidamente le modifiche dello sviluppo software in corso d’opera. Per contrastare questa mancanza di reattività dei metodi più tradizionali, molte aziende hanno iniziato a ripensare al modo in cui i processi di sviluppo sono gestiti e a comprendere il vero valore modello Agile.
Origini ed evoluzione del modello Agile
L’approccio Agile nacque nel febbraio del 2001, quando 17 sviluppatori software professionisti si riunirono a Snowbird, nello Utah, per cercare una valida alternativa alle tecniche di sviluppo tradizionali. Tutti i partecipanti ritennero che il modello Waterfall non rappresentasse la soluzione più efficace, soprattutto in un’ambiente in cui è importante rispondere ai continui cambiamenti e quindi possedere una certa “agilità” per affrontare uno sviluppo dinamico. L’obiettivo era quello di definire una nuova metodologia in grado di aumentare la qualità, migliorare la flessibilità e accelerare il time to market limitando ritardi e sprechi e soprattutto l’insoddisfazione dei clienti dovuta al rilascio di prodotti non conformi alle specifiche richieste. Il risultato fu l’elaborazione di un “Manifesto Agile”, un documento che delineava i principi fondamentali su cui si basa l’approccio Agile.
Questi principi pongono l’accento sulla risposta al cambiamento, sulla consegna frequente di software funzionante, sulla collaborazione tra individui e sulla capacità di accogliere i requisiti anche a uno stadio avanzato dello sviluppo. L’Agile, un framework di sviluppo che prevede di energizzare, responsabilizzare e consentire ai teams di progetto di generare valore in modo rapido e affidabile, coinvolgendo i clienti, apprendendo e adattandosi continuamente alle mutevoli esigenze dell’ambiente circostante. Mediante questo approccio non si pianifica né si progetta un prodotto in anticipo, ma il processo di sviluppo evolve per cicli iterativi. Queste brevi sessioni, chiamate sprint, solitamente hanno una durata di 2 o 3 settimane, in cui ogni membro del team deve completare una serie di compiti assegnati (comunemente chiamati task). Al termine di ogni sprint si analizzano i risultati ottenuti per misurare lo stato di avanzamento dei lavori e la velocità con cui il team di sviluppo brucia le tappe.
A questo punto il processo ricomincia da capo. I processi di gestione dei progetti che incorporano questi principi consentono al cliente di ricevere man mano aggiornamenti e segnalare priorità o introdurre cambiamenti quando necessario. Dunque, l’Agile consente di rispondere al cambiamento in un business turbolento facendo ricorso a:
• una forte interazione con i clienti e la loro integrazione durante le fasi di sviluppo;
• una riprioritizzazione rapida delle risorse;
• una consegna evolutiva, incrementale e iterativa dei prodotti;
• una metodologia just in time, che generi valore massimizzando il lavoro non svolto.
Rispetto alle metodologie tradizionali che puntano alla massimizzazione del proftto (shareholders based), l’Agile ha l’obiettivo di massimizzare la soddisfazione del cliente, cioè il valore generato (stakeholders based). Inoltre, il processo passa da essere prescrittivo (rulebased) ad adattativo (principle-based).
Il Manifesto Agile
Per comprendere appieno le potenzialità dell’Agile, è essenziale esaminare i suoi principi e pratiche fondamentali che sono stati appunto riportati all’interno del “Manifesto Agile” suddivisi in 12 principi e 4 valori che esprimono le idee e le riflessioni dei fondatori:
I principi
1. La nostra massima priorità è soddisfare il cliente rilasciando software di valore, fin da subito e in maniera continua.
2. Accogliamo i cambiamenti nei requisiti, anche a stadi avanzati dello sviluppo. I processi agili sfruttano il cambiamento a favore del vantaggio competitivo del cliente.
3. Consegniamo frequentemente software funzionante, con cadenza variabile da un paio di settimane a un paio di mesi, preferendo i periodi brevi
4. Committenti e sviluppatori devono lavorare insieme quotidianamente per tutta la durata del progetto.
5. Fondiamo i progetti su individui motivati. Diamo loro l’ambiente e il supporto di cui hanno bisogno e confidiamo nella loro capacità di portare il lavoro a termine.
6. Una conversazione faccia a faccia è il modo più efficiente e più efficace per comunicare con il team e all’interno del team.
7. Il software funzionante è il principale metro di misura di progresso.
8. I processi agili promuovono uno sviluppo sostenibile. Gli sponsor, gli sviluppatori e gli utenti dovrebbero essere in grado di mantenere un ritmo costante.
9. La continua attenzione all’eccellenza tecnica e alla buona progettazione esalta l’agilità.
10. La semplicità – l’arte di massimizzare la quantità di lavoro non svolto – è essenziale.
11. Le architetture, i requisiti e la progettazione migliori emergono da team che si autoorganizzano.
12. A intervalli regolari il team riflette su come diventare più efficace, dopodiché regola e adatta il proprio comportamento di conseguenza.
I valori
I. Gli individui e le interazioni più che i processi e gli strumenti. Lo scopo di questo valore è proprio quello di sottolineare l’importanza di avere un bilanciamento tra gli individui e i processi. Oggi molti progetti sono caratterizzati da un’elevata incertezza, con una forte spinta all’innovazione e alla creatività. In contesti come questo, seguire un processo predefinito e standardizzato non è mai la soluzione ottimale per portare a termine con successo un progetto. Di fronte all’incertezza e all’esplorazione di nuove soluzioni, i membri del team dovrebbero avere la libertà di sperimentare e di essere sempre aperti all’apprendimento; ognuno dovrebbe avere la possibilità di creare i suoi processi, personalizzandoli in base alle proprie esigenze e agli obiettivi da perseguire. Tuttavia, i team di sviluppo sono soliti ricevere processi e strumenti predefiniti da parte dell’azienda, rimanendo così bloccati dalle abitudini all’interno di una cultura predittiva e questo chiude l’apertura verso l’innovazione, la creatività e l’esplorazione di nuove soluzioni.
II. Il software funzionante più che la documentazione esaustiva. Con “software funzionante” si intende un software completo, testato, integrato, che risponda ai requisiti di qualità richiesti e che generi valore per il cliente. La qualità è soggettiva e può cambiare nel corso degli anni, per questo motivo occorre sempre specificare le richieste in maniera chiara e misurabile, indicando qual è il requisito qualitativo da rispettare. Per quanto riguarda la documentazione esaustiva invece, si intende tutto quel lavoro che non è consegnato al cliente perché privo di valore.
III. La collaborazione con il cliente più che la negoziazione dei contratti. Questo valore si basa sulla necessità di mantenere sempre una relazione di collaborazione con i principali stakeholder del progetto, fortemente fondata sul concetto di
trasparenza e fiducia. In tal senso, è necessario formulare dei contratti adeguati alla situazione, senza puntare a una continua negoziazione, bensì a una collaborazione costante.
IV. Rispondere al cambiamento più che seguire un piano. La metodologia Agile non prevede l’utilizzo di un Gantt, ma ciò non significa che la pianificazione sia completamente assente. Piuttosto, si procede passo per passo con una pianificazione di tipo adattativo, che accetta cambiamenti al progetto ed è estremamente flessibile. Questo tipo di pianificazione non è supportata da un percorso predefinito così da orientare il team ad abbracciare il cambiamento.
Le pratiche
Oltre a queste chiare e specifiche indicazioni, all’interno del Manifesto, troviamo anche una serie di “pratiche” basate su cicli iterativi e di sviluppo incrementale, in cui i requisiti e le soluzioni evolvono dando la priorità ai clienti, grazie al lavoro di team collaborativi, interfunzionali e auto-organizzati. In totale si possono identificare 6 pratiche di gestione:
• L’uso del concetto di “product vision”, che prevede l’impiego di strumenti visivi come lavagne, figure o disegni per fornire una semplice descrizione del progetto generale. Aiuta a identificare quali aspetti sono maggiormente apprezzati dai clienti o dal mercato e non a capire come sviluppare il prodotto. Utilizza metafore, figure e prototipi, differendo quindi dal modo tradizionale di presentare il design del prodotto (solitamente è sotto forma di WBS o di distinta base, con una descrizione prevalentemente testuale e dettagliata dell’attività da svolgere e dei parametri delle prestazioni del prodotto).
• L’uso di una comunicazione stretta, utilizzando semplici strumenti e processi di comunicazione del piano di progetto. Si fa riferimento alla comunicazione interpersonale, fra tutti gli stakeholder di progetto (cliente compreso) e serve ad avere una buona analisi dei requisiti e una proficua collaborazione tra gli sviluppatori.
• L’uso di una pianificazione iterativa: non è sviluppato un unico piano, ma l’intero progetto è spaccato su brevi iterazioni,
all’interno delle quali c’è una pianificazione di dettaglio. Questa pratica consiste nella consegna rapida e continua di porzioni di prodotto, ottenendo costantemente un feedback da parte del cliente in modo tale da rispondere ai cambiamenti nel modo più rapido possibile.
• L’uso di team autogestiti e auto-diretti per lo sviluppo delle attività, che consente di garantire il pieno impegno e coinvolgimento di ogni membro del team.
• L’impiego di team autogestiti e auto-diretti nelle attività di monitoraggio e aggiornamento del piano di progetto, che aiuta a monitorare costantemente i progressi. Il coinvolgimento attivo del team, sia nella pianificazione che nel controllo del progetto, contribuisce a rendere più efficace l’interazione e la comunicazione tra gli individui, nonché lo sviluppo di figure professionali in grado di imparare, operare e adattarsi di fronte ad ambienti complessi.
• L’aggiornamento frequente delle attività del piano di progetto, soprattutto alla fine di ogni iterazione, è essenziale, a differenza della teoria tradizionale che prevede che il progetto debba essere rivisto dopo un importante milestone o in concomitanza della conclusione di una fase.
Implementazione pratica della filosofia Agile
La filosofia Agile può essere implementata tramite diversi framework di gestione che riflettono i suoi principi. Tra i framework più popolari possiamo ricordare Scrum, Kanban e Extreme Programming (XP), ognuno dei quali offre un approccio unico allo sviluppo Agile.
• Scrum è forse il framework Agile più diffuso ed è caratterizzato da sprint, riunioni quotidiane stand-up e una serie di ruoli chiave come il Product Owner e lo Scrum Master. Gli sprint, di solito della durata di una o due settimane, consentono ai teams di concentrarsi su obiettivi specifici e di fornire valore in modo iterativo.
• Kanban si basa sulla visualizzazione del flusso di lavoro attraverso una board Kanban, divisa in colonne che rappresentano le fasi del processo. Questo permette ai teams di monitorare il lavoro in corso, identificare eventuali blocchi e ottimizzare il flusso di lavoro per massimizzare l’efficienza.
• Extreme Programming (XP)mette l’accento sulla qualità del software attraverso pratiche come il pair programming, il test-driven development (TDD) e la refactoring continuo del codice. Questo approccio mira a ridurre i difetti e a migliorare la manutenibilità del software nel lungo termine.
I vantaggi
Ma quali sono i vantaggi concreti dell’Agile nello sviluppo del codice?
1. Riduzione del Rischio: grazie alla consegna frequente di software funzionante e al feedback tempestivo, i teams Agile sono in grado di identificare e affrontare i problemi in modo rapido ed efficiente, riducendo così il rischio di fallimento del progetto.
2. Maggiore Adattabilità: l’approccio Agile consente ai teams di adattarsi rapidamente ai cambiamenti nei requisiti del progetto o nelle condizioni di mercato, assicurando che il prodotto finale sia sempre allineato alle esigenze del cliente.
3. Migliore Coinvolgimento del cliente: la consegna frequente di valore consente ai clienti di vedere il progresso del progetto in tempo reale e di fornire feedback tempestivo. Questo promuove un coinvolgimento più attivo del cliente e assicura che il prodotto soddisfi pienamente le sue aspettative.
4. Efficienza Operativa: le pratiche di automazione e testing continuo riducono i tempi di sviluppo e migliorano la qualità del codice, consentendo ai teams di concentrarsi su compiti di maggiore valore aggiunto e di massimizzare l’efficienza operativa.
5. Cultura del miglioramento continuo: l’Agile promuove una cultura di apprendimento e miglioramento continuo, in cui i teams cercano costantemente di ottimizzare i loro processi e di superare i propri limiti. Questo favorisce un ambiente di lavoro dinamico e stimolante in cui l’innovazione trova terreno fertile.
Le Sfide
Quali sfide devono affrontare le organizzazioni che intendono adottare queste metodologie? Nonostante i numerosi vantaggi, l’adozione dell’Agile può presentare alcune sfide per le organizzazioni, in particolare quelle abituate a pratiche più tradizionali.
• Cambiamento Culturale: L’Agile richiede un cambiamento culturale significativo, che coinvolge non solo i processi e le pratiche di sviluppo, ma anche le mentalità e le abitudini dei membri del team. Questo può richiedere tempo e sforzo per essere pienamente assimilato.
• Integrazione con Processi Esistenti: Per le organizzazioni con processi consolidati, integrare l’Agile può essere una sfida. È importante trovare un equilibrio tra l’adozione di pratiche Agile e il mantenimento di processi esistenti che funzionano bene.
• Comunicazione e Collaborazione: Anche se l’Agile promuove la comunicazione e la collaborazione, può essere difficile per i teams superare le barriere comunicative e lavorare in modo effettivo insieme, specialmente se lavorano in ambienti distribuiti o remoti.
• Gestione del Cambiamento: L’Agile richiede una maggiore flessibilità e adattabilità da parte di tutti i membri del team. È importante che i leader siano in grado di gestire il cambiamento in modo efficace e di fornire il supporto necessario per il successo dell’adozione Agile.
Conclusione
In conclusione, l’Agile rappresenta un approccio trasformativo allo sviluppo del software, che mette al centro la collaborazione, l’adattabilità e il valore per il cliente. Abbracciare i principi e le pratiche dell’Agile può portare a una maggiore efficienza operativa, una migliore soddisfazione del cliente e una maggiore competitività sul mercato. Tuttavia, è importante riconoscere che l’adozione dell’Agile è un processo continuo che richiede impegno, pazienza e un costante desiderio di miglioramento. Con il giusto approccio e il sostegno adeguato, le organizzazioni possono trarre enormi benefici dall’Agile e trasformare radicalmente il modo in cui sviluppano il codice e consegnano valore ai propri clienti.