User-built features work when AI proposes UI within hard system boundaries, not when it freehands product design.
01 THE PROBLEM
Generative UI is the failure mode where teams let a model decide interface structure before they define the contract between intent, data, permissions, and rendering.
That sounds abstract until the first real user asks for, “Build me a churn dashboard with cohort breakdowns and an export,” and the system returns something that looks plausible, compiles, and is operationally unsafe.
The gap is not model intelligence. The gap is product architecture.
Most teams approach user-built features as a prompt engineering problem: better instructions, more examples, tighter schemas. That works for demos. It breaks the moment the UI has to survive real production constraints: authorization, loading states, partial data, failed tool calls, versioned components, analytics, accessibility, and undo.
The consequence shows up fast. Within 30 to 90 days, one of three things happens:
- The generated UI is visually impressive but functionally shallow.
- The product team quietly narrows the feature into a form builder with AI garnish.
- Engineering freezes rollout because the support burden exceeds the feature’s value.
This is why “AI builds apps for your users” remains mostly a promise and not an operating capability.
The hard problem is not generating screens. It is generating safe, composable renderings from a roadmap of user intent.
A working generative UI system has to answer five questions every time:
- What is the user actually trying to accomplish?
- What actions is the system allowed to take?
- Which UI components are legal for this context?
- How does state move between tools, model, and frontend?
- What happens when any part of that chain is wrong?
If you cannot answer those five with code-level clarity, you do not have generative UI. You have a probabilistic mockup engine.
That distinction matters for any CTO evaluating “user-built features” this quarter.
If the feature you’re considering allows customers to create workflows, dashboards, forms, internal tools, reports, or operational views from natural language, your core decision is not model choice. It is whether to treat UI generation as rendering against a controlled contract or as autonomous design.
The first path can ship.
The second path creates debt in your product surface area faster than most teams can pay it down.
02 WHY IT HAPPENS
The root cause is architectural mismatch.
LLMs are good at selecting from structured possibilities when the action space is bounded. Product UIs are reliable when the state machine is explicit. Most generative UI projects fail because they combine an open-ended generator with a frontend stack that assumes predefined interaction flows.
The model is being asked to do too much of the product manager’s job, too much of the designer’s job, and too much of the frontend runtime’s job at the same time.
That creates four structural failures.
First: intent is under-specified. A user request like “create a sales planning page” contains at least four layers: domain semantics, data requirements, permissible actions, and presentation preference.Teams often flatten all of that into one prompt and hope the model infers the missing constraints. It won’t do so consistently.
Google Research’s work on Generative UI makes this point indirectly: the useful system is not “model writes arbitrary UI,” but a pipeline where the model generates structured UI plans that can be rendered within constraints. The value comes from the intermediate representation, not from raw HTML improvisation.
Second: frontend components were never designed as an AI surface. Most design systems are built for human developers. Components have implicit usage rules, side effects, dependencies, and state assumptions scattered across code and tribal knowledge.A model cannot reliably use a component library that lacks machine-readable contracts.
This is where teams underestimate the work. They think they are integrating an LLM. In practice, they are refactoring their design system into a typed platform.
Vercel’s AI SDK documentation gets this right in a narrow but important way: generative UI is presented as connecting tool results to React components. That framing is useful because it constrains the problem. The tool call is the semantic unit. The component is the render target. The model sits between them as an orchestrator, not as a freeform UI author.
Third: data and permissions are coupled too late. In ordinary product development, engineers wire auth, row-level access, and API scopes into fixed experiences. In generative UI, teams often defer these controls because “the UI is dynamic.”That is backward.
Dynamic UI increases the need for static permission boundaries.
Stripe is a useful mental model here even though it is not publishing a generative UI platform. Stripe’s engineering culture consistently pushes critical constraints into explicit APIs, idempotency layers, and versioned contracts rather than trusting clients to “do the right thing.” Generative UI needs the same discipline. If a user asks for “show me all customer refunds over $10k,” the system must not determine at render time whether that’s permissible based on a fuzzy chain of tool outputs and client logic.
Fourth: nobody owns the runtime. A generative UI feature crosses product, design systems, model orchestration, backend tools, frontend rendering, and trust & safety.That usually means everyone owns part of it and nobody owns the contract.
The result is predictable:
- PMs focus on breadth of use cases.
- Designers focus on quality of generated layouts.
- ML engineers focus on model reliability.
- Frontend engineers focus on rendering.
- Platform engineers focus on tool execution.
- Security reviews happen after the first scary screenshot.
This is the same coordination problem that made internal platform adoption hard in the 2010s. The difference is that now the platform is partially stochastic.
High-performing teams solve this by shrinking the model’s responsibility.
Linear is relevant here as a product and engineering reference point. Linear’s product quality comes from aggressively constrained interaction patterns, not from maximal flexibility. Their changelog and public product craft discussions repeatedly show the same principle: quality is a systems decision. Generative UI teams that want Linear-level trust cannot let the model invent interaction semantics ad hoc. They need a narrow vocabulary of allowed UI primitives.
The pattern that emerges at scale is simple: generative UI succeeds when the model selects, arranges, and parameterizes. It fails when the model also defines data semantics, business rules, and interaction contracts.
03 WHAT MOST GET WRONG
The common misdiagnosis is: “The model just needs to generate better UI.”
It doesn’t.
What teams usually need is better decomposition.
Most first-generation systems do one of two things.
Mistake one: they ask the model to emit raw frontend code. This is the fastest path to a demo and the slowest path to a product.Raw code generation creates seductive progress because the output looks tangible. You can inspect JSX. You can run it. You can tweak prompts and watch visible changes.
But code is the wrong abstraction boundary for user-built features.
Once the model emits implementation code directly, every concern becomes unstable:
- component imports
- state management
- event wiring
- accessibility
- analytics instrumentation
- API calling conventions
- performance
- design system drift
- security review
You also lose the ability to reason cleanly about what the model intended versus what the renderer executed.
GitHub Copilot is a good counterexample in spirit. GitHub’s coding assistant is valuable in a developer-controlled environment because the human developer is the runtime governance layer. In a user-facing generative UI product, your end user is not that governance layer. They cannot debug generated React.
Mistake two: they overcorrect into a static template catalog and call it generative. This usually happens after the code-generation path burns the team.They swing to the opposite extreme: every user request maps to one of 12 fixed page templates. The model does lightweight routing, maybe edits labels, maybe picks a chart type, and that’s it.
This is safe, but it often kills the product thesis.
Users can feel when “AI-generated” means “we picked the nearest dashboard prefab.” They stop trusting the system for anything non-standard.
The result is a feature that is too rigid for power users and too unpredictable for everyone else.
The cost is not just adoption. It is organizational credibility. Once leadership sees that “AI-built features” really mean “dynamic templates,” budget gets harder next planning cycle.
Mistake three: they optimize for first render instead of recovery. The real test of generative UI is not whether the first version appears. It is whether the system can repair, revise, and explain the UI after the first version is wrong.Most users do not ask for the perfect thing on the first try. They refine:
- “Actually break that down by region.”
- “Remove finance-only fields.”
- “Use a table, not cards.”
- “Add a required approval step.”
- “Make this usable on mobile.”
If your architecture cannot preserve intent, state, and provenance across revisions, your feature collapses into re-generation. That means users must restate context, and the system re-creates brittle artifacts each turn.
Notion’s product direction is relevant here. Notion succeeded because documents, databases, and blocks are mutable, composable primitives. Any AI layer that operates on top of such a system can revise structure because the substrate is stable. If your generated UI has no stable intermediate form, you cannot revise it safely.
Mistake four: they ignore observability because the output is visual. This is the hidden killer.A generative UI failure often looks acceptable in the screenshot but wrong in execution:
- wrong data source
- unauthorized field surfaced
- impossible filter combination
- silent tool failure hidden by fallback copy
- inaccessible component tree
- broken mobile layout
- runaway token usage on revision loops
Charity Majors has spent years arguing that observability is about understanding systems behavior, not collecting logs for their own sake. Generative UI is exactly that kind of system. You need traces across prompt, tool call, policy check, component selection, render tree, user correction, and final action. Without that, you cannot separate model error from product design error from infrastructure failure.
The failure pattern resembles incidents in other AI-enabled systems: the visible output is downstream of several opaque decisions. By the time support tickets arrive, the evidence is gone unless you intentionally captured it.
The teams that miss this end up debugging screenshots in Slack.
04 THE FRAMEWORK
The approach that actually works is to treat generative UI as a constrained rendering pipeline with explicit product contracts.
Not “the AI builds the interface.”
More precisely: the AI proposes a structured UI plan inside a governed action space, and the runtime renders only what passes contract checks.
That sounds less magical. It is also what survives contact with production.
Here is the framework.
1. Define the unit of generation before you choose the model
Do not start with “generate a page.”
Start with the smallest stable artifact your system can safely reason about. In practice, this is usually one of four units:
- Block — a chart, form section, table, approval card, KPI tile
- Flow step — one state in a user workflow
- View schema — a structured page description without implementation code
- Task plan — a semantic plan that later resolves to one or more views
For most Series A–C products, the right unit is the view schema, not raw code and not whole apps.
A good schema includes:
- data dependencies
- permitted component types
- layout constraints
- user actions
- validation rules
- empty/error/loading states
- analytics events
- accessibility requirements
- version metadata
This is the crucial move. You are not asking the model to create UI. You are asking it to fill in a typed plan.
Google’s generative UI research and Vercel’s AI SDK patterns both point in this direction, even if they use different abstractions. The practical lesson is the same: put a machine-readable layer between language understanding and frontend rendering.
If your team cannot write down the schema, you are not ready to ship generative UI.
2. Build a machine-readable component contract
Most design systems stop at Storybook docs and TypeScript props. That is insufficient.
A model needs a component catalog with semantic usage guidance, not just implementation signatures.
For each generative component, define:
- component name
- purpose: what job it performs
- required inputs
- forbidden contexts
- state behavior
- accessibility rules
- responsive behavior
- editable vs fixed properties
- compatible siblings
- event outputs
- cost profile: cheap, moderate, expensive to render or compute
For example, a `CohortRetentionChart` component should declare:
- requires time-series retention dataset with cohort axis
- invalid for fewer than 2 cohorts
- mobile collapses legend into drawer
- supports export action only if user has `report.export`
- requires alt summary text for accessibility
- expensive query path above 24 months unless pre-aggregated
This is where teams usually realize they do not actually have a design system. They have a component library.
Figma and Shopify are useful references here. Figma’s product architecture and Shopify’s extensive public work on platform surfaces both reflect a design philosophy where primitives matter more than one-off screens. Generative UI depends on that same maturity. If your components are not composable and predictable, the model will expose every inconsistency you’ve tolerated internally.
A practical threshold: keep the initial generative catalog under 25 components.
More than that, and model selection quality drops before your evaluation system catches up.
The first milestone is not “support all UI.” It is “support a narrow set with high reliability.”
3. Separate semantic planning from rendering
This is the architectural hinge.
Use one stage to produce the semantic plan and another to render it. Do not let the model emit executable UI directly into your runtime.
A clean pipeline looks like this:
- User intent arrives
- Intent parser extracts goals, entities, constraints
- Policy layer filters what is allowed
- Planner generates view schema
- Validator checks schema against contracts
- Data resolver maps schema to approved tool calls
- Renderer instantiates approved components
- Telemetry records every decision edge
- User edits feed back into plan deltas, not full regeneration
That gives you three benefits immediately.
Auditability. You can inspect the schema and see why the system chose a table over cards. Recoverability. If rendering fails, you can repair at the schema level. Policy enforcement. You can reject illegal constructs before anything reaches the client.Cloudflare is a strong architectural reference point in spirit. Their engineering writing consistently emphasizes explicit boundaries, edge control, and defensive systems design. Generative UI needs the same mindset. The planner can be probabilistic. The policy and rendering layers cannot be.
4. Treat tools as product capabilities, not backend helpers
Tool calls are where generative UI quietly becomes product infrastructure.
Every tool available to the model is a capability exposed to end users through language.
That means tools need product-grade design:
- narrow purpose
- typed inputs
- explicit auth
- deterministic outputs where possible
- cost guardrails
- retry semantics
- user-visible failure messages
A bad tool surface causes bad UI generation because the planner can only reason with the verbs you give it.
For example, compare these two tool sets.
Bad tool catalog
- `run_sql`
- `fetch_data`
- `create_resource`
- `update_record`
Good tool catalog
- `get_monthly_revenue_by_region`
- `list_approvable_expense_reports`
- `create_customer_health_view`
- `add_required_field_to_intake_form`
The first catalog is backend-centric. The second is product-centric.
HashiCorp offers a useful product lesson here. Terraform worked because it raised infrastructure actions into a declarative, reviewable language. Generative UI needs an equivalent move: expose domain-level actions the system can safely reason about, not generic escape hatches.
If you keep one generic query tool available “for flexibility,” the model will overuse it. That becomes your new legacy interface.
5. Put hard budgets on autonomy
This is where senior teams differ from ambitious teams.
They decide in advance what the model may do autonomously, what requires confirmation, and what is forbidden.
Use three autonomy tiers:
Tier 1: render-only
- select layout
- choose components
- bind approved data
- change labels and arrangement
- no mutations
Tier 2: reversible configuration
- save user view
- create dashboard
- add filter preset
- modify form draft
- everything must support undo
Tier 3: operational mutation
- create workflow
- change permissions
- publish forms
- trigger notifications
- write production config
- always require explicit confirmation and audit trail
Most teams should spend 6 to 12 months in Tier 1 and selective Tier 2.
Skipping this sequencing is the fastest way to create trust failures.
The reason is behavioral, not technical. Users calibrate product trust from small interactions. If the system repeatedly renders useful views and safely saves drafts, users will later grant permission for larger actions. If the system prematurely modifies live workflows and gets one high-visibility decision wrong, trust collapses.
This is consistent with product patterns from Stripe, GitHub, and Linear: systems that earn user trust make consequential actions explicit and reversible.
6. Instrument the full decision chain
Do not launch generative UI without an observability model that spans the entire flow.
Minimum telemetry per request:
- user prompt
- parsed intent
- model version
- selected tools
- tool latency
- tool errors
- policy rejections
- generated schema
- schema validation failures
- rendered component tree
- frontend hydration errors
- user edits
- user acceptance or abandonment
- token usage
- wall-clock latency
This sounds heavy. It is mandatory.
DORA’s four key metrics — deployment frequency, lead time, change failure rate, and time to restore service — are still relevant, but they are insufficient here. You also need generation acceptance rate, revision depth, policy rejection rate, and unsafe render incident count.
A practical benchmark for an internal beta:
- median time to first useful render: under 5 seconds
- p95 under 12 seconds
- first-render acceptance rate: at least 40%
- accepted-after-one-revision rate: at least 70%
- unsafe render rate: effectively 0 for permissioned data exposure
Those numbers are practitioner thresholds, not industry standards. But they force the right conversation. If the system is fast but constantly revised, your planner is weak. If it is accurate but slow, your tool graph is too expensive. If it is both fast and accurate but rarely used, your product surface is wrong.
Netflix’s engineering culture is relevant here. Their public writing repeatedly emphasizes paved roads and operational metrics. Generative UI needs its own paved road. If every team invents its own traces and success criteria, you will not know whether the feature is improving.
7. Design for revision, not just generation
The best user-built features feel editable, not magical.
That means the runtime must preserve the generated artifact as structured state the user — and system — can iteratively refine.
Two implementation rules matter.
Rule one: every generated artifact needs a stable ID and provenance. You should know:- which prompt created it
- which schema version it used
- which components were selected
- which tools supplied data
- which user edits modified it after generation
This reduces latency, preserves user trust, and massively improves debuggability.
Notion and Figma both illustrate the product value of structural editability, even outside generative UI. Systems that represent content as mutable blocks can absorb AI assistance cleanly. Systems that rely on opaque generated artifacts cannot.
8. Keep human-designed affordances where they matter most
There is a category error in some generative UI thinking: if the model can generate anything, everything should be generated.
Wrong.
Certain surfaces should remain product-owned and static:
- onboarding
- billing
- permissions
- destructive actions
- compliance flows
- account recovery
- enterprise admin controls
These surfaces encode trust, legality, and operational safety. Letting the model improvise them is not leverage. It is negligence.
The right question is not “What UI can AI generate?”
It is “Which user jobs benefit from dynamic composition without eroding trust?”
For most B2B products, the sweet spot is:
- analytics views
- workflow drafts
- internal ops tools
- configurable forms
- reporting surfaces
- knowledge work canvases
That is enough opportunity to justify the investment.
You do not need AI-generated settings pages to prove you are forward-looking.
9. Staff it like a platform, not a feature squad
A generative UI initiative fails when it sits as a feature request inside one product team.
It needs a small cross-functional platform group with clear ownership of:
- schema contract
- component catalog
- policy layer
- tool standards
- evaluation harness
- telemetry
- design system compatibility
A realistic initial team is 4 to 7 people:
- 1 staff-level frontend/platform engineer
- 1 backend/tooling engineer
- 1 applied AI/ML engineer
- 1 product designer with systems sense
- 1 PM who can narrow scope aggressively
- optional: security engineer and data engineer part-time
This is not a “two engineers and a prompt” project if it touches production workflows.
The upside is leverage. Done right, this team does not ship one feature. It creates a reusable product capability.
That is where the ROI comes from.
10. Evaluate with production scenarios, not benchmark prompts
Most teams test generative UI with hand-curated prompts from internal champions.
That is useless after week two.
Your evaluation set should include:
- ambiguous prompts
- underspecified requests
- adversarial permission asks
- contradictory constraints
- bad data cases
- mobile render cases
- slow tool paths
- interrupted sessions
- revision chains over 3 turns
Include real support tickets and product requests as evaluation seeds.
A good rule: if a scenario has ever appeared in a customer success escalation, it belongs in your evaluation harness.
GitHub, Stripe, and Cloudflare all have public engineering cultures centered on production realism over toy abstraction. Generative UI deserves the same rigor. If your eval set is cleaner than your customers, your launch metrics will lie to you.
05 STRATEGIC TAKEAWAY
Generative UI is a platform decision disguised as a feature decision. If you apply this framework, you stop asking whether the model can build interfaces and start building a governed rendering layer that turns user intent into safe product surface area. If you do not, the cost arrives within one or two quarters as support load, trust erosion, and a backlog of brittle exceptions. For a CTO planning this quarter, the real choice is whether to invest 2–3 months in contracts, tools, and telemetry now or spend the next 12 months containing a feature that looked impressive in a demo and became unmaintainable in production.
06 IMPLEMENTATION ANGLE
Start with one narrow job, one data domain, and one reversible outcome.
A strong first use case is not “build any app.” It is something like: “Let operations managers create custom reporting views from natural language using approved metrics and filters.” That gives you bounded data, a limited component set, and low mutation risk. Ship with fewer than 25 components, fewer than 15 tools, and a hard rule that all saved outputs are editable drafts. related topic
On the stack side, the practical architecture today is straightforward: a typed schema layer, tool-calling orchestration, a policy service, and a deterministic renderer in React or your native frontend framework. Vercel’s AI SDK patterns are useful for model-tool-component flows. CopilotKit is useful if you want an opinionated agent-to-UI bridge. But neither removes the need for your own contracts, validation, and telemetry. The hard part is not transport. It is product governance.
Team-wise, assign one staff-level owner who can cut across frontend, backend, and AI concerns. If no one on your team naturally spans those boundaries, that is the staffing signal to act on before the roadmap expands. This is also where Amplify can help engineering teams scale: not by replacing product judgment, but by helping you hire the platform-minded engineers who can turn a promising AI feature into an operational capability.



