The Twelve-Factor App

April 17, 2021

I was recently reminded of the concept of the Twelve-Factor App. As a methodology, I’ve read about it many times, and most of the concepts are by now second nature to me when I’m designing software and larger systems with a software-as-a-service model. If you’re not already familiar, I suggest you read the full description. In summary the twelve factors are:

  1. Codebase One codebase tracked in revision control, many deploys
  2. Dependencies Explicitly declare and isolate dependencies
  3. Config Store config in the environment
  4. Backing services Treat backing services as attached resources
  5. Build, release, run Strictly separate build and run stages
  6. Processes Execute the app as one or more stateless processes
  7. Port binding Export services via port binding
  8. Concurrency Scale out via the process model
  9. Disposability Maximize robustness with fast startup and graceful shutdown
  10. Dev/prod parity Keep development, staging, and production as similar as possible
  11. Logs Treat logs as event streams
  12. Admin processes Run admin/management tasks as one-off processes

Related Content

Taylorism is dead. Long live Taylorism!

Taylorism has gotten a lot of flack for being inhumane at worst, and ineffective at best. But DevOps is about applying Taylorism to computer systems.

Should we use microservices?

How should you decide when to use a microservices architecture or a monolithic architecture?

What is the goal of operations?

"It's not operation's job to keep the site stable and fast. Operation's job is to enable the business."