Community Cloud-Native Applications Best Practices
Comprehensive methodology for building modern software-as-a-service applications that are portable, scalable, and maintainable. Contains 51 rules across 12 categories, covering the entire application lifecycle from codebase management to production operations.
When to Apply
Reference these guidelines when:
Designing new backend services or APIs
Containerizing applications for Kubernetes or Docker
Setting up CI/CD pipelines
Managing configuration across environments
Implementing logging and monitoring
Planning application scaling strategy
Debugging deployment or environment issues
Rule Categories by Priority
Priority
Category
Impact
Prefix
1
Codebase & Version Control
CRITICAL
code-
2
Dependencies
CRITICAL
dep-
3
Configuration
CRITICAL
config-
4
Backing Services
HIGH
svc-
5
Build, Release, Run
HIGH
build-
6
Processes & State
HIGH
proc-
7
Concurrency & Scaling
HIGH
scale-
8
Disposability
HIGH
disp-
9
Port Binding
MEDIUM
port-
10
Dev/Prod Parity
MEDIUM
parity-
11
Logging
MEDIUM
log-
12
Admin Processes
MEDIUM
admin-
Quick Reference
1. Codebase & Version Control (CRITICAL)
code-single-codebase - Maintain one codebase per application in version control
code-one-app-one-repo - Enforce one-to-one correlation between codebase and application
code-deploys-not-branches - Use deploys not branches to represent environments
code-shared-as-libraries - Factor shared code into libraries managed by dependency manager
2. Dependencies (CRITICAL)
dep-explicit-declaration - Declare all dependencies explicitly in a manifest file
dep-isolate-execution - Isolate dependencies to prevent system package leakage
dep-no-system-tools - Never rely on implicit system tools being available
dep-deterministic-builds - Use lockfiles for deterministic dependency resolution
3. Configuration (CRITICAL)
config-separate-from-code - Strictly separate configuration from code
config-use-env-vars - Store configuration in environment variables
config-no-env-groups - Treat environment variables as granular controls not grouped environments
config-validate-on-startup - Validate required configuration at application startup
config-never-commit-secrets - Never commit secrets or credentials to version control
4. Backing Services (HIGH)
svc-as-attached-resources - Treat backing services as attached resources
svc-connection-strings - Reference all backing services via connection URLs in config
svc-no-local-vs-remote - Make no distinction between local and third-party services
svc-detach-attach-without-code - Design services to be detachable and attachable without code changes
5. Build, Release, Run (HIGH)
build-separate-stages - Strictly separate build, release, and run stages
build-immutable-releases - Create immutable releases with unique identifiers
build-no-runtime-changes - Never modify code at runtime - changes require new release
build-complexity-in-build - Push complexity into build stage keep run stage minimal
build-artifact-per-commit - Generate one build artifact per commit deploy same artifact everywhere
6. Processes & State (HIGH)
proc-stateless-processes - Execute the application as stateless processes
proc-no-sticky-sessions - Never use sticky sessions - store session data in backing services
proc-no-local-filesystem - Never assume local filesystem persists between requests
proc-compile-at-build - Perform asset compilation and bundling at build time not runtime
proc-share-nothing - Design processes to share nothing with each other
7. Concurrency & Scaling (HIGH)
scale-process-model - Scale out via the process model with multiple process types
scale-process-types - Assign workloads to appropriate process types
scale-no-daemonize - Never daemonize or write PID files let process manager handle it
scale-horizontal-not-vertical - Design for horizontal scaling over vertical scaling
scale-process-formation - Define process formation as declarative configuration
8. Disposability (HIGH)
disp-disposable-processes - Design processes to be disposable started or stopped at any moment
disp-fast-startup - Minimize startup time to enable rapid scaling and recovery
disp-graceful-shutdown - Implement graceful shutdown on SIGTERM
disp-crash-only - Design for crash-only software that recovers from sudden death
disp-idempotent-operations - Make operations idempotent to safely retry after failures
9. Port Binding (MEDIUM)
port-self-contained - Make the application completely self-contained with embedded server
port-export-via-binding - Export services via port binding using PORT environment variable
port-any-protocol - Use port binding to export any protocol not just HTTP
10. Dev/Prod Parity (MEDIUM)
parity-minimize-gaps - Minimize gaps between development and production environments
parity-same-backing-services - Use the same type and version of backing services in all environments
parity-deploy-frequently - Deploy frequently to minimize the time gap
parity-developers-deploy - Involve developers in deployment to minimize personnel gap
11. Logging (MEDIUM)
log-event-streams - Treat logs as event streams not files
log-no-routing - Never route or store logs from within the application
log-structured-format - Use structured logging for machine-readable event streams
log-unbuffered-stdout - Write logs unbuffered to stdout for real-time streaming
12. Admin Processes (MEDIUM)
admin-one-off-processes - Run admin tasks as one-off processes not special scripts
admin-same-environment - Run admin processes against a release with same codebase and config
admin-repl-access - Provide REPL access for debugging and data inspection
How to Use
Read individual reference files for detailed explanations and code examples:
Section definitions - Category structure and impact levels
Rule template - Template for adding new rules
Reference Files
File
Description
references/_sections.md
Category definitions and ordering
assets/templates/_template.md
Template for new rules
metadata.json
Version and reference information
1---2name: 12-factor-app3description: Community Cloud-Native Applications Best Practices4---5# Community Cloud-Native Applications Best Practices67Comprehensive methodology for building modern software-as-a-service applications that are portable, scalable, and maintainable. Contains 51 rules across 12 categories, covering the entire application lifecycle from codebase management to production operations.89## When to Apply1011Reference these guidelines when:12- Designing new backend services or APIs13- Containerizing applications for Kubernetes or Docker14- Setting up CI/CD pipelines15- Managing configuration across environments16- Implementing logging and monitoring17- Planning application scaling strategy18- Debugging deployment or environment issues1920## Rule Categories by Priority2122| Priority | Category | Impact | Prefix |23|----------|----------|--------|--------|24| 1 | Codebase & Version Control | CRITICAL | `code-` |25| 2 | Dependencies | CRITICAL | `dep-` |26| 3 | Configuration | CRITICAL | `config-` |27| 4 | Backing Services | HIGH | `svc-` |28| 5 | Build, Release, Run | HIGH | `build-` |29| 6 | Processes & State | HIGH | `proc-` |30| 7 | Concurrency & Scaling | HIGH | `scale-` |31| 8 | Disposability | HIGH | `disp-` |32| 9 | Port Binding | MEDIUM | `port-` |33| 10 | Dev/Prod Parity | MEDIUM | `parity-` |34| 11 | Logging | MEDIUM | `log-` |35| 12 | Admin Processes | MEDIUM | `admin-` |3637## Quick Reference3839### 1. Codebase & Version Control (CRITICAL)4041- [`code-single-codebase`](references/code-single-codebase.md) - Maintain one codebase per application in version control42- [`code-one-app-one-repo`](references/code-one-app-one-repo.md) - Enforce one-to-one correlation between codebase and application43- [`code-deploys-not-branches`](references/code-deploys-not-branches.md) - Use deploys not branches to represent environments44- [`code-shared-as-libraries`](references/code-shared-as-libraries.md) - Factor shared code into libraries managed by dependency manager4546### 2. Dependencies (CRITICAL)4748- [`dep-explicit-declaration`](references/dep-explicit-declaration.md) - Declare all dependencies explicitly in a manifest file49- [`dep-isolate-execution`](references/dep-isolate-execution.md) - Isolate dependencies to prevent system package leakage50- [`dep-no-system-tools`](references/dep-no-system-tools.md) - Never rely on implicit system tools being available51- [`dep-deterministic-builds`](references/dep-deterministic-builds.md) - Use lockfiles for deterministic dependency resolution5253### 3. Configuration (CRITICAL)5455- [`config-separate-from-code`](references/config-separate-from-code.md) - Strictly separate configuration from code56- [`config-use-env-vars`](references/config-use-env-vars.md) - Store configuration in environment variables57- [`config-no-env-groups`](references/config-no-env-groups.md) - Treat environment variables as granular controls not grouped environments58- [`config-validate-on-startup`](references/config-validate-on-startup.md) - Validate required configuration at application startup59- [`config-never-commit-secrets`](references/config-never-commit-secrets.md) - Never commit secrets or credentials to version control6061### 4. Backing Services (HIGH)6263- [`svc-as-attached-resources`](references/svc-as-attached-resources.md) - Treat backing services as attached resources64- [`svc-connection-strings`](references/svc-connection-strings.md) - Reference all backing services via connection URLs in config65- [`svc-no-local-vs-remote`](references/svc-no-local-vs-remote.md) - Make no distinction between local and third-party services66- [`svc-detach-attach-without-code`](references/svc-detach-attach-without-code.md) - Design services to be detachable and attachable without code changes6768### 5. Build, Release, Run (HIGH)6970- [`build-separate-stages`](references/build-separate-stages.md) - Strictly separate build, release, and run stages71- [`build-immutable-releases`](references/build-immutable-releases.md) - Create immutable releases with unique identifiers72- [`build-no-runtime-changes`](references/build-no-runtime-changes.md) - Never modify code at runtime - changes require new release73- [`build-complexity-in-build`](references/build-complexity-in-build.md) - Push complexity into build stage keep run stage minimal74- [`build-artifact-per-commit`](references/build-artifact-per-commit.md) - Generate one build artifact per commit deploy same artifact everywhere7576### 6. Processes & State (HIGH)7778- [`proc-stateless-processes`](references/proc-stateless-processes.md) - Execute the application as stateless processes79- [`proc-no-sticky-sessions`](references/proc-no-sticky-sessions.md) - Never use sticky sessions - store session data in backing services80- [`proc-no-local-filesystem`](references/proc-no-local-filesystem.md) - Never assume local filesystem persists between requests81- [`proc-compile-at-build`](references/proc-compile-at-build.md) - Perform asset compilation and bundling at build time not runtime82- [`proc-share-nothing`](references/proc-share-nothing.md) - Design processes to share nothing with each other8384### 7. Concurrency & Scaling (HIGH)8586- [`scale-process-model`](references/scale-process-model.md) - Scale out via the process model with multiple process types87- [`scale-process-types`](references/scale-process-types.md) - Assign workloads to appropriate process types88- [`scale-no-daemonize`](references/scale-no-daemonize.md) - Never daemonize or write PID files let process manager handle it89- [`scale-horizontal-not-vertical`](references/scale-horizontal-not-vertical.md) - Design for horizontal scaling over vertical scaling90- [`scale-process-formation`](references/scale-process-formation.md) - Define process formation as declarative configuration9192### 8. Disposability (HIGH)9394- [`disp-disposable-processes`](references/disp-disposable-processes.md) - Design processes to be disposable started or stopped at any moment95- [`disp-fast-startup`](references/disp-fast-startup.md) - Minimize startup time to enable rapid scaling and recovery96- [`disp-graceful-shutdown`](references/disp-graceful-shutdown.md) - Implement graceful shutdown on SIGTERM97- [`disp-crash-only`](references/disp-crash-only.md) - Design for crash-only software that recovers from sudden death98- [`disp-idempotent-operations`](references/disp-idempotent-operations.md) - Make operations idempotent to safely retry after failures99100### 9. Port Binding (MEDIUM)101102- [`port-self-contained`](references/port-self-contained.md) - Make the application completely self-contained with embedded server103- [`port-export-via-binding`](references/port-export-via-binding.md) - Export services via port binding using PORT environment variable104- [`port-any-protocol`](references/port-any-protocol.md) - Use port binding to export any protocol not just HTTP105106### 10. Dev/Prod Parity (MEDIUM)107108- [`parity-minimize-gaps`](references/parity-minimize-gaps.md) - Minimize gaps between development and production environments109- [`parity-same-backing-services`](references/parity-same-backing-services.md) - Use the same type and version of backing services in all environments110- [`parity-deploy-frequently`](references/parity-deploy-frequently.md) - Deploy frequently to minimize the time gap111- [`parity-developers-deploy`](references/parity-developers-deploy.md) - Involve developers in deployment to minimize personnel gap112113### 11. Logging (MEDIUM)114115- [`log-event-streams`](references/log-event-streams.md) - Treat logs as event streams not files116- [`log-no-routing`](references/log-no-routing.md) - Never route or store logs from within the application117- [`log-structured-format`](references/log-structured-format.md) - Use structured logging for machine-readable event streams118- [`log-unbuffered-stdout`](references/log-unbuffered-stdout.md) - Write logs unbuffered to stdout for real-time streaming119120### 12. Admin Processes (MEDIUM)121122- [`admin-one-off-processes`](references/admin-one-off-processes.md) - Run admin tasks as one-off processes not special scripts123- [`admin-same-environment`](references/admin-same-environment.md) - Run admin processes against a release with same codebase and config124- [`admin-repl-access`](references/admin-repl-access.md) - Provide REPL access for debugging and data inspection125126## How to Use127128Read individual reference files for detailed explanations and code examples:129130- [Section definitions](references/_sections.md) - Category structure and impact levels131- [Rule template](assets/templates/_template.md) - Template for adding new rules132133## Reference Files134135| File | Description |136|------|-------------|137| [references/_sections.md](references/_sections.md) | Category definitions and ordering |138| [assets/templates/_template.md](assets/templates/_template.md) | Template for new rules |139| [metadata.json](metadata.json) | Version and reference information |
Run npx skillmds@latest add comeonoliver/12-factor-app in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Community Cloud-Native Applications Best Practices It is listed under DevOps & Infra on SkillMD.
This skill has not completed SkillMD's automated safety review yet. Independent scanners report: SkillSpector: PASS, Skill Scanner: PASS. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
ComeOnOliver (@comeonoliver) published this skill. Their other Agent Skills are listed on their SkillMD profile.