Sviluppo Agile, come accelerare il rilascio continuo di applicazioni

Le aziende tentano di costruire un ecosistema di valore intorno a prodotti “connessi”; di pari passo, la digital transformation sta gettando le fondamenta di una nuova generazione di software: le Application Programming Interface (API) necessarie per prosperare in questo ambiente collaborativo. Allo stesso tempo, le aspettative dei clienti per servizi originali e di qualità elevata impongono ai reparti IT di ripensare il modo in cui sviluppano, sottopongono a test e distribuiscono il software. Una risposta arriva dallo sviluppo Agile Parallel

Pubblicato il 10 Feb 2016

La forte pressione competitiva sta spingendo ormai quasi tutte le aziende a rivedere le proprie strategie di business guardando alla digital transformation quale motore primario di innovazione, in particolare, nella maggior parte dei casi, adottando approcci attraverso i quali ‘aggiungere’ a prodotti e servizi esistenti componenti digitali (ad esempio applicazioni mobile, supporto multicanale, Internet of Things e così via). In altre parole, le aziende stanno tentando di costruire un nuovo ‘ecosistema di valore’ intorno a prodotti connessi e servizi digitali che hanno nel software il vero potenziale di rivoluzione dei business model aziendali.

La digital transformation, di fatto, non solo ha accelerato la cosiddetta App Economy governata in primis dalle esigenze e dalle aspettative dell’utente, ma sta diventando il pilastro portante di una nuova generazione di software, quello delle Api – Application Programming Interface necessario ad abilitare questo nuovo ‘ecosistema di valore’ permeato da ambienti integrati, connessi e collaborativi.

Opportunità per il business = pressione per l’It

L'ubiquità di Internet, la consumerizzazione dell'It e la diffusione massiccia dei device mobili e dei social media sono solo alcuni dei fattori che hanno contribuito ad aumentare le aspettative degli utenti verso servizi digitali innovativi. Secondo i dati forniti da Google, il 90% delle persone utilizza più device in modo sequenziale (computer, tablet, telefoni cellulari ecc.) per navigare in Internet, effettuare acquisti online, gestire le proprie risorse finanziarie, organizzare viaggi e portare a termine diverse altre attività quotidiane, comprese quelle professionali [report “The New Multi-Screen World: Understanding Cross-Platform Consumer Behavior” – ndr].

Molte aziende sono state spinte verso percorsi di digital transformation proprio per garantire una ‘eccellente’ user experience tra i diversi device, così come si aspettano gli utenti (intraprendendo percorsi che hanno poi altre finalità e potenzialità di business come la migliore acquisizione e fidelizzazione dei clienti e, sostanzialmente, maggiori ricavi e produttività).

Il rovescio della medaglia è che tutto questo pone non poche pressioni sui Dipartimenti It, in particolare rispetto ad alcuni importanti tasselli:

  1. accelerazione delle tempistiche: il reparto It deve trovare soluzioni per velocizzare il rilascio delle applicazioni e dei servizi (deve rivedere l’intero ciclo di sviluppo, dalla progettazione alla delivery);
  2. coerenza delle performance: le applicazioni devono ‘funzionare’ sempre ai massimi livelli, a prescindere dal dispositivo o dall'ambiente operativo in uso, il che aggiunge complessità alle attività di codifica e testing;
  3. integrazione di API: nell’odierno mondo iper-connesso nessuna applicazione è ormai ‘fine a se stessa’ ma deve essere sufficientemente ‘aperta’ e flessibile per potersi integrare con sistemi di terze parti (elemento cardine per una vera evoluzione sia del front-end sia del back-end, quest’ultimo sempre più in evoluzione verso modelli di hybrid It);
  4. collaboration: poiché gli utenti si aspettano continui miglioramenti delle applicazioni, i team It devono rivedere i propri metodi operativi per riuscire a raccogliere i feedback degli utenti (siano essi clienti interni od esterni) nonché, come anticipato, per rilasciare velocemente gli aggiornamenti durante la fase di produzione (Agile e DevOps sono i frameworks metodologici di riferimento);
  5. supporto dei sistemi legacy: la maggior parte degli ambienti It è caratterizzata da strati tecnologici eterogenei e da una commistione di sistemi legacy e tecnologie più moderne; non è pensabile ‘buttare tutto’ e ripartire da zero; la sfida principale per i team It è trovare il modo di utilizzare i sistemi legacy per supportare user experience che al momento della nascita di quei sistemi ancora in uso erano addirittura inimmaginabili.

Metodologia agile, Continuous Deployment

Per affrontare tali sfide in modo efficace, una delle vie da seguire è adottare un approccio a livello di sviluppo software più ‘trasformativo’ attraverso cui favorire il continuous development e l'application delivery, elementi che, secondo molti analisti, consentono di focalizzare l'attenzione su innovazione, velocità e qualità, requisiti indispensabili per poter ‘emergere in un mercato affollato’.

Il Continuous Deployment, per esempio, è oggi visto come componente chiave delle strategie di digital transformation; secondo quanto riportato nell’eBook “Perché il Continuous Deployment è fondamentale per la strategia di Digital Transformation” [realizzato da Ca Technologies – ndr]* il Continuous Deployment può essere definito “come un insieme di pratiche e principi attraverso cui ridurre i costi, le tempistiche e il rischio insito nelle modifiche incrementali fornite agli utenti”.

