Sviluppo agile: di cosa si tratta?
Lo sviluppo agile di software non è certamente una novità e in molti settori lavorativi i metodi agili sono oramai consolidati. Il concetto non è però ancora chiaro a tutti. A partire da quando si può dire che un'azienda lavora secondo una metodologia agile? Non si tratta piuttosto di un metodo tradizionale falsamente riproposto come concetto alla moda? Vediamo cosa si intende esattamente per sviluppo agile nel presente articolo.
Già negli anni ’90, i team di sviluppatori di software iniziarono a lavorare con metodi che oggi possono essere considerati come sviluppo agile di software. Fino alla fine del XX secolo diversi sviluppatori software e team si presero a cuore l’obiettivo di alleggerire il lavoro di programmazione: il loro metodo divenne noto soprattutto con il termine chiave lightweight. In quello stesso periodo vennero sviluppati anche i metodi Scrum e Kanban, che all’epoca non vennero ancora fatti rientrare sotto il concetto di “sviluppo agile di prodotti”, poiché questa espressione non esisteva ancora.
Nel 2001, finalmente, si verificò una netta rottura: in occasione di un incontro conosciuto oggi con il nome di “Snowbird Meeting” (dal nome del comprensorio sciistico in cui si svolse l’incontro), 17 sviluppatori scrissero il Manifesto per lo sviluppo agile di software, durante il quale unirono tutte le loro esperienze in materia di sviluppo software e di lavoro di squadra, individuarono delle soluzioni, definirono dei principi e fissarono tutto sotto il concetto che oggi è sinonimo di metodologia di lavoro moderno, vale a dire lo sviluppo agile di software.
Che cos’è lo sviluppo agile di software?
Quando si iniziarono a mettere in discussione i metodi di sviluppo di software per poi sperimentare con il Manifesto Agile un nuovo modo di definire il progetto di lavoro, ci si è da subito posti l’obiettivo di lavorare in maniera più flessibile, più creativa e più produttiva. Invece di seguire una procedura pianificata, lineare e burocratica come nei metodi tradizionali (ad esempio il modello a cascata, nello sviluppo agile si decide di suddividere il progetto e di conseguenza di attribuire al team di programmatori molta più responsabilità.
Inoltre, si abbandonano quasi del tutto i grandi progetti: invece di trascorrere mesi o addirittura anni intorno alla realizzazione di un prodotto, i team agili dedicano solo poche settimane a una fase del lavoro. Il risultato è un prodotto finito, un aggiornamento o una parte di un programma che può essere presentato al cliente. Nel Manifesto Agile sono stati concordati dodici principi e quattro valori perché tutto questo si possa effettivamente realizzare.
Lo sviluppo agile di software è per prima cosa un concetto d’insieme. Comprende vari metodi agili, ciascuno dei quali fornisce istruzioni più precise per svolgere un determinato flusso di lavoro.
Valori
I valori dello sviluppo agile di software esprimono gli obiettivi sui quali i team devono rimanere focalizzati durante il lavoro di sviluppo. Sono annotati come coppie in antitesi dove entrambi gli aspetti sono importanti, ma ce n’è sempre uno che è superiore all’altro:
- Individuals and interactions over processes and tools: le persone coinvolte e la loro reciproca collaborazione sono più importanti della richiesta di un determinato processo o strumento.
- Working software over comprehensive documentation: è importante avere un prodotto finale funzionante. La documentazione del lavoro ha un’importanza secondaria.
- Customer collaboration over contract negotiation: lo sviluppo agile di prodotti deve preoccuparsi maggiormente di soddisfare le esigenze del cliente, piuttosto che della negoziazione dei contratti.
- Responding to change over following a plan: si presume che lo sviluppo del software debba adattarsi a continui cambiamenti. Può rivelarsi necessario, dunque, ribaltare un piano fissato in precedenza.
Questi valori vanno considerati un mantra. Non forniscono istruzioni precise, ma ricordano agli sviluppatori gli aspetti da tenere sempre in considerazione nella produzione: lavorare in team, focalizzarsi sul software, dare priorità al cliente, essere flessibili ai cambiamenti. Tutti gli altri aspetti, seppur importanti, vanno subordinati a questi punti.
Principi
I dodici principi del Manifesto Agile sono istruzioni più concrete e forniscono informazioni aggiuntive ed estendono le idee espresse nei valori. Ma anche in questo caso non possiamo parlare di un vero e proprio manuale d’istruzioni, poiché non è questo che si propone di essere il manifesto. I principi sono molto ampi e servono a distinguere metodi agili da metodi non agili.
- Soddisfazione del cliente: grazie a una pubblicazione tempestiva e costante, secondo il concetto di Continuous Delivery il cliente deve sentirsi soddisfatto in ogni momento.
- Flessibilità: i team agili vedono nel cambiamento un aspetto positivo, anche se questo può comportare ritardi al processo di sviluppo. Fare degli adattamenti con il metodo agile a seconda delle esigenze che cambiano consente di offrire al cliente un risultato vantaggioso.
- Consegna: il software funzionante viene consegnato nell’arco di poche settimane o mesi. Un arco di tempo più breve è sempre ben accolto.
- Cooperazione: sviluppatori e colleghi del settore vendite devono lavorare a stretto contatto. Il manifesto agile prevede meeting ogni giorno.
- Supporto: occorre creare un ambiente idoneo affinché gli individui siano motivati e i team creativi possano lavorare bene. Per questo è necessario supportarsi a vicenda e, soprattutto, avere la fiducia da parte dei superiori.
- Cultura del dialogo: la comunicazione diretta è il modo migliore per passarsi informazioni nella maniera più efficace possibile e senza incorrere in malintesi. Parlarsi di persona permette di porsi domande a vicenda e di evitare di trarre conclusioni sbagliate.
- Successi: il successo di un team si misura principalmente con la pubblicazione di software funzionanti.
- Sostenibilità: lo sviluppo deve essere portato avanti in maniera costante. A tal fine tutte le parti coinvolte, e non solo gli sviluppatori, devono continuare a lavorare sulle pubblicazioni.
- Qualità: gli sviluppatori devono sempre fare in modo che i loro prodotti soddisfino gli standard più elevati dal punto di vista tecnico e progettuale.
- Semplicità: il lavoro va semplificato il più possibile. Scartare tutto ciò che risulta superfluo aiuta a snellire il processo e, quindi, a ottenere risultati migliori.
- Organizzazione: se i team hanno la possibilità di organizzarsi autonomamente, si possono ottenere risultati straordinari.
- Retrospettiva: un aspetto importante dello sviluppo agile di software è mettere in discussione in qualsiasi momento aspetti trattati in precedenza. Al fine di migliorare costantemente il lavoro del team, è opportuno che i componenti si scambino regolarmente informazioni sul proprio metodo di lavoro e che adattino, di conseguenza, il proprio approccio.
Il manifesto agile illustra i valori e i principi riferendoli esclusivamente allo sviluppo di software. Questo aspetto è dovuto al raggruppamento degli autori: gli sviluppatori si sono riuniti per creare un metodo di lavoro migliore nell’ambito dello sviluppo di software. Tuttavia i punti fissati sono talmente ampi che possono essere facilmente applicati anche ad altri settori lavorativi. Dallo sviluppo agile di software si arriva a parlare di sviluppo di prodotto agile, dove il termine “prodotto” è nuovamente impreciso. Anche un servizio, infatti, può essere considerato un prodotto.
Tecniche
Nell’ambito dello sviluppo agile di software si sono consolidate alcune pratiche per applicare il metodo agile al proprio team o azienda. “Sviluppo agile” resta soltanto un concetto collettivo. Si possono riscontrare molte di queste tecniche di sviluppo agile di software ad esempio in contesti quali Scrum, Kanban, Extreme Programming, Feature Driven Development, Behaviour Driven Development o Chrystal.
- Backlog: il metodo agile prevede di tenere traccia di tutti i compiti che non vanno ancora eseguiti e che non sono in corso di lavorazione. Questo perché si procede per fasi brevi di lavoro. Invece di occuparsi di più attività nello stesso momento o di assegnare un preciso margine di tempo a ogni attività entro un piano più grande, si dispone di un pool flessibile in background. Da questo elenco il team può scegliere il compito successivo da eseguire.
- Retrospettive: i meeting regolari non sono solo un principio astratto ma, secondo il metodo agile, fanno concretamente parte dell’attività quotidiana. In particolare, Scrum è noto per avere una programmazione fissa per le varie riunioni. Soltanto se il team affronta quotidianamente sfide e problemi, come anche i successi, può migliorarsi nel lungo termine.
- User Story: la richiesta di focalizzarsi sul cliente o sull’utente può essere soddisfatta soltanto rivolgendosi alla sua storia. Qui viene spiegato in maniera semplice come deve essere una funzione per rispondere all’esigenza dell’utente. Questa descrizione viene annotata in una cosiddetta Story Card e tutte queste cartelle vengono organizzate in una Story Map.
- Agile Testing: nello sviluppo agile di software, l’attività di test è considerata parte integrante del processo di sviluppo. Solitamente il prodotto viene testato dal team al termine di un’iterazione (fase di lavoro breve) prima di essere considerato “finito” e rilasciato al cliente. Dopodiché comincia l’iterazione successiva relativa a una nuova funzione.
- Programmazione in coppia: nella programmazione in coppia si applica il principio dei quattro occhi. Due sviluppatori condividono una postazione di lavoro. Mentre uno scrive il codice, l’altro ne verifica l’immissione. Ciò comporta sicuramente un maggior dispendio di tempo (l’esaminatore potrebbe scrivere da solo il codice), ma dovrebbe consentire un minor numero di errori nel codice.
- Timeboxing: alcune forme di sviluppo agile hanno rigidi termini di scadenza. Scrum è, anche in questo caso, un esempio in cui gli sprint hanno una durata ben definita. Al termine di questi, il team deve presentare un prodotto finito. È necessario, quindi, progettare e selezionare le attività in modo opportuno.
Ci sono ancora molte altre tecniche che si possono riscontrare nei metodi agili. Tutte si prefiggono l’obiettivo di rendere più efficace il flusso di lavoro e di aumentare la qualità del prodotto.
Vantaggi e svantaggi dello sviluppo agile
Dai suoi sostenitori l’approccio dello sviluppo agile di software viene promosso come unica possibilità di sviluppare prodotti oggigiorno. Tuttavia non è sempre la soluzione ideale per tutti i team e aziende. A seconda della situazione aziendale, gli svantaggi potrebbero superare i vantaggi.
Vantaggi | Svantaggi |
---|---|
Flessibilità nella gestione di esigenze che cambiano | Una descrizione imprecisa del metodo di sviluppo può portare a modalità di lavoro confuse |
Spazio alla creatività | L’apertura può comportare sfruttamento e sostenere comportamenti improduttivi |
Miglioramento costante dei processi di lavoro | Scadenze difficili da rispettare senza un piano a lungo termine |
Consegne veloci | Necessità di collaboratori con competenze multidisciplinari |
Stretto contatto tra le parti coinvolte, soprattutto con il cliente | Una maggiore comunicazione richiede più tempo |
I progetti già completati non necessitano di modifiche a posteriori | Funziona al meglio se tutto il team lavora nello stesso luogo |