12-Factor App

The twelve-factor app is a methodology for building Software-as-a-Service (aka SaaS). Any developer building applications which run as a service, or an operations engineer who deploys or manages such apps.

These best practices are designed to enable applications to be built with portability and resilience when deployed to the web. These methodologies were first drafted by developers at Heroku, a Platform-as-a-Service (aka PaaS) company, and was first presented by Adam Wiggins in 2011.


Methodologies


    • Codebase
      • There should only be one codebase for a deployed service, which is being used for many deployments.


    • Dependencies
      • All dependencies should be declared, with no implicit reliance on system tools or libraries.


    • Config
      • Configuration that varies between deployments should be stored in the environment.


    • Backing Services
      • All backing services are treated as attached resources and attached and detached by the execution environment.


    • Build, Release, Run
      • The delivery pipeline should strictly separated into build, release, run stages.


    • Processes
      • Applications should be deployed as one or more stateless processes with persisted data stored on a backing service.


    • Port binding
      • Self-contained services should make themselves available to other services by specified ports.


    • Concurrency
      • Concurrency is advocated by scaling individual process models


    • Disposability
      • With fast startup and shutdown are advocated for maximizing service robustness and resilient.


    • Dev/prod parity
      • All environments (i.e. development, staging, and production) are as similar as possible.


    • Logs
      • Applications should produce logs as event streams and leave the execution environment to aggregate.


    • Admin processes
      • Any needed admin tasks should be kept in source control and packaged with the application.

=====

More Information: