CNCF and SlashData put a number on something platform teams have felt for years but rarely had data for: only 41% of professional AI and ML developers self-identify as cloud native, even though nearly all of them run workloads that depend on cloud-native infrastructure every day. The gap isn't apathy or a training budget problem. It's a concrete, learnable-but-long chain of Kubernetes concepts — Pods, then Deployments, then Services, then CRDs, then reconciliation-loop debugging — that has to click before an ML engineer can self-serve a deploy, and most organizations are asking them to climb the whole chain before they're allowed to ship anything.
The fix teams reach for first — more Kubernetes training — treats the wrong variable. The chain is real and it doesn't get shorter with better docs. What actually collapses it is moving the boundary: from "cloud-native platform team teaches AI developers Kubernetes" to "cloud-native platform team ships a git-push contract AI developers never have to see past."
What the Survey Actually Measured
CNCF and SlashData published the finding in their State of Cloud Native Development survey, released November 11, 2025 at KubeCon + CloudNativeCon North America, based on responses from more than 12,500 developers across 100 countries. Two numbers from that release matter more than the headline:
| Metric | Value |
|---|---|
| Professional AI/ML developers who self-identify as cloud native | 41% |
| AI developers who use a Machine-Learning-as-a-Service (MLaaS) platform | 30% |
| Total cloud-native developer community (Nov 2025) | 15.6 million |
SlashData's Liam Bollmann-Dodd framed the gap directly: AI developers' workloads "largely depend on [cloud native] on a day-to-day basis" even though most of them don't consider themselves cloud-native practitioners. That's the whole story in one sentence — the infrastructure requirement arrived faster than the skill did.
The follow-up Q1 2026 report, published March 24, 2026, shows the gap narrowing, not closing: the overall cloud-native community grew 28% in one quarter to 19.9 million developers, and 7.3 million of them are now AI developers who qualify as cloud native. That's real movement — but run the ratio and it means the majority of professional AI developers were still outside the cloud-native population as of the most recent count. Whatever is closing this gap, it isn't happening by osmosis, and it isn't happening fast.
The Prerequisite Chain a "Just Learn Kubernetes" Plan Ignores
The 30% MLaaS-usage number is the tell. AI developers already reach for abstraction the moment one is available — SageMaker, Vertex AI, a managed inference endpoint — specifically to avoid the layer underneath. The problem shows up the moment an organization wants that workload running on infrastructure it owns instead of a managed service, because "learn Kubernetes" is not one skill. It's a chain, and every link has to hold before the next one is useful:
- Pods, Deployments, Services — the baseline vocabulary. Nothing above this layer makes sense without it.
- Ingress or Gateway API, ConfigMaps/Secrets — how a Service actually becomes reachable and configured, not just running.
- A specific CRD instance (an
InferenceService, aSeldonDeployment, aNotebook) — the object an ML-serving framework actually asks you to write. - Reconciliation-loop literacy — reading a controller's status conditions to figure out why a CRD instance isn't converging, which is a debugging skill, not a syntax one.
Only after all four links hold does a framework like Kubeflow or KServe start to make sense as a tool instead of an obstacle. That ordering is exactly backwards from how most self-hosting pushes actually onboard AI developers, which is to hand them the CRD-writing framework first and assume the first three layers will get picked up incidentally. They don't, reliably — the well-documented failure mode is a team standing up Kubeflow for a workload that serves a handful of predictions a day and burning a quarter of engineering time on infrastructure before the first model ever reaches a real user. That's not a hypothetical inefficiency; it's the concrete cost of asking someone to learn four layers deep before they're allowed to ship the thing at the top.
Where CRDs-as-a-Service Gets You Partway
Platform teams that noticed this have a real answer, and it's worth being fair to it: CRDs-as-a-service, via Crossplane or AWS Controllers for Kubernetes (ACK), lets a developer provision an RDS instance, an S3 bucket, or a Redis cluster by writing one Kubernetes-native object instead of hand-rolling Terraform or clicking through a cloud console. It's a genuine simplification — one API shape for infrastructure that used to span five different provisioning tools.
But look at what it doesn't remove from the chain above. A developer using Crossplane still has to:
- Write and apply YAML against a Kubernetes API server (link 1–2 still required)
- Understand that the object they created is a request, not the resource itself, and read a
status.conditionsblock to know whether it succeeded (link 4, unavoidable) - Debug drift when the CRD says
Ready: Truebut the underlying cloud resource isn't behaving as expected — the exact reconciliation-loop skill link 4 names
CRDs-as-a-service moves the friction from "which of five tools do I use" to "do I understand what a controller loop is telling me." That's real progress for a platform engineer. It's a much smaller win for an ML engineer whose actual job is training and evaluating models, not learning to read Kubernetes controller status — which is precisely the population the 41% figure describes.
The Git-Push Boundary: What Each Layer Actually Hides
Line up what an AI developer has to hold in their head to ship a model-serving container under each approach, and the boundary that actually matches the skills gap becomes visible:
| Approach | Concepts an AI developer must understand to self-serve a deploy |
|---|---|
| Raw Kubernetes + a serving framework (KServe, Seldon) | Pods, Deployments, Services, Ingress/Gateway, ConfigMaps/Secrets, the framework's CRD schema, controller status conditions, kubectl |
| CRDs-as-a-service (Crossplane/ACK) | All of the above, minus needing five separate provisioning tools — still requires YAML authorship and controller-status literacy |
| Git-push contract | A repository, one config file, git push |
A bex.yml with a name, an image, a port, and a health-check path is the entire developer-facing surface — no InferenceService CRD, no Ingress rule, no controller status to interpret. The AI developer never touches the object graph that's actually reconciling underneath (a Deployment, a Service, the TLS and routing layer), the same way a Kubeflow user was never meant to hand-write the etcd records backing their notebook. The difference with a git-push contract is that the hidden layer starts at link 1 instead of link 4 — the boundary sits exactly where the skills-gap survey says the population actually is, rather than four Kubernetes-native abstractions further up the chain.
Concretely, shipping an inference endpoint on each path looks like this:
- Raw K8s + KServe: write a
Namespace, aServiceAccountwith the right RBAC, anInferenceServiceCRD referencing a model URI and a runtime, apply it, thenkubectl get inferenceservice -o yamlto read backstatus.conditionsand figure out why the revision isn't ready. - Git-push:
bex.ymlnames the image and port,git push, and the response is a URL or a clear build/health-check failure — not a controller condition to interpret.
That's not a smaller version of the same task. It's a different task, one that doesn't require the reconciliation-loop literacy link 4 demands at all.
What a Git-Push Contract Doesn't Solve
It's worth being precise about what collapsing the boundary actually buys, because it isn't everything the CNCF report's skills gap implies. A git-push contract removes the deployment-side prerequisite chain — it does not remove the need for GPU-aware scheduling, model-serving-specific concerns like batching and multi-model routing, or a platform team competent enough to build the CRD-and-controller layer underneath well. Someone still has to own that reconciliation loop; the point of the abstraction is that it's a platform team's job once, not every AI developer's job on every deploy.
It's also not a claim that the underlying Kubernetes objects disappear — they're still there, still reconciling, inspectable with kubectl get if anyone needs to look. The boundary just moves who's required to understand them by default, which is the actual lever available for a 59%-still-outside gap that isn't closing through training alone.
Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own, with the Kubernetes object graph handling GPU scheduling and reconciliation underneath so an AI developer never has to learn it first. Star the repo on GitHub or deploy your first app today.



