Skip to main content

ADR-005: Example Naming Convention (MVP/PoC/Production Tiers)

Status: Accepted Date: 2026-02-25 Deciders: @cloud-architect, @product-owner, HITL/Manager

Context

The source iam-identity-center module has 16 examples with ad-hoc naming:

ai-agent-permissions/
create-apps-and-assignments/
create-users-and-groups/
create-users-and-groups-with-customer-managed-policies/
entra-pim-integration/
existing-users-and-groups/
existing-users-groups-create-apps/
google-workspace/
inline-policy/
instance-access-control-attributes/
jit-access/
localstack/
test-minimal/

Problems with current naming:

  1. No indication of COMPLEXITY (is jit-access production-ready or experimental?)
  2. No indication of COST (does entra-pim-integration spin up $200/month of resources?)
  3. No indication of AUDIENCE (is test-minimal for testing or for new users?)
  4. test-minimal is ambiguous: is it a test fixture or a minimal usage example?
  5. No ordering — alphabetical sort doesn't reflect learning progression

The aws-ecs-fargate module has only one example: dashboard-deployment/ — insufficient.

The web module examples are undefined.

Industry reference: The terraform-aws-modules organisation uses a simpler flat structure (examples/complete/, examples/basic/, examples/disabled/) which doesn't scale to modules with multiple IdP integrations, JIT access patterns, and ABAC configurations.

The manager brief specifies three example tiers: MVP, PoC, Production. These map naturally to cost and complexity axes.

Decision

Adopt a three-tier prefix system with kebab-case descriptors:

examples/
├── mvp-<descriptor>/ # Tier 1: Minimum viable, $0-5/month, no HITL required
├── poc-<descriptor>/ # Tier 2: Proof of concept, $5-50/month, HITL approval required
└── production-<descriptor>/ # Tier 3: Production-ready, $50+/month, HITL mandatory

The naming pattern is {tier}-{descriptor} (e.g., mvp-minimal, poc-abac, production-jit-access).

Tier definitions:

TierPrefixResources CreatedEstimated Monthly CostHITL GateIntended Audience
MVPmvp-Plan-only OR minimal apply (groups + permission sets, no users)$0-5Not requiredNew users, CI testing, Registry docs
PoCpoc-Functional apply with real IdP integration OR 1 ECS service$5-50Required (Tier 3)Evaluators, sandbox testing
Productionproduction-Full compliance stack: JIT, ABAC, Zero Trust, multi-account$50-500+MandatoryEnterprise architects

Concrete mapping for iam-identity-center:

Old NameNew NameTierRationale
test-minimalmvp-minimalMVPPlan-only; used in Tier 1 tests
localstack(move to tests/)N/ATest fixture, not an example
create-users-and-groupsmvp-users-and-groupsMVPBasic user provisioning
existing-users-and-groupsmvp-existing-idpMVPRead-only, plan validation
inline-policymvp-inline-policyMVPSingle permission set pattern
instance-access-control-attributespoc-abacPoCRequires real SSO instance
create-apps-and-assignmentspoc-sso-applicationsPoCRequires real AWS account
existing-users-groups-create-appspoc-hybrid-idpPoCMixed existing + new
create-users-and-groups-with-customer-managed-policiespoc-customer-managed-policiesPoCReal IAM policies
google-workspacepoc-google-workspacePoCRequires Google Workspace setup
entra-pim-integrationproduction-entra-pimProductionRequires Entra + AWS Organizations
jit-accessproduction-jit-accessProductionLambda + SNS + EventBridge
ai-agent-permissionsproduction-ai-agent-rbacProductionZero Trust + ABAC + JIT

Each example directory MUST contain:

mvp-minimal/
├── main.tf
├── variables.tf
├── outputs.tf
├── versions.tf
├── README.md # cost estimate, prerequisites, time-to-apply
└── terraform.tfvars.example

README.md header template:

# Example: <Tier> - <Descriptor>

**Tier**: MVP | PoC | Production
**Cost**: $X/month (ap-southeast-2)
**Time to Apply**: X minutes
**Prerequisites**: [list]
**HITL Required**: Yes | No

Consequences

Positive

  • Users immediately understand complexity, cost, and audience from directory name
  • CI can automatically skip production-* examples unless HITL approval present
  • Registry documentation auto-generated example list has meaningful ordering
  • Consistent with ADLC 3-tier testing philosophy

Negative

  • 13 existing example directories need renaming — breaking change for any consumer who references example directories directly (unlikely but possible)
  • Longer directory names increase path verbosity in README source blocks

Blocking Risks

RiskProbabilityImpactMitigation
Tier mis-classification (PoC example that actually costs Production-level)LowMediumEach example README has a cost estimate validated by Infracost in CI; PR gate fails if estimated cost deviates >20% from tier threshold

Alternatives Considered

  1. Keep existing ad-hoc names: Rejected — no discoverability; test fixtures mixed with examples
  2. basic/, complete/, advanced/ (terraform-aws-modules pattern): Rejected — "complete" is ambiguous (complete feature set or complete configuration?); does not convey cost or HITL
  3. Numbered prefixes (01-minimal, 02-abac): Rejected — numbers imply sequential dependency which is false; MVP examples are standalone
  • ADR-001: Module naming convention establishes the kebab-case standard that example names inherit
  • ADR-004: Three-tier testing strategy maps directly to example tiers (MVP = Tier 1, PoC = Tier 2, Production = Tier 3)

References

Coordination Evidence

Consolidated from .adlc/projects/terraform-aws/ as part of ADR-001→019 SSOT consolidation (2026-02-27).