kennethreitz.org / Talks / 12 Factor
The 12 Factor App
This talk recaps the 12 Factor App methodology, which is a set of best practices for building scalable, maintainable, and portable web applications.
Introduction
- The Twelve-Factor App is a methodology for building software-as-a-service (SaaS) applications that ensures consistency, scalability, and ease of deployment across different environments.
I. Codebase
- Single Codebase:
- One codebase tracked in version control, deployed in multiple environments.
- If multiple codebases exist, the system is considered distributed rather than a single app.
II. Dependencies
- Explicit Declaration:
- Dependencies must be explicitly declared and isolated.
- The app should not rely on system-wide packages or tools, ensuring portability and consistency.
III. Config
- Environment-Based Configuration:
- Configuration, including database and service handles, should be stored in the environment, making it easy to manage different deployment environments.
IV. Backing Services
- Treat as Attached Resources:
- There should be no distinction between local and third-party services; all are treated as attached resources.
V. Build, Release, Run
- Separation of Stages:
- The build, release, and run stages should be strictly separated to allow for rollbacks and better release management.
VI. Processes
- Stateless Processes:
- The app runs as one or more stateless processes, with each process type handling different workloads.
VII. Port Binding
- Export Services via Port Binding:
- The app should expose services by binding to a port and listening for requests, enabling seamless integration with web servers.
VIII. Concurrency
- Scale via Process Model:
- Scale the app by assigning workloads to different process types, managed by the operating system’s process manager.
IX. Disposability
- Fast Startup and Graceful Shutdown:
- The app should be disposable, capable of starting or stopping on short notice to ensure robustness.
X. Dev/Prod Parity
- Maintain Similar Environments:
- Development, staging, and production environments should be kept as similar as possible to minimize gaps in time, personnel, and tools.
XI. Logs
- Treat Logs as Event Streams:
- Logs should be treated as continuous event streams, with no concern for their routing or storage by the app itself.
XII. Admin Processes
- Run as One-Off Processes:
- Administrative tasks should be run as one-off processes in the same environment as the app, using the same code and configuration.
For more details, visit 12factor.net.