Di fatto, si tratta di un insieme di metodologie e tecnologie orientate all'automazione delle procedure di delivery e alla riduzione della complessità spesso derivante dai vari passaggi che avvengono tra le richieste di nuove applicazioni o nuove funzionalità e il percorso di sviluppo/rilascio.

In particolare, l’approccio consente di accelerare le tempistiche di sviluppo, migliorare la qualità delle applicazioni e ridurre i costi di sviluppo/testing attraverso alcuni importanti step procedurali:

  1. pianificazione e orchestrazione dell'intero processo di release;
  2. automazione della distribuzione delle risorse (dallo sviluppo al testing passando per la compilazione delle richieste, il provisioning, la configurazione e la distribuzione delle risorse): l’obiettivo è eseguire il provisioning, configurare e distribuire automaticamente l'applicazione, i dati e le risorse operative appropriate a seconda dei casi;
  3. automazione dei processi lungo tutto il ciclo di sviluppo, comprese le complesse modifiche necessarie per le attività di provisioning, distribuzione e trasferimento di codice tra ambienti di sviluppo, testing e produzione.

La risposta: Agile Parallel Development

Una via seguita da molti sviluppatori per far fronte alle esigenze di Continuous Deployment è lo sviluppo manuale di cosiddetti ‘mock & stub’ personalizzati: quando si ha la necessità di accedere a un sistema o un API non disponibile, lo sviluppatore aggira il problema creando qualche riga di codice che simula il comportamento della risorsa non disponibile per riuscire ad ottenere in tempi rapidi le risposte necessarie per passare alla fase successiva di sviluppo o test.

Pur riuscendo a gestire vincoli specifici, è evidente la rischiosità di un simile approccio, non solo perché richiede comunque del tempo aggiuntivo agli sviluppatori ma perché trattandosi di risorse create ‘ad hoc’ dai team per attività specifiche di sviluppo e test, sono destinate ad essere poi eliminate (è quindi necessario un tracciamento dettagliato delle procedure per assicurarsi che righe di codice inutile siano poi realmente eliminate e non rimangano invece nascoste tra un passaggio e l’altro con possibili ripercussioni su qualità, sicurezza e performance).

Secondo alcune recenti analisi di Gartner, entro il 2016 più della metà della collaborazione B2B avverrà mediante API web [report “Gartner Hype Cycle for Application Development, Thomas E. Murphy – ndr], compresa la collaboration DevOps.

L’approccio all’automazione e orchestrazione (preceduto da una fase di pianificazione) del ciclo di sviluppo è una delle risposte primarie ma, accanto al Continuous Deployment, l’Agile Parallel Development diventa il vero elemento di accelerazione perché consente ai team di lavorare realmente secondo le pratiche Agile: “l'obiettivo originale di Agile era suddividere in porzioni più piccole le pratiche di sviluppo lente e monolitiche del passato, in modo che sviluppatori, tester e addetti allo sviluppo del business potessero lavorare contemporaneamente e accelerare il time to market delle nuove funzionalità. Nonostante le buone intenzioni, tuttavia, molti gruppi It non riescono a portare le applicazioni in produzione con la velocità e la qualità che vorrebbero, e questo a causa di alcuni fattori ricorrenti”, si legge nell’Agile Parallel Development eBook realizzato da Ca Technologies*.

A volte, pur seguendo le procedure definite dalla metodologia Agile, le attività di testing vengono rimandate a fine processo con alcune inevitabili conseguenze: spostamento di eventuali colli di bottiglia, individuazione di bug e difetti in un momento in cui sono più difficili da individuare e più costosi da correggere, rischio di dover ‘tornare indietro’ e rivedere alcune fasi di sviluppo con ritardo sui tempi di delivery.

Come accennato, la risposta arriva dal cosiddetto Agile Parallel Development, un insieme di pratiche metodologiche che può essere riassunto in tre fasi:

  1. eliminazione dei vincoli: rimuovere i vincoli di tempo, dati, disponibilità e costi mediante la simulazione di sistemi dipendenti e comportamenti dei clienti (rendendoli disponibili sotto forma di servizi virtuali), ovunque e ogni volta che sia necessario. In questo caso, si riduce la complessità degli ambienti e dei cicli di sviluppo rendendo disponibili le risorse quando e dove necessario e visibili gli effetti del ‘codice’ (del comportamento dell’applicazione in ogni fase del ciclo di sviluppo);
  2. automazione dei test (spostando a sinistra il processo): sfruttare risorse, servizi e attività virtuali anche per automatizzare i test in qualsiasi fase dello sviluppo per migliorare la qualità e la stabilità delle applicazioni prima che vengano rilasciate in produzione;
  3. sviluppo in parallelo: è il risultato delle prime due fasi, simulando i sistemi, i servizi e le attività di test necessari in base alle esigenze, e automatizzando il testing è possibile aumentare notevolmente la produttività degli sviluppatori e mettere i team in condizione di lavorare in parallelo.

*Scarica i white paper di approfondimento:

– eBook “Perché il Continuous Deployment è fondamentale per la vostra strategia di digital transformation

– eBook Perché Agile Parallel Development è fondamentale per la vostra strategia di digital transformation

Per maggiori informazioni: Devops e agile nello sviluppo software

Valuta la qualità di questo articolo

La tua opinione è importante per noi!

Articoli correlati

Articolo 1 di 3