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 docReal 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.
