What category
What category of thing does this record represent?
Investigation 031 - Platform Evolution Principles
The platform understands workloads, network identities, storage claims, configuration, and authority-bearing material. A database team now needs to represent a replicated database as desired state. A security team needs a certificate request. Neither shares the platform's release schedule.
Begin the investigation downPrologue
The platform already knows how to represent resources through one mechanism, and every new kind can use it without anything fundamental changing — as long as the platform team is the one deciding what belongs inside its vocabulary.
The platform represents kind identity, instance identity, declared representation, and domain meaning through one existing mechanism.
Every request can keep being absorbed as long as the platform remains the one party deciding what belongs inside its vocabulary.
A database team needs a replicated database. A security team needs a certificate request. A hardware team needs a device allocation. None shares the platform's release schedule.
How can new kinds of typed desired state become authoritative without modifying the platform core for every new type?
First Principles
A resource becomes significant when participants can rely on the platform to preserve certain properties about it: a stable kind identity, an instance identity, a declared representation, authoritative persistence, concurrency rules, discovery, ownership, and observable change.
What category of thing does this record represent?
Which particular stored record of that kind is this?
Which declared shape is this instance currently expressed through?
The domain understands what the represented state means.
The platform preserves the accepted record according to its own rules.
Whether the platform can own the first without ever owning the second is what the rest of this investigation must earn.
Meaning and representation differ. The platform may judge structural form without understanding database replication, failover, or health.
Naive Architecture
The new kind becomes an ordinary platform resource. One owner controls every definition, and every resource receives the same common guarantees — no second storage system, no second discovery mechanism, no second concurrency model.
The Architecture That Almost Worked
Let a domain submit a kind label, an instance identity, and an opaque payload. The platform preserves it without embedding the complete definition in core. One source of truth remains. The domain no longer needs a platform release merely to introduce a new kind of state.
The platform's existing authoritative store, ownership metadata, and observation machinery continue to apply without a second system.
A kind label and an instance identity are treated as enough to accept a payload, with no declared structure to check it against.
The architecture holds only until someone asks the platform to tell a well-formed payload apart from a malformed one.
Breaking Our Design
Each experiment starts from its own clean state and tests one prediction. Read the pressure and prediction, then run the experiment to find out what actually happens.
Pressure. One core type is added to the platform. Independent domains begin submitting domain-local changes to it.
Prediction. If the platform team reviews and releases each change promptly, coupling every domain to the platform's release lifecycle should be tolerable indefinitely.
Pressure. Assume release coupling is removed. A domain submits a kind label, an instance identity, and an opaque payload directly into the authoritative store.
Prediction. If the kind label and instance identity are stable, the platform should already have what it needs to tell a conforming payload from a malformed one.
Pressure. Assume the domain owns a separate authoritative store entirely. The platform still records an owning relationship to a record in that store.
Prediction. If each authority stays locally correct, the relationship between them should remain valid without further coordination.
Pressure. ReplicatedDatabase instance orders-production already has a v1 representation, history, an owner, and watchers. Its declared shape changes.
Prediction. If the resource kind is identified by its current representation, adding a field should be a harmless detail.
The Turning Point
Four failures point at a boundary, not yet its exact split. Chapter 07 formalizes the contract once all four experiments are complete.
The Extensible Resource Contract
A domain may introduce a new resource kind without modifying the platform core, while instances remain participants in the platform's authoritative resource model. The domain owns what the resource means; the platform owns the narrow contract that makes it a legitimate resource.
Resource meaning, definition, declared structure, representation evolution, and domain-specific behaviour.
Authoritative persistence, structural conformance, discovery, resourceVersion-checked updates, ownership metadata, and bounded observable change.
A custom resource does not automatically receive every capability available to every built-in resource.
ReplicatedDatabaseorders-productionv1 / v2Kind, instance, and representation identities remain separate. Representation can evolve without redefining the identity of the resource kind.
Only Now: Kubernetes
A CustomResourceDefinition, or CRD, declares a custom resource kind: its API group, plural and singular names, scope, one or more versions, exactly one version designated for storage, and an OpenAPI v3 structural schema for each version. Any version may independently be marked as served. Once registered, the API server can serve and store instances of that resource through the same common machinery used by built-in resources.
Custom resource instances carry metadata and a resourceVersion, and participate in the platform's common watch machinery exactly as built-in resources do. That watch history remains bounded, and clients may need to relist rather than assume every prior change is retrievable — the same limit established earlier in the book.
A CRD does not automatically grant every capability available to built-in resources: arbitrary storage backends, subresources, semantic transactions across resources, domain behaviour, conversion between versions, and admission policy over proposed instances remain separate mechanisms, and separate investigations. Declaring and storing a custom resource does not make its desired state real.
CustomResourceDefinition names the kind, its API group, scope, and one or more versions.
Each version can declare a structural schema the API server enforces before storage.
Custom resource instances use the same resourceVersion-checked updates and bounded watch mechanism as built-in resources.
Engineering Reflection
Extend the vocabulary without destabilising the guarantees.
One team owns the platform and its resource definitions, the platform has a narrow purpose, resource kinds change infrequently, and no independent release cadences exist.
Domains evolve independently, definitions need declared structure, resources need common platform guarantees, and kind identity must survive representation change.
Externally defined resources now enter the authoritative model.
Opaque payloads are no longer sufficient; conformance must be judged.
Kind, instance, and representation identities remain separate concerns to maintain.
Custom resources do not inherit every built-in capability automatically.
Investigation Exercise
Design three representations of the same resource kind — replicas and storage, then add a backup policy, then add an encryption policy — while keeping the resource kind and instance identity constant.
Trace ReplicatedDatabase / orders-production through each representation change, noting what the platform records at each step.
Notice that the representation changes while the kind and instance identities remain stable throughout.
Compare this against treating every version as a new kind, or every representation as an opaque payload.
Bridge to INV-032
The domain defined a resource kind.
The platform preserved common guarantees for it.
ReplicatedDatabase remains desired state without domain behaviour.
Representation alone does not change the world.
Who owns the behaviour that makes this desired state become reality?
This investigation inherits the reconciliation and controller contract from INV-002 and INV-003, and the authoritative resource model from INV-007 and INV-009. Extending a stable core with independently defined types is a long-standing pattern in software architecture; CustomResourceDefinition is one realization of the broader extensible-resource contract derived here.