Almeno una volta nella vita ogni sviluppatore si sarà chiesto: quale metodologia utilizzo per lo sviluppo di software? Una domanda che apre un mondo di possibilità, con le ricerche online che anziché offrirci un valido aiuto rischiano di farci perdere senza fornire una reale risposta.

Twelve-Factor App, la nuova metodologia per lo sviluppo Saas

Presentata per la prima volta da Adam Wiggins nel 2011 all’interno di Heroku, una platform-as-a-service company, la metodologia Twelve-Factor App è stata disegnata da alcuni sviluppatori per dare risposte specifiche ed efficaci a tutti coloro che progettano software come servizi e applicazioni cloud native utilizzando l’architettura tipica dei microservizi.

Da qualche anno infatti il software viene sempre più di frequente fornito come servizio o Software as a Service (SaaS): la metodologia 12-factor app è orientata proprio a questo tipo di applicazioni, con l’obiettivo di ridurre tempi e costi di sviluppo, garantire la piena compatibilità su varie piattaforme e con le versioni precedenti, creare sistemi leggeri e scalabili con un uso ridotto di risorse. Una soluzione particolarmente idonea per lo sviluppo di applicazioni container-based che possono essere Api, crawler/bot, soluzioni IoT, WebApp.

Questo video mostra bene come costruire microservizi con il pattern 12-Factor App:

Ci teniamo a specificare che queste metodologie non vanno prese come imposizioni dall’alto, ma come una serie di best practice per ottenere software robusti e scalabili. Crediamo che per chi lavora nel settore avere una metodologia funzionante e condivisa dalla community sia un ottimo punto di partenza: nel nostro caso, quando sviluppiamo un applicativo o svolgiamo consulenza su applicativi di altri cerchiamo sempre di fare un paragone andando a individuare fra i 12 punti cosa si discosta così da valutarne rischi o punti critici.

Metodologia 12-factor per lo sviluppo di applicazioni: linee guida e nostre osservazioni

Sulla pagina ufficiale di Twelwe-Factor App è riportato l’elenco dei 12 fattori, un insieme di regole e linee guida per lo sviluppo di software Saas:

I. Codebase
Una sola codebase sotto controllo di versione, tanti deployment

II. Dipendenze
Dipendenze dichiarate e isolate

III. Configurazione
Memorizza le informazioni di configurazione nell’ambiente

IV. Backing Service
Tratta i backing service come “risorse”

V. Build, release, esecuzione
Separare in modo netto lo stadio di build dall’esecuzione

VI. Processi
Esegui l’applicazione come uno o più processi stateless

VII. Binding delle Porte
Esporta i servizi tramite binding delle porte

VIII. Concorrenza
Scalare attraverso il process model

IX. Rilasciabilità
Massimizzare la robustezza con avvii veloci e chiusure non brusche

X. Parità tra Sviluppo e Produzione
Mantieni lo sviluppo, staging e produzione simili il più possibile

XI. Log
Tratta i log come stream di eventi

XII. Processi di Amministrazione
Esegui i task di amministrazione/management come processi una tantum

Partendo da questi punti desideriamo offrire il nostro parere e le sensazioni finora vissute, sulla base delle esperienze acquisite nei nostri processi di sviluppo.

I primi 4 punti sono molto focalizzati sul versionamento del codice e sulle sue dipendenze e configurazioni. Nel punto 3 la metodologia indica “La configurazione di un’applicazione è tutto quello che può variare da un deployment all’altro”: non è così anomalo trovare sorgenti di software con all’interno le configurazioni che ne determinano il comportamento. Una separazione ben definita ci permette d’installare il nostro applicativo in quanti ambienti vogliamo, svolgere tutti i test ed infine pubblicare le modifiche in produzione senza dover toccare il codice: l’applicativo rimane sempre lo stesso, è l’ambiente in cui viene calato che condivide con esso le configurazioni.

Sviluppo software con metodologia 12-Factor App

Legato al precedente arriva il punto 4 sui backing service, ossia tutti i servizi esterni, locali o remoti, alla nostra applicazione che vengono usati per connettersi a un database, inviare mail, condividere contenuti social… Il fatto di trattare tutte queste risorse senza distinzione tra locali o meno ci permette di essere molto più agili nel collegarle o scollegarle durante il deployment.

I punti 4, 5 e 6 credo siano tra i nostri preferiti, poiché offrono il giusto indirizzo per creare app scalabili, robuste e integrate con altre. Anche qui torna il concetto di “Pets VS Cattle” visto nel precedente articolo: le nostre app sono appositamente progettare per essere “date in pasto” al cloud e per saper gestire i carichi di lavoro in modo dinamico, con istanze che possono partire, fermarsi o fallire senza che sia necessario il nostro intervento. Per chi volesse farsi un’idea di tutte le potenzialità del settore consigliamo di approfondire le tecnologie legate ai containers o il mondo serverless (possibile fonte: Container by Google)

 

Per ulteriori approfondimenti tecnici clicca qui. Se hai bisogno di un aiuto per lo sviluppo software con metodologia 12-Factor App contattaci.