Skip to content

Architecture decisions

Most of this site is generated. The catalog, the resource reference, the agent contracts and the atlas are all rendered from the definitions the org ships, so they cannot describe something that does not exist.

This section is the part no generator can write: the reasoning. Six choices shape everything else here, and each one is a real trade — something was given up to get the property that was wanted. A page that only states the shape is a page you have to take on faith. Each of these states the constraint first, then the shape, then what was rejected and why, and finishes with what the choice costs. The cost sections are not hedging; they are where the design is actually visible.

Decision The property it buys
Identity is bound, not annotated No role ARN is ever pasted into a tenant’s chart
The kill switch changes AWS, not the cluster The stop holds when the control plane is the broken thing
A tenant’s substrate is a declaration The store that exists and the policy that reaches it cannot disagree
Layers are drawn by rate of change A change has one correct home, and it is findable
Crossplane orders the IaC Vending is an object with a status, without a second copy of the infrastructure
One account holds a whole product Spend, quota and blast radius stop at the product

A recurring theme runs through all six, and it is worth naming up front because it explains choices that otherwise look paranoid. The failure this system is built against is not the crash. It is the healthy control plane over a dead data path: every manifest valid, every controller reporting Ready, and the thing the system exists to do quietly not happening. That failure produces no error, so nothing that reads a resource can see it. Several of the decisions below give up convenience specifically to make that state impossible or loud.