Skip to content

Standard: IaC Tool Maturity Lifecycle — status tracking, warnings, and release gates #7

@kristopherjturner

Description

@kristopherjturner

IaC Tool Maturity Lifecycle Standard

Problem

We have multiple IaC tools across multiple repos (Terraform, Bicep, ARM, PowerShell, Ansible) at varying levels of maturity — some tested, some untested, some partially working. There is no formal standard for:

  • What lifecycle stage each tool is in
  • What criteria must be met before a tool can be called "released"
  • How to communicate tool status to users (warnings, badges, banners)
  • Preventing untested tools from being presented as production-ready

Users following our docs could pick an untested tool path and hit a wall with no warning.

Proposal

1. Define Lifecycle Stages

Stage Label Meaning User Warning
Draft 🔴 Draft Scaffolded / placeholder — not functional ⛔ "This tool is not yet functional. Do not use."
Alpha 🟠 Alpha Partially implemented — major gaps, may break ⚠️ "Alpha: Incomplete and untested. Use at your own risk."
Beta 🟡 Beta Feature-complete but not fully tested in production ⚠️ "Beta: Not yet validated in production. Report issues."
Release Candidate 🔵 RC Fully tested, pending final sign-off ℹ️ "Release Candidate: Validated but awaiting final approval."
Released 🟢 Released Fully tested, validated, production-ready ✅ No warning needed
Deprecated ⚫ Deprecated Being phased out ⚠️ "Deprecated: Will be removed in a future release."

2. Release Gate Criteria

A tool cannot advance to Released unless ALL of these are met:

  • End-to-end deployment succeeds against a real Azure Local environment
  • Idempotent re-run succeeds (deploy twice, no errors or drift)
  • Destroy/cleanup succeeds cleanly
  • All resources match variables.example.yml configuration
  • Passes automated validation checks (lint, format, schema)
  • Peer-reviewed by at least 1 other contributor
  • Documentation is complete (deployment guide, variables reference, troubleshooting)
  • CI/CD pipeline exists and passes

3. Status Display in Documentation

Every tool-specific doc page must include a status badge/banner at the top:

> [!WARNING]
> **Tool Status: 🟠 Alpha** — This Terraform module is partially implemented and has not been tested
> against a production Azure Local environment. Do not use for production deployments.
> See [Tool Maturity Standard](https://azurelocal.cloud/standards/tool-maturity/) for details.

4. Status Tracking Matrix (per repo)

Each repo must maintain a tool status table in its README.md or docs/index.md:

| Tool | Status | Last Tested | Tested By | Notes |
|------|--------|-------------|-----------|-------|
| PowerShell | 🟡 Beta | 2026-03-01 | @kristopherjturner | End-to-end on TPLabs |
| Terraform | 🟠 Alpha ||| Azure resources only, no guest config |
| Bicep | 🟠 Alpha ||| Compiles, not deployed |
| ARM | 🔴 Draft ||| Auto-generated from Bicep |
| Ansible | 🔴 Draft ||| Roles scaffolded, not tested |

5. Standards Document

Create a standards document (docs/standards/tool-maturity.md or equivalent) that:

  • Defines the lifecycle stages and their criteria
  • Specifies the warning banner format
  • Specifies the status table format
  • Documents the release gate checklist
  • Is replicated to each repo (or linked from the central docs site)

Scope

This standard applies to ALL repos in the AzureLocal org:

  • azurelocal-avd — Terraform, Bicep, ARM, PowerShell, Ansible
  • azurelocal-sofs-fslogix — Terraform, Bicep, ARM, PowerShell, Ansible
  • azurelocal-toolkit — PowerShell, Bicep
  • azurelocal-loadtools — PowerShell
  • azurelocal-vm-conversion-toolkit — PowerShell

Acceptance Criteria

  • Standards document written and published to azurelocal.cloud docs site
  • Standards document replicated to each repo (or linked — per issue Create standards replication mechanism from docs site to all repos #6)
  • Every repo has a tool status table in README/index
  • Every tool-specific doc page has a status banner
  • CI check (optional, future) that validates status banners exist
  • No tool is labeled "Released" without passing all gate criteria

Related

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions