Configuration strategy
Skill SWEStash/swe-workflow-skills/plugins/backend/skills/configuration-strategy
A comprehensive SWE workflow, encoded. Might be useful to you too.
npx -y skills add SWEStash/swe-workflow-skills --skill configuration-strategyAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Design environment configuration, secrets management, and feature-flag hierarchy for a service or feature. Triggers: config strategy, environment variables, .env, secrets management, feature flag, config hierarchy, config precedence, twelve-factor config, environment-specific settings.
SKILL.md
5.8 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it
Configuration Strategy
Design configuration that is safe, auditable, and easy to change. Most configuration problems (hardcoded secrets, production config in dev, feature flags with no off-switch) come from not designing the system upfront.
Step 1: Identify All Configuration Needed
List every piece of configuration the feature or service requires:
- Service endpoints: URLs for external APIs, internal services, databases
- Credentials and secrets: API keys, database passwords, signing keys, certificates
- Behavior toggles: Feature flags, A/B test parameters, rate limits, timeouts
- Static config: Timeouts, retry counts, pagination defaults, log levels
- Environment-specific values: Different database URLs for dev/staging/prod
Don't leave any implicit. "We'll hard-code the staging URL for now" is the start of a production incident.
Step 2: Classify Each Configuration Item
For each item, determine:
Sensitivity:
- Secret: Must never appear in logs, code, or non-encrypted storage (API keys, passwords, tokens)
- Sensitive: Not a secret but not public (internal service URLs, customer IDs)
- Non-sensitive: Safe to log, safe in version control (log levels, timeouts, feature flag names)
Mutability:
- Static: Set at deploy time, doesn't change without a redeploy (database schema version, service name)
- Runtime-mutable: Can change without redeploy (feature flags, rate limits, A/B test parameters)
Scope:
- Global: Same value in all environments (timeout constants, algorithm parameters)
- Environment-specific: Different per env (database URLs, API endpoints, log levels)
- Per-tenant/per-user: Different per customer (feature entitlements, custom limits)
Step 3: Design the Configuration Hierarchy
Based on classification, assign each item to the right storage:
| Storage | For | Examples |
|---|---|---|
| Environment variables | Environment-specific non-secrets | DATABASE_URL, SERVICE_ENV, LOG_LEVEL |
| Secrets manager | All secrets | Database passwords, API keys, signing keys |
| Feature flag service | Runtime-mutable toggles | Feature flags, A/B variants, rollout percentages |
| Config file in repo | Non-sensitive static config | Timeout constants, retry policies, allowed values |
| Database (config table) | Per-tenant/per-user config | Customer-specific rate limits, feature entitlements |
Hierarchy principle: More specific overrides less specific. Per-tenant overrides environment which overrides global default.
See references/config-patterns.md for feature flag design patterns and secrets management tool guidance.
Step 4: Plan Safe Config Rollout
Configuration changes can cause outages just like code changes. Plan rollout for each type:
Secrets rotation:
- Generate new secret while old one remains valid
- Deploy application with new secret
- Verify application uses new secret correctly
- Revoke old secret (after 24-hour overlap window)
Feature flag rollout:
- Start at 0% — verify flag infrastructure works
- Enable for internal users — catch obvious breakage
- Enable for small percentage (5-10%) — monitor metrics
- Ramp up gradually — verify metrics hold at each step
- Full rollout — verify, then clean up the flag
Environment variable changes:
- New variables: set in target environment before deploying code that reads them
- Changed values: consider backward compatibility with old code during rolling deploys
- Removed variables: remove from code before removing from environment config
Step 5: Audit Existing Code for Anti-patterns
Review the codebase for common configuration mistakes:
Hardcoded values to find and fix:
- IP addresses, hostnames, port numbers (search:
localhost,127.0.0.1, regex for IP patterns) - Credentials (search:
password,secret,api_key,tokenin string literals) - Environment-specific constants (search for strings that differ between environments)
- Magic numbers that should be configurable (search for hardcoded timeouts, limits, batch sizes)
Config anti-patterns:
- Feature flags that have been "on" everywhere for 6+ months (dead code risk — remove the flag)
- Config values read but never validated (add startup validation that fails fast on missing config)
- Different config loading paths for test vs production (leads to "works in tests but not prod")
- Secrets passed via command-line arguments (visible in process lists)
Principles Applied
- DRY: Single source of truth for each config value. If the same value appears in multiple places, it will drift.
- KISS: Flat config beats deeply nested config. Environment variables beat custom config DSLs.
- Least privilege: Services should only have access to the secrets they need. Database credentials shouldn't be shared across services.
- YAGNI: Don't create config variables for things that will never change. Hard-code what's truly constant.
- Fail fast: Validate all required config on startup. A crash at startup is better than a mysterious failure 10 minutes in.
Cross-Skill References
feature-planning— decide which behaviors will be feature-flagged during planning, before implementationsecurity-audit— review secrets handling and access control as part of security reviewdeployment-checklist— verify all config is set before deployingrollback-strategy— feature flags are the simplest rollback mechanism; design them accordingly