Approfondimenti13/2/2023

DevOps: Come ottimizzare il ciclo di vita del software

Cos'è DevOps? Come introdurlo in azienda? E quali sono i vantaggi?

Attualmente, i team IT all'interno delle aziende avrebbero la necessità di aumentare la velocità e frequenza di rilascio del software, per evolvere rapidamente i loro servizi e prodotti e rimanere competitivi. Tuttavia, questa esigenza spesso viene ostacolata da metodi di lavoro poco produttivi e disorganizzati. Durante il ciclo di vita del software si alternano diversi team nella gestione dei processi: dallo sviluppo, al deployment e fino al monitoraggio.

Molto spesso, però, i vari team operano in una atmosfera tesa, in cui la mancanza di dialogo e collaborazione portano a inefficienze e colli di bottiglia che rallentano l’evoluzione del software. In questo contesto, DevOps assume un ruolo imperativo per il business, ponendo il focus sia sull’automatizzazione dei processi di deployment, sia sulla gestione organizzativa di una infrastruttura IT.

CHE COS'È DEVOPS?

DevOps è un paradigma di sviluppo software che consente di automatizzare e velocizzare la release di un applicativo o una funzionalità, minimizzando la disconnessione tra le attività di sviluppo (Dev) e le attività operative (Ops). Tradizionalmente, il disallineamento tra il team Dev e il team Ops deriva da una differenza di obiettivi, strumenti e cultura. Più precisamente: 

Il team Dev è focalizzato sulle esigenze funzionali del business e sulla velocità e frequenza di rilascio del software. Si occupa quasi esclusivamente degli ambienti di sviluppo e comunica con il team Ops mediante apertura di ticket, rallentando così l’intero processo di sviluppo e deployment. 

Il team Ops, oltre a garantire la disponibilità dei sistemi e delle applicazioni in produzione, ha come priorità la risoluzione di problemi urgenti, ponendo in secondo piano le attività di gestione pianificabile. Spesso, viene coinvolto con ritardo nei progetti e solo nel momento di una release. Sono frequenti i conflitti con i Developers per la scarsa qualità del codice prodotto e l’insufficiente documentazione rilasciata, causando problemi alle applicazioni in produzione. 

In sintesi, il Dev è orientato al cambiamento poiché sviluppa applicazioni di forte portata innovativa. Al contrario, l’IT Operations ricerca la stabilità e l’affidabilità dei sistemi informatici e quindi tende a ridurre al minimo i possibili rischi causati da un cambiamento. Risulta evidente come una separazione organizzativa in silos di questi due team porti a conflitti ed inefficienze che si riversano sull’interno processo end-to-end. 

DevOps è un modello collaborativo che si pone l’obiettivo di abbattere il muro di incomprensioni che separa Dev e Ops, promuovendo la condivisione di pratiche, strumenti e tecnologie per ottimizzare il ciclo di vita del software, dalla sua pianificazione e fino al monitoraggio. 

A supporto di questo cambiamento, diventa importante anche l'introduzione di tools che permettano una maggiore automazione e semplificazione delle attività nella gestione del ciclo di vita del codice, consentendo a sviluppatori e operatori IT di lavorare insieme in modo più efficiente e veloce, riducendo al contempo i rischi di errori e le conseguenti attività di gestione degli incident.

AGILE VS DEVOPS: QUALI SONO LE DIFFERENZE

DevOps non è un framework metodologico unico, ma è un movimento che unifica diverse metodologie preesistenti, e ricomprende al suo interno anche le pratiche Agile.   
DevOps e Agile si differenziano nell’approccio, nella filosofia complessiva e nei gruppi di stakeholder coinvolti

Il metodo Agile risolve le divergenze tra il business e il development grazie a valori, principi e pratiche che facilitano la collaborazione, la chiarezza e la trasparenza nel team e verso il cliente. Il metodo di lavoro permette inoltre di adattare lo scope di progetto alle mutevoli esigenze nel mercato, evitando sprechi di tempo e denaro.

Il DevOps facilita la comunicazione e la collaborazione tra Dev e Ops, ma anche con gli altri attori coinvolti nel ciclo di vita delle applicazioni, con l'obiettivo di rendere il flusso di lavoro sempre più fluido con un processo di miglioramento continuo basato sull'applicazione dei principi del Lean Manufacturing, opportunamente adattati al contesto IT, in modo da creare un processo di sviluppo efficiente ed efficace per rilasciare velocemente un prodotto di valore agli utenti. 

Possiamo quindi considerare il DevOps come un’estensione dell’Agile e, spesso, l’adozione di quest’ultimo rappresenta uno degli stimoli principali per abbracciare DevOps.

DEVOPS PIPELINE

Pipeline DevOps, 7 fasi: plan, code, test, build, deploy, operate, monitor

La DevOps pipeline rappresenta l'insieme dei processi e strumenti automatizzati che Dev e Ops utilizzano per sviluppare, testare e distribuire il codice software in modo più rapido, semplice e sicuro. 

