L’architettura Agile di un progetto digitale
Sviluppare progetti digitali con metodologia Agile è una prassi efficace, che permette alle aziende di massimizzare i risultati in termini di valore del business, mantenendo elevati livelli organizzativi orientati verso standard qualitativi del prodotto finale, senza tralasciare la produttività.
Se volessimo dare una definizione dell’architettura Agile, la potremmo definire come un insieme di pratiche, principi e linee guida per sviluppare un progetto digitale, attraverso la messa in produzione in tempi brevi e frequenti di tutte le funzionalità, che possano soddisfare velocemente le esigenze dei clienti.
Una pianificazione del lavoro ben progettata e strutturata, permette ai team di sviluppo e alle aziende di realizzare soluzioni di qualità, garantendo tempi di consegna brevi, che migliorano significativamente il valore del business.
Durante il ciclo di produzione di un progetto digitale, il rischio di non riuscire a soddisfare i requisiti funzionali ed operativi richiesti dal cliente, sono molto più alti se si organizza il lavoro con una struttura a cascata. Rispetto ad una struttura organizzativa Agile, focalizzata su brevi cicli operativi, seguiti da testing e feedback, che permettono di superare il rischio dell’overengineering.
Nella metodologia Agile, un aspetto interessante dello sviluppo iterativo del software, sta proprio nella gestione dei potenziali rischi e dei costi di riprogettazione e dei conseguenti ritardi di rilascio delle versioni definitive, evitando che il backtracking possa diventare troppo dispendioso in termini di tempo e denaro.
I principali vantaggi dello sviluppo basato sulle metodologie Agile sono:
- La riduzione dei rischi. Grazie allo sviluppo iterativo, avvalendosi di frequenti cicli di deploy, con maggiori feedback, permettono di ridurre i rischi e costi.
- Migliorare la produttività. Le metodologie agili incentivano i valori aziendali, permettendo di massimizzare la soddisfazione del cliente. Pianificando l’organizzazione dei processi e organizzando i team in modo strutturato, senza incrementare le spese di gestione.
- Migliorare la qualità. Un approccio incentrato sulle persone e sulla collaborazione del team, tramite continui feedback reciproci, incrementa la qualità del progetto.
- Tempi di sviluppo minori caratterizzati da cicli di innovazione più rapidi ed economici. Questa riduzione dei cicli di sviluppo e di deploy permette alle aziende di rispondere rapidamente alle specifiche esigenze dei clienti.
- Maggiore dinamicità aziendale. La capacità di gestire le priorità in funzione dei frequenti cambiamenti nei driver di business, migliora la capacità aziendale nel rispondere rapidamente ai cambiamenti delle condizioni commerciali ed alle dinamiche di mercato.
L’architettura del software
In base alla definizione elaborata nell’IEEE-1471-2000 Standard Association, l’architettura del software è l’organizzazione dei principi che guidano la progettazione e l’evoluzione di un sistema e dei i suoi componenti, delle loro reciproche relazioni e dell’ambiente in cui operano.
L’architettura di un progetto digitale è composta da una serie di decisioni irreversibili per lo sviluppo di una soluzione tecnologica sostenibile, in grado di mantenere lo stato della soluzione ad un costo di gestione ottimale. Si focalizza sul requisito fondamentale di dare forma ad una soluzione che soddisfi rapidamente le esigenze del cliente e superare tutti i rischi tecnici che potrebbero ostacolare lo sviluppo.
Un’architettura a cascata è strutturata su elevato livello di progettazione iniziale. Si rivela essere un anti-pattern per l’architettura Agile, che infatti tende ad evitare le grandi attività di progettazione iniziali in favore della definizione delle linee guida iniziali, utili al coordinamento dei vari team di sviluppo, senza rallentare il flusso operativo.
Nella fase iniziale di definizione gli elementi del design iniziale, ci si trova davanti alla scelta tra più opzioni per una determinata soluzione. Il modello Valore, Costo, Rischio (VRC) permette di ottenere un valore numerico per la progettazione iniziale.
Uno dei principali elementi chiave dello sviluppo di software Agile sta nel pianificare il progetto in un’ottica collaborativa, in cui tutti siano coinvolti continuamente nelle fasi di sviluppo. Costruendo così un unità intellettuale unica, in cui le conoscenze individuali diventano tasselli di quella collettiva. Ogni componente del team, percependo come proprio il progetto, porta le proprie competenze, contribuendo alla creazione di una conoscenza collettiva.
La coesione del team permette la diffusione delle idee e lo scambio della conoscenza, aumentando la qualità del progetto.
Ogni progetto digitale che venga pianificato su un architettura Agile, prevede un processo continuo di adeguamento e di refactoring alle nuove specifiche o richieste del cliente. In cui ogni processo sia progettato secondo logiche di efficienza, che permettano un dialogo ed una collaborazione snella ed efficace tra i componenti del team.
Evitando la stesura di una documentazione troppo dettagliata, che potrebbe sviare il team dal risultato.
Il team lavora e dialoga per individuare e scartare tutti i tasks che non siano di effettivo valore aggiunto al flusso produttivo. Eliminando ogni sorta di specifica o requisito, che non sia immediatamente coerente al contesto attuale del progetto. Infatti uno dei maggiori rischi che può allungare i tempi ed i costi di sviluppo di un progetto, sta in una eccessiva sovra ingegnerizzazione che porta ad un architettura complessa ed antieconomica.
Presuppone pertanto un Project Management snello, che lasci al team quell’autonomia decisionale orientata a cicli decisionali più rapidi e condivisi.
Uno dei vari fattori di rischio, che possono diventare un punto debole del progetto, quando si utilizza un’architettura di sviluppo a cascata, sta nell’effettuare il testing del prodotto nella fase finale. Affidandosi invece a dei cicli frequenti di test, anche tramite il supporto di script di debugging automatizzato, si incrementa la conoscenza del progetto e dei suoi possibili bugs, permettendo un refactoring più rapido e dinamico sulle carenze di progettazione.
Gli upgrade che evolvono dai feedback reciproci tra i team durante la fase di sviluppo, sono un ottimo driver di progettazione in un’ottica in continua evoluzione, che permette di rispondere rapidamente ai cambiamenti.
Un approccio Agile deve essere orientato ad un’architettura di tipo evolutivo, che promuove l’automazione come parte integrante delle fasi di sviluppo. Tramite processi di integrazione continua (Continuous Integration), rilasci continui (Continuous Delivery) e messa in produzione su richiesta. Implementare tecniche di sviluppo modulare, anche grazie a microservizi, permette di suddividere l’architettura del progetto in blocchi più piccoli e modulari, aumentando il livello di scalabilità del progetto.
Frameworks Agile
- Scaled Agile Framework (SAFe) è un framework orientato su un flusso continuo di valori, collaborazione, architettura, design patterns emergenti e semplicità progettuale. L’architettura Agile SAFe si focalizza su un’implementazione basata su DevOps, integrazione e deploy continuo. Il suo modello si basa su quattro principi organizzativi e di flusso di lavoro:
- L’ allineamento;
- La qualità integrata;
- La trasparenza;
- L’esecuzione del programma, si sviluppa attorno al principio di squadra (tipicamente composto da 50-125 persone) denominato Agile Release Trains (ART), che pianifica, sviluppa e distribuisce il lavoro.
- Disciplined Agile (DA) è un kit di strumenti che sfrutta centinaia di pratiche Agile, organizzato su un quadro incentrato in tre fasi: inizio, costruzione e transizione. L’architettura del progetto non è un’attività una tantum, ma si sviluppa per tutto il ciclo di vita del progetto digitale e si evolve attraverso una serie continua di upgrades della modellazione del design.
- Large-Scale Scrum (LeSS), un framework nato come evoluzione dei principi di sviluppo di base dei modelli Scrum, Lean e Agile. Focalizzato su un architettura basata su processi minimi e semplici, con team di sviluppo riorganizzati sulle specifiche esigenze progettuali.