Roadmap¶
The umbrella view of what is left: what is committed, what needs discovery, and what waits for a trigger. It links to the detailed sources rather than duplicating them.
How this is organized¶
Every item sits in one of three horizons, and moves through a decision funnel:
Idea ──► Discovery (timeboxed spike) ──► Decision (ADR) ──► Delivery (task) ──► Done
│ │ │
open-discussion.md decisions/ TASKS.yaml
- Now — committed. The what is decided; only execution remains. Lives in
TASKS.yamland the hardening backlog. - Discovery — a spike, then an ADR. Options are open. A timeboxed spike compares them and produces a decision record; see open discussion for the first one.
- Later — future / optional. Revisit only when a documented trigger fires (scale, a requirement, or a cost threshold).
The rule of thumb: decided → task; open with real options → spike → ADR; trigger-dependent → later. This keeps us from implementing something before we have chosen it, and from endlessly debating something we have.
Now — committed¶
| Item | Theme | Source |
|---|---|---|
| Tests + coverage, dependency scanning, IaC scanning, SAST, pinned actions | Security | HS-01…HS-04, HS-07 |
| NetworkPolicies, Pod Security Admission, DB security-group scope, split runner IAM | Security | HS-09…HS-12 |
| Single Argo CD, platform-scoped naming, ECR owned by the platform, ApplicationSet, render-time plugin | Platform / GitOps | GITOPS-HUB |
| Rename clusters/resources and move the contract to platform scope | Platform | PLATFORM-RENAME |
| Observability baseline (metrics + a few dashboards and alerts) | Observability | OBSERVABILITY, HS-18 |
Discovery — spike, then an ADR¶
Each item is a timeboxed investigation that ends in a decision record (and, if accepted, a task).
| # | Question | Options to compare | Output |
|---|---|---|---|
| D1 | Should an application own its infrastructure? | platform-applied · app-owned root · app-declares/platform-applies · Kubernetes-native | ADR superseding parts of ADR-001/013 |
| D2 | Kubernetes-native cloud resources? | Crossplane · AWS Controllers for Kubernetes (ACK) · keep Terraform | ADR |
| D3 | IaC language? | OpenTofu (HCL) · Pulumi (general-purpose languages) | ADR |
| D4 | GitOps engine (revisit)? | Argo CD (ADR-017) · Flux CD | Revisit ADR-017 |
| D5 | Observability stack? | kube-prometheus-stack · managed (CloudWatch/AMP) · Grafana Cloud | ADR + OBSERVABILITY |
| D6 | Progressive delivery? | Argo Rollouts · mesh-based (gated on D5) | ADR |
| D7 | Policy / admission engine? | Kyverno · Gatekeeper · OPA | ADR (unblocks image verification) |
| D8 | Chart distribution and promotion? | OCI chart + PR-based promotion (ADR-014 target) · current digest commit | Implementation of ADR-014 |
| D9 | Contract delivery? | Render-time CMP plugin (ADR-015 target) · Terraform injection (interim) | Implementation of ADR-015 |
| D10 | Single-Argo CD reachability? | VPC peering · hub / Transit Gateway | ADR (part of GITOPS-HUB) |
Why these need discovery, not execution: each has more than one defensible answer whose trade-offs depend on scale and requirements we do not have yet (for example, Crossplane only pays off with many resources and teams; Pulumi only pays off with developers who prefer general-purpose languages). A spike is cheaper than committing.
Flux CD is already decided (ADR-017 chose Argo CD); D4 is a revisit, not a fresh evaluation — only if the central-server/pull-native trade-off changes.
Later — future / optional (revisit when a trigger fires)¶
| Item | Trigger to revisit | Source |
|---|---|---|
| Move third-party add-ons to Argo CD (app-of-apps) | wanting one reconciliation model for the cluster | GITOPS-ADDONS, ADR-009 |
| Karpenter + Spot, pod-density (prefix delegation), scheduled scaling | cost or capacity pressure | HS-26…HS-28 |
| Production-like staging, load and migration testing | before any performance or migration claim | HS-23, HS-24 |
| WAF, VPC endpoints, customer-managed KMS keys, audit logs | exposure, egress cost, or a compliance requirement | HS-14…HS-17 |
| SBOM, image signing, verify-at-admission | after D7 (admission engine) | HS-05, HS-06 |
| Aurora reader / failover, secret rotation, restore drill | an availability or recovery requirement | HS-19…HS-21 |
| Service mesh | multiple services needing mTLS, traffic splitting, or L7 telemetry | ADR-018 |
| Multi-region, hub cluster | more than a few clusters or a latency requirement | ADR-013, ADR-016 |
| Developer portal (Backstage) / service catalog | onboarding volume that a template cannot handle | — |
Where things live¶
| Artifact | Purpose |
|---|---|
TASKS.yaml |
the execution board (open / in progress / done) |
| hardening backlog | security, reliability, and cost items (HS-xx) |
| decisions | accepted decisions (ADR-xxx) |
| open discussion | options not yet decided |
| this page | the umbrella: horizon, theme, and status of every item |