De Twelve-Factor App

  • Declaratieve formaten gebruiken voor setup-automatisering, om de tijd en kosten voor nieuwe ontwikkelaars die aan het project deelnemen te minimaliseren;
  • Een schoon contract hebben met het onderliggende besturingssysteem, waardoor maximale portabiliteit tussen uitvoeringsomgevingen wordt geboden;
  • Geschikt zijn voor implementatie op moderne cloudplatforms, waardoor de noodzaak voor servers en systeembeheer vervalt;
  • Divergentie tussen ontwikkeling en productie minimaliseren, wat continue implementatie (continuous deployment) voor maximale wendbaarheid mogelijk maakt;
  • En kunnen schalen zonder significante wijzigingen in tooling, architectuur of ontwikkelingspraktijken.

De twelve-factor-methodologie kan worden toegepast op apps geschreven in elke programmeertaal en die elke combinatie van backing services gebruiken (zoals databases, wachtrijen, memory caches, etc.).

Achtergrond

De bijdragers aan dit document zijn direct betrokken geweest bij de ontwikkeling en implementatie van honderden apps, en hebben indirect de ontwikkeling, exploitatie en schaling van honderdduizenden apps gezien via hun werk aan het Heroku-platform.

Dit document synthetiseert al deze ervaringen en observaties over een breed scala aan software-as-a-service-apps in de praktijk. Het is een triangulatie van ideale praktijken voor app-ontwikkeling, waarbij bijzondere aandacht wordt besteed aan:

  • De dynamiek van de organische groei van een app in de loop van de tijd;
  • De dynamiek van samenwerking tussen ontwikkelaars die aan de codebase van de app werken;
  • Het vermijden van de kosten van software-erosie.

De motivatie is om het bewustzijn te vergroten van enkele systemische problemen in moderne applicatieontwikkeling, om een gemeenschappelijke woordenschat te bieden voor het bespreken van deze problemen, en om een set brede conceptuele oplossingen met bijbehorende terminologie aan te bieden. Het formaat is geïnspireerd op de boeken Patterns of Enterprise Application Architecture en Refactoring van Martin Fowler.

Voor wie is dit document bedoeld?

Dit document is bedoeld voor:

  • Elke ontwikkelaar die applicaties bouwt die als een service draaien.
  • Ops-engineers die dergelijke applicaties implementeren of beheren.

De Twaalf Factoren

I. Codebase: Eén codebase gevolgd in versiebeheer, meerdere implementaties. II. Afhankelijkheden: Declareer en isoleer afhankelijkheden expliciet. III. Configuratie: Bewaar configuratie in de omgeving. IV. Backing services: Behandel backing services als gekoppelde resources. V. Build, release, run: Scheid de build- en run-fasen strikt. VI. Processen: Voer de app uit als één of meer stateless processen. VII. Portbinding: Exporteer services via portbinding. VIII. Gelijktijdigheid: Schaal uit via het procesmodel. IX. Wegwerpbare aard: Maximaliseer robuustheid met een snelle opstart en een nette afsluiting. X. Dev/prod-pariteit: Houd ontwikkeling, staging en productie zo gelijk mogelijk. XI. Logs: Behandel logs als event-streams. XII. Beheerprocessen: Voer admin/managementtaken uit als eenmalige processen.