In WebScience, il flusso DevOps si compone di 7 fasi:

  • PLAN: nella prima fase di pianificazione del prodotto utilizziamo tutte le pratiche e tecniche di gestione Agile del progetto. La tecnica di co-design pone al centro le esigenze del cliente e si basa sul principio che le persone che utilizzeranno il prodotto sono le più qualificate per contribuire alla sua progettazione e che il loro coinvolgimento può portare a soluzioni più innovative e soddisfacenti; 

     
  • CODE: nella scrittura del codice applichiamo le best practice di sviluppo del software. Sfruttiamo gli approcci e i principi Cloud Native, come l’uso di microservizi, per creare un’architettura flessibile in grado di seguire l'evoluzione delle esigenze del cliente; 

     
  • TEST: la fase di testing si compone di feedback continui dagli stakeholder e l’automazione dei test. Grazie ai feedback continui, in piena ottica Agile, garantiamo l’adeguatezza del codice man mano che viene sviluppato. Invece, l’automazione dei test ci permette di applicare una moltitudine di test automatici nel software scritto, permettendoci una maggiore garanzia sulla qualità del codice che produciamo da un punto di vista funzionale, di performance e di sicurezza; 

     
  • BUILD, INTEGRATE, RELEASE: In questa fase sono comprese diverse attività, come la compilazione del codice sorgente, il controllo delle dipendenze, la creazione di pacchetti e le eventuali integrazioni delle modifiche al codice con quello principale. Il risultato finale è un artefatto che può essere rilasciato in un ambiente di produzione; 

     
  • DEPLOY: questa fase è fondamentale nel flusso DevOps, in cui, una volta pronto l’applicativo, si procede con la distribuzione del software al cliente; 

     
  • OPERATE: In questa fase, il team DevOps monitora il sistema per assicurarsi che funzioni correttamente e risolvere eventuali problemi o bug che possono emergere. La fase di operate può anche includere la gestione delle configurazioni, il rollback di eventuali modifiche fallite e la risoluzione dei problemi di prestazioni; 

     
  • MONITOR: in ultimo, viene gestito il processo di raccolta e analisi dei dati di funzionamento del sistema, al fine di identificare eventuali problemi o opportunità di miglioramento, utilizzando strumenti di monitoraggio e di alerting. Infine, offriamo servizi di supporto e di assistenza tecnica in modo da garantire continuità anche dopo il termine del progetto per la sua gestione in esericizio.

COME ADOTTARE DEVOPS NELLE AZIENDE

Adottare DevOps nella propria organizzazione significa intraprendere un percorso di cambiamento che si basa su metodi e principi che devono essere necessariamente seguiti per ottenere successo. Le cosiddette “Three Ways” sintetizzano questi principi

  • System thinking: questo approccio permette di avere una visione d’insieme, distribuendo l’effort complessivo per migliorare l’intero sistema e non le performance locali. Il progetto viene visto come un flusso unico, con uno scope end-to-end, che parte dall’ideazione del prodotto fino all’ambiente di produzione. Il team di progetto è multidisciplinare, composto da sviluppatori, sistemisti, product owner, QA e la conoscenza viene distribuita tra il development e l’operations. Questo approccio punta sull’automazione di alcuni processi chiave (per esempio sfruttando l’Infrastructure as Code per automatizzare il processo di configurazione dell’infrastruttura), e sull’allocazione delle forze per l’ottimizzazione dell’intero flusso. 

     
  • Amplify feedback loops: la seconda via punta a raccogliere feedback continui, al fine di anticipare il più possibile la correzione dei problemi nel prodotto che si sta realizzando oppure nel processo di lavoro: secondo l'approccio "shift left", prima si scopre e si interviene su un eventuale difetto (di specifica, di realizzazione, di sicurezza,...) più si riduce il costo delle azioni correttive. Inoltre il feedback permette a tutto il team di migliorare le proprie prestazioni: velocità, frequenza, qualità del software rilasciato, ... 

     
  • Culture of continuous experimentation & learning: quest’ultima fase prevede la proattività a tutti i livelli per cercare di fare evolvere in modo continuativo l’intero processo. Per far ciò, è necessario creare le condizioni per permettere alle persone di sperimentare anche nuove idee, pratiche e strumenti, senza il timore di eventuali insuccessi ma gestendo al contempo adeguatamente il rischio insito nelle sperimentazioni. 

I VANTAGGI DEL DEVOPS

I vantaggi che derivano dall’approccio DevOps sono molteplici, tra cui: 

Produrre e rilasciare software più frequentemente, velocizzando e automatizzando i processi; 
Ridurre l’effort e i rischi associati al rilascio del software in produzione, poiché la collaborazione tra Dev e Ops consente di identificare e risolvere i problemi in modo tempestivo; 
Migliorare il Time to Market grazie alla riduzione dei tempi di consegna del software; 
Migliorare la qualità del codice tramite l'introduzione dei processi di test automatizzati e affidabili; 
Ridurre le perdite derivanti dai problemi in produzione, grazie al coinvolgimento del team Ops già nella fase di sviluppo del software; 
Creare una cultura di comunicazione e collaborazione
Migliorare la produttività, ottimizzando l'intero ciclo di vita del software; 
Migliorare la visibilità dei processi IT: la comunicazione tra i diversi team IT consente di avere una maggiore trasparenza sui processi. 

In sintesi, DevOps permette di migliorare contemporaneamente la velocità, qualità, affidabilità ed efficienza dei servizi di sviluppo e gestione del Sistema Informativo.

Vuoi approfondire il DevOps?

Contattaci per parlare con un nostro esperto!