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.