The engineering bottleneck with assembled stacks
Platform owners discover multi-tenancy is not a feature but a hundred small decisions: whose key goes in which index, which counter enforces whose quota, how one noisy tenant is throttled without a war room, and how a departing tenant’s data is provably gone. Assembled stacks scatter those decisions across services until none of them can be reviewed together.
Architecture on the Software Lifecycle Cloud
Every tenant-owned table keys on tenant id, with the entity id as sort key. Gateway API keys are issued per route and mapped to tenants in a tenants table; functions resolve the tenant from the key, never from request input. Quotas are counters in the tenant’s own slice, incremented by the same writes they limit, so enforcement and evidence are one record.
Noisy neighbours and quota honesty
A tenant melting the shared project is a when, not an if. Counters beside the data make the response boring: the handler checks the tenant’s counter against the plan limit declared for them and sheds load for that tenant only. Because the counter and the data share a slice, the conversation with the tenant starts from records both sides can inspect.
- Tenant export and erasure are keyed operations on a declared slice — provable, repeatable, logged
- Per-tenant keys rotate from stack.json; a leaked key endangers one tenant, not the platform
- One project to plan means a tenancy change is reviewed once, as a diff, by everyone it affects
The isolation ceiling, stated
Shared-project multi-tenancy isolates data and quota, not physics: all tenants share the zone’s infrastructure. Regulated tenants who contractually need separate infrastructure get a separate KERNSTACK project — the declaration copies over, which is exactly the portability the stack.json model buys. Choosing per-tenant projects is an operations decision, not a rewrite.
Frequently asked questions
Deletion is a keyed sweep over the tenant’s slice in every table plus their bucket prefix, followed by the deletion record. Because tenancy was key design from day one, “everywhere their data lived” is enumerable rather than archaeological.
Yes. The same stack.json declares a dedicated project for a tenant whose contract demands infrastructure separation; their slice migrates as an export between identically-shaped systems. The application code barely notices.
In counters in the tenant’s slice, incremented alongside the work they meter. Handlers enforce limits from those counters, and billing reads the same rows — one record serves the limit, the invoice, and the dispute.
Related capabilities, architectures, and comparisons
Ship your stack on the Software Lifecycle Cloud.
Closed preview on dedicated European infrastructure. Bring a repository or start from a blueprint.