Summary
The 12 Factor methodology articulates key design principles for creating robust and maintainable applications. This post summarises the key ideas and adds some insights from my experiences.
As the 12 Factor homepage says about who should care?:
Any developer building applications which run as a service. Ops engineers who deploy or manage such applications.
In this day and age of Cloud and containers, that is practically every developer!
TL;DR; and Overview
- 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