Le metodologie Agile promuovono uno sviluppo sostenibile.
Partendo dal modello tradizionale del ciclo di vita del software troviamo il modello a cascata (waterfall) strutturato in una sequenza lineare di fasi, al termine di ogni fase se ne inizia una nuova ed ogni fase viene documentata. Questo perchè il modello è stato ereditato dalla produzione industriale a partire dagli anni 70′:
- Fattibilità
- Analisi
- Disegno
- Implementazione
- Test
- Rilascio
Oggi ci sembra ovvio che un modello del genere presenta diverse lacune per essere adottato per lo sviluppo grazie anche all’evoluzione dei linguaggi di programmazione con il passaggio dal linguaggio procedurale dove si sviluppava tutto in un unica procedura a sistemi complessi di service providers e service users che dialogano sulla base di messaggi.
I principi su cui si basa una metodologia Agile sono:
- le persone e le interazioni sono più importanti dei processi e degli strumenti (ossia le relazioni e la comunicazione tra gli attori di un progetto software sono la miglior risorsa del progetto);
- è più importante avere software funzionante che documentazione (bisogna rilasciare nuove versioni del software ad intervalli frequenti, e bisogna mantenere il codice semplice e avanzato tecnicamente, riducendo la documentazione al minimo indispensabile);
- bisogna collaborare con i clienti oltre che rispettare il contratto (la collaborazione diretta offre risultati migliori dei rapporti contrattuali);
- bisogna essere pronti a rispondere ai cambiamenti oltre che aderire alla pianificazione (quindi il team di sviluppo dovrebbe essere pronto, in ogni momento, a modificare le priorità di lavoro nel rispetto dell’obiettivo finale).
In molti processi, non necessariamente di sviluppo software, si stanno affermando le metodologie Agile. Il movimento Agile ha trovato una forte promozione nella metodologia XP, (eXtreme Programming) sulla base della quale è nata Scrum dove si ribadisce che il ciclo di sviluppo è composto da molte iterazioni di breve durata, in particolare con brevi meeting di dieci minuti ogni giorno e sprint produttivi di un mese. I metodi Agile si propongono di sviluppare software che abbia un alto valore per il cliente, rilasciandolo velocemente e a ritmo costante. Il software viene realizzato con un ritmo costante di iterazioni brevi, della durata di una o due settimane. Ogni settimana o due, il team consegna il software che contiene i servizi realizzati fino a quel momento. Il sistema è incompleto, nel senso che non fa tutto quello che deve fare, ma i servizi che ci sono hanno la qualità finale, ovvero sono state implementate al livello di dettaglio e di qualità sufficiente per metterle in produzione. Quindi il cliente può decidere ad ogni ciclo se i servizi consegnati sono sufficienti per andare in produzione e produrre profitti prima di essere completato. Inoltre il cliente può toccare con mano il servizio e può apportare dei cambiamenti. Il team Agile non ha bisogno di ricevere in anticipo tutti i requisiti ma è capace di gestire i cambiamenti sia di funzionalità ancora da sviluppare sia per quelle già implementate.
Cosa succede alle fasi di analisi, progettazione, integrazione e test?
Restano sempre importanti per un team Agile ma invece di eseguire in fasi separate vengono inserite all’interno di ogni iterazione realizzandole quasi in parallelo ottimizzando in questo modo la produttività.
I metodi Agile presuppongono un costo più o meno uguale in qualsiasi fase del processo, per via di un processo diverso rispetto a quello tradizionale, sia dal punto di vista delle pratiche ingegneristiche di scrittura del codice, che dal punto di vista del design, che dal punto di vista della pianificazione e organizzazione del lavoro.
- Il cliente: definisce funzionalità e qualità del prodotto; il team si auto-organizza per realizzare il prodotto, ed è responsabile delle scelte tecniche.
- La pianificazione: di un progetto agile si basa sulla separazione delle funzionalità in user stories, che sono frammenti di funzionalità utilizzabili dall’utente.
- Stime complessità: gli sviluppatori assegnano una stima di complessità a ogni storia.
- Prioritizzare: il cliente sceglie l’ordine in cui le storie devono essere realizzate. In questo modo verranno affrontate per prime le storie che rappresentano per il cliente il valore maggiore.
- Iterazioni e velocità: un’iterazione dura una o due settimane. Gli sviluppatori completano le storie più importanti, secondo la priorità specificata. Alla fine dell’iterazione il cliente può verificare il funzionamento che ha chiesto.
L’organizzazione e l’efficacia del team sono elementi fondamentali per le metodologie del agile e proprio per questo è importante che si investa tempo in questo processo di miglioramento che poi avrà dei notevoli vantaggi nel lungo termine.
Nell’ultimo decennio le metodologie Agile sono andate oltre il vero e proprio processo di sviluppo del software. Di seguito i principi del Manifesto Agile:
La nostra massima priorità è soddisfare il cliente rilasciando software di valore, fin da subito e in maniera continua.
Accogliamo i cambiamenti nei requisiti, anche a stadi avanzati dello sviluppo. I processi agili sfruttano il cambiamento a favore del vantaggio competitivo del cliente.
Consegnamo frequentemente software funzionante, con cadenza variabile da un paio di settimane a un paio di mesi, preferendo i periodi brevi.
Committenti e sviluppatori devono lavorare insieme quotidianamente per tutta la durata del progetto.
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.
Una conversazione faccia a faccia è il modo più efficiente e più efficace per comunicare con il team ed all’interno del team.
Il software funzionante è il principale metro di misura di progresso.
I processi agili promuovono uno sviluppo sostenibile. Gli sponsor, gli sviluppatori e gli utenti dovrebbero essere in grado di mantenere indefinitamente un ritmo costante.
La continua attenzione all’eccellenza tecnica e alla buona progettazione esaltano l’agilità.
La semplicità – l’arte di massimizzare la quantità di lavoro non svolto – è essenziale.
Le architetture, i requisiti e la progettazione migliori emergono da team che si auto-organizzano.
A intervalli regolari il team riflette su come diventare più efficace, dopodiché regola e adatta il proprio comportamento di conseguenza.