The abstraction that seems like a shortcut
Most multi-cloud tools converge on the same idea: one form, one set of fields — instance size, region, disk, network — mapped onto whichever provider you pick. It reads as a feature. Fewer fields to learn, one mental model across 12 providers.
It is also where multi-cloud Terraform starts to drift from what the provider actually supports, without a clear warning. AWS, Azure, and GCP do not agree on what a "region" is scoped to, what a disk's performance tier options are, or which network attributes are mandatory versus inferred. A generic field forces all three into the same shape. The parts that do not fit get dropped or defaulted. They are not shown to you.
Where a shared, reduced form shows up later
This does not fail at generation time. The form is easy to fill in, the file plans, the demo works. It shows up three ways later:
Attributes you needed are not in the form, because the form only exposes what is common across all providers, not what is specific to the one you are actually using. You end up hand-editing the generated file to add the provider-specific attribute. That brings back the maintenance burden a wizard was supposed to remove.
Defaults get picked for you, with no warning, for anything the generic schema did not ask about. On a provider where that default is expensive or insecure, you do not find out until a bill or a security review flags it.
Switching providers is not actually simple, even though the generic form implies it should be. The fields matched syntactically, not semantically. A "machine size" field on AWS and the equivalent on GCP do not round-trip cleanly, because the underlying resource types were never the same shape to begin with.
A schema per provider, not a shared reduced schema
NebulaStack's multi-provider wizard is built the other way: every provider has its own wizard exposing real Terraform resource attributes for that provider, field for field — not a stripped-down form shared across all 12. It feeds the same typed-intent pipeline as the AI assistant, so a request made through the AWS wizard and a request made through the AI chat produce output through the same deterministic emitter.
That emitter is what multi-cloud consistency actually depends on. Terraform, Pulumi, and Crossplane are generated production-grade across all 12 supported providers by a deterministic code generator — not the language model — so that "multi-cloud" does not mean "the same brittle abstraction copy-pasted across three provider blocks." Kubernetes workloads get their own manifests, Helm charts, and Kustomize overlays rather than being squeezed into the same VM-shaped form as a cloud instance.
The trade-off is real: a dedicated wizard per provider means more surface area to build and maintain than one generic form. It is the trade-off worth making, because the alternative — one shape for every provider — is not actually simpler. It is the same complexity, deferred to the moment you discover what the generic form left out.