The Twelve-Factor App
The twelve-factor app is a methodology for building software-as-a-service appsI 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:
- Codebase One codebase tracked in revision control, many deploys
- Dependencies Explicitly declare and isolate dependencies
- Config Store config in the environment
- Backing services Treat backing services as attached resources
- Build, release, run Strictly separate build and run stages
- Processes Execute the app as one or more stateless processes
- Port binding Export services via port binding
- Concurrency Scale out via the process model
- Disposability Maximize robustness with fast startup and graceful shutdown
- Dev/prod parity Keep development, staging, and production as similar as possible
- Logs Treat logs as event streams
- Admin processes Run admin/management tasks as one-off processes