Wire your prototype to a live LLM endpoint so usability tests exercise variable outputs, real latency and genuine failure states. Static happy-path mocks systematically mislead AI-feature testing — participants react to your best-case screenplay, not to the actual distribution of things the model will do to them.
Workflow area: Figma AI & Prototyping · Tier: Advanced · Hands-on time: ~45 minutes
A conventional prototype fakes its backend and loses nothing: the confirmation screen always confirms. Fake an AI feature's backend and you lose the entire phenomenon under test. The mock shows one perfect response at zero latency; the shipped feature streams variable-quality answers after an uncomfortable pause, sometimes hedging, sometimes wrong, occasionally refusing. Participants who "loved the assistant" in a mocked test were rating your copywriting. Figma Make closed the gap: a prototype can now call a real model with your real system prompt, which means your test sessions finally sample the same distribution your users will live in — including the sessions where the model embarrasses itself, which are the sessions you learn from.
Define the behavior you're testing before wiring anything. Write down the two or three questions the prototype must answer: Do users notice the citation chips? What do they do during a 6-second generation? Does the refusal state read as safety or brokenness? These questions drive the system prompt, the seeded scenarios and the test protocol — wiring without them produces an impressive demo and no findings.
Build the shell in Figma Make from your designed frames. Prompt Make with your static frames as the source and the interaction contract stated explicitly:
Turn this design into a working prototype of [FEATURE]. The
AI-response area must be wired to a real model call, not canned
text. Requirements:
1. Input: [chat box / inline action / madlib — per the design].
2. While waiting: show the designed loading state (streaming
indicator after 400ms, skeleton before).
3. Render model responses with: [citation chips / hedge banner /
feedback buttons — per the design].
4. Include a visible "Stop generating" affordance.
5. On API error or timeout (>15s): show the designed failure
state, not a blank or a spinner forever.
Use the design system components in the file. Production code is
out of scope — this is a test instrument.
Install the feature's real system prompt — this is the fidelity core. The model behind the prototype must behave like the feature, not like a helpful generalist. Write the system prompt with the feature's role, tone (from your pb-27 voice system), capability boundaries and refusal rules, and iterate on it until responses feel like your product. If the production feature will use retrieval, approximate it: paste representative source content into the prompt context so answers cite the kind of material the real feature would.
Seed the failure states deliberately. Left alone, a strong model succeeds too often to test your failure design. Force the distribution: add prompt rules that trigger refusals on defined topics, prepare test tasks that hit the feature's genuine weak spots, and if needed script one deterministic failure (a timeout you inject, a scenario the context can't answer) so every participant meets at least one non-happy path. A prototype that cannot fail cannot test failure UX — build the failure in.
Pilot against variance before real participants. Run your own tasks through five times. You're checking: does response variance stay inside what the UI handles (length overflow, weird formatting, markdown the renderer chokes on)? Do latency and streaming behave? Does the seeded failure fire reliably? Fix the shell's tolerances now — a rendering bug discovered mid-session costs you the participant.
Test with a protocol built for non-determinism. Every session will differ, so define task success over outcome classes, not exact outputs: "participant reaches an answer they can verify" rather than "participant sees response X." Log which response class each participant actually got (good / hedged / partial / failed) next to their behavior, and brief the moderator for live-model surprises: when the model fails in an unplanned way, follow the participant's reaction — that moment is data, usually the best in the session. Full protocol treatment is pb-50; this playbook gets the instrument right.
Live-wired prototypes send participant input to a real API — tell participants an AI model processes their input, keep API keys out of shared prototype links, scrub any client or personal data from prompt context, and use your organization's approved API tenant for anything non-public.
Test the distribution, not the demo. A prototype wired to a real model — with the feature's true system prompt and at least one failure you made sure would happen — is the only instrument that tells you how your AI feature's UX performs when it isn't being flattered.