Introduzione
Nell’era moderna, il software viene fornito sempre più di frequente come servizio (delivered as a service): si parla di web app o software as a service (SaaS). La twelve-factor app è una metodologia di sviluppo orientata alla costruzione di applicazioni software-as-a-service che:
- Seguono un formato dichiarativo per l’automazione della configurazione, minimizzando tempi e costi di ingresso per ogni sviluppatore che si aggiunge al progetto;
- Si interfacciano in modo pulito con il sistema operativo sottostante, in modo tale da offrire la massima portabilità sui vari ambienti di esecuzione;
- Sono adatte allo sviluppo sulle più recenti cloud platform, ovviando alla necessità di server e amministrazioni di sistema;
- Minimizzano la divergenza tra sviluppo e produzione, permettendo il continuous deployment per una massima “agilità”;
- Possono scalare significativamente senza troppi cambiamenti ai tool, all’architettura e al processo di sviluppo;
La metodologia twelve-factor può essere applicata a ogni software, scritto in qualsiasi linguaggio di programmazione, che fa uso di una serie di servizi come database, code, cache e così via.
Background
Chi ha scritto questo documento è stato coinvolto direttamente nella realizzazione e nel deployment di centinaia di applicazioni, e ha indirettamente assistito allo sviluppo, le operazioni e lo scaling di centinaia (o migliaia) di app tramite il proprio lavoro sulla piattaforma Heroku.
Questo documento riassume tutta quella che è stata la nostra esperienza, basata sull’osservazione di un grande numero di applicazioni SaaS. Si tratta di una “triangolazione” di pratiche di sviluppo ideali (con una particolare attenzione alla crescita organica dell’app nel tempo), la collaborazione dinamica nel corso del tempo tra gli sviluppatori sulla codebase e la necessità di evitare i costi di software erosion.
La nostra motivazione è di far crescere la consapevolezza intorno ad alcuni problemi sistemici che abbiamo scoperto nello sviluppo di applicazioni moderne, cercando di fornire un vocabolario condiviso per la discussione di tali problemi. Oltre, ovviamente, a offrire delle soluzioni concettuali a queste situazioni (senza però tralasciare il fattore tecnologia). Questo format si rifà ai libri di Martin Fowler Patterns of Enterprise Application Architecture e Refactoring.