Dall’Agile al DevOps, pensando ai microservizi
La maggior parte delle aziende software si stanno muovendo verso processi di gestione Agile, andando verso l’automazione dei processi di test e rilascio software e pensando ad una modularizzazione estrema con l’utilizzo dei microservizi.
Agile e devops
Le metodologie Agile e DevOps sono molto legate tra loro, senza adottare un processo di gestione agile, non è possibile fare DevOps.
La metodologia DevOps è molto legata al concetto di rimozione dei silos nelle varie fasi di realizzazione del software.
In particolare l’abbattimento delle barriere tra gli sviluppatori , i tester, fino ad arrivare alle persone addette al rilascio ed installazione.
Si deduce subito che per abbattere queste barriere si devono avere team che sono responsabili di tutta la filiera: dalla raccolta del requisito fino allo sviluppo, al test ed al rilascio ed installazione.
Sebbene la metodologia DevOps fa molta leva sull’automazione dei test e dell’installazione, sono sempre necessarie persone che si occupano dell’automazione dei test e della modifica e miglioramento dei processi di rilascio ed installazione.
Come l’agile ci viene incontro
Fortunatamente le metodologie Agile, in particolare Scrum e SAFe (per progetti di grandi dimensioni) vengono incontro a queste necessità.
Scrum in particolare, prescrive di avere team autoconsistenti che sono in grado di gestire un requisito dall’inizio alla fine.
Il Product Owner si occupa della gestione dell’iniziativa di business, prendendo in carico il requisito e dividendolo in Capabilities, Features e User Stories.
Il Product Owner successivamente condividerà e stimerà le User Stories insieme allo Scrum team.
Lo Scrum Master insieme al team si occuperà della suddivisione delle User Stories in task che il team prenderà in carico.
Durante la divisione delle User Stories in task, lo Scrum Master con il team stimerà il tempo necessario al completamento di ogni task.
Lo Scrum team è formato dal Product Owner, lo Scrum Master ed i membri del team che includono sia gli sviluppatori che i tester.
In questo modo il team è capace di portare a termine la realizzazione dell’iniziativa di business, dalla raccolta del requisito fino al rilascio ed installazione.
I framework creati per il DevOps ci vengono incontro, permettendo di automatizzare il più possibile i processi di build, test e rilascio.
I Microservizi
Per essere in grado di gestire correttamente tutto il processo è necessario che la software base sia stata realizzata in maniera modulare e che sia stata documentata correttamente.
Dividere l’architettura software in moduli funzionali e creare un feature model, è un buon modo per documentare il software.
I moduli funzionali non necessariamente corrispondono ai microservizi, una buona architettura a microservizi è figlia di una buona architettura modulare.
La modularizzazione estrema dei microservizi comporta problemi di gestione del software che se non indirizzati correttamente ci cadranno addosso mettendo a rischio tutta la piattaforma software.
Essere pronti per la migrazione verso un’architettura a microservizi significa avere pronta l’infrastruttura per i test automatici, build e release automatiche.
Si deve tenere conto che con la proliferazione di moduli software indipendenti alcune operazioni che era possibile gestire in maniera manuale (test, build e rilascio) dovranno essere per forza automatizzate.
Molte volte il ricorso ad un’architettura a microservizi è considerata la soluzione a tutti i problemi esistenti, in realtà è l’ultima cosa da provare dopo aver: correttamente modularizzato il software in domini funzionali e provato a far girare più instanze del software corrente in load balancing per cercare di risolvere problemi prestazionali.
Considerazioni finali
Agile, DevOps e Microservizi sono tutti concetti molto in voga e metodologie gestionali e architetturali molto valide, si deve solo fare attenzione a non cercare di adottarle solo perchè vanno di moda ma di averne una buona comprensione e valutare i benefici reali per la propria organizzazione.