Frameworks ensure a methodical approach to any task, they help drive stability in an already chaotic world. In software development, we need creativity, but we also need control. I am often reminded of the statement a senior made when I was fresh out of college at a new job, that is that Software development is both an art and a science.

The twelve-factor app, a methodology for building software-as-a-service. The following are goals which this framework addresses:

  • declarative formats for setup automation
  • minimize time and cost of on/off-boarding developers
  • maximum portability between execution environments;
  • suitable for modern cloud platforms
  • Minimize divergence between development and production
  • continuous deployment for maximum agility;
  • can scale up without significant changes to tooling, architecture, or development practices.

Anyone that touches code and works in the cloud should be aware of these (12 Factor App ) principles and use it to guide their endeavors.

The Twelve Factors

I. Codebase

One codebase tracked in revision control, many deploys

II. Dependencies

Explicitly declare and isolate dependencies

III. Config

Store config in the environment

IV. Backing services

Treat backing services as attached resources

V. Build, release, run

Strictly separate build and run stages

VI. Processes

Execute the app as one or more stateless processes

VII. Port binding

Export services via port binding

VIII. Concurrency

Scale out via the process model

IX. Disposability

Maximize robustness with fast startup and graceful shutdown

X. Dev/prod parity

Keep development, staging, and production as similar as possible

XI. Logs

Treat logs as event streams

XII. Admin processes

Run admin/management tasks as one-off processes