Back to notes
AI product designGuide5 min

AI products need decision surfaces, not just chat boxes

Model output becomes useful when users can inspect the decision, change the inputs, and see what will happen next.

Open source doc

Real workflow example

A sales team asks for an AI feature that can "chat with leads." The first prototype answers questions, but it does not help the team decide which leads to pursue, what is missing, or who owns the next step.

A decision surface turns the same AI capability into a usable workflow. The model extracts budget, urgency, product fit, risks, suggested reply, and missing context. The UI shows those fields with evidence, lets the user edit them, and makes approve, assign, request info, and archive actions explicit.

The user is not trapped in a conversation. They are reviewing a decision.

Implementation approach

Convert model output into structured fields, statuses, evidence, and actions. Each field should either support a user decision or explain why the system is uncertain.

Separate suggestions from approved business state. A model can recommend that a lead is high priority, but the CRM should not treat it as approved until a user or trusted automation path confirms it.

Track review outcomes. Accepted, changed, and rejected decisions become the best examples for future evals.

Code or config snippet

const leadDecisionSchema = z.object({
  fit: z.enum(["high", "medium", "low", "unknown"]),
  urgency: z.enum(["now", "soon", "later", "unknown"]),
  missingInputs: z.array(z.string()),
  evidence: z.array(
    z.object({
      field: z.string(),
      quote: z.string(),
      sourceId: z.string(),
    }),
  ),
  recommendedAction: z.enum(["approve", "request_info", "assign", "archive"]),
});

Mistakes to avoid

  • Treating chat history as the product state.
  • Hiding uncertainty inside confident generated prose.
  • Letting model suggestions overwrite approved records.
  • Making the user ask follow-up questions just to find evidence.
  • Failing to record when users changed or rejected the suggestion.

Ready checklist

  • Model output is represented as fields and actions.
  • Evidence is visible beside important decisions.
  • User edits are supported.
  • Approved state is separate from suggested state.
  • Review history is stored.
  • Rejections become eval examples.
Practical note
Sketch the review screen before writing the prompt. If the UI has no place for evidence, uncertainty, and action, the model output will drift back into generic prose.

Use this as an implementation constraint, not just advice. The interface, server code, and validation path should make the same behavior true.

Apply this to a build
Contact
Bring the product pressure, system constraints, and expected business outcome.
Send the desired outcome, users, current bottleneck, stack, and timeline. I will respond with a practical senior engineering path for the build.