# 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](https://12factor.net).