Architecture Strategy21 October 20268 min read

Decide Whether the User Should Wait

Some model calls are short enough to block on. Writes and uncertain calls are not. Choose a wait, a progress state, or a later result.

VishalFounder & Engineering Lead
FIGURE 1.0
EDITORIAL REFERENCE
A person working through a problem on a laptop
CONTEXT:A person working through a problem on a laptop
REFERENCE:John Schnobrich
ON THIS PAGE (7 SECTIONS)
EXECUTIVE BRIEFING · KEY TAKEAWAYS
  • ✓A user-facing wait is a product limit, not only a timeout in a config file.
  • ✓Classification and a short draft can be synchronous if you cap the time and have a fallback.
  • ✓Anything that writes, sends, or may be retried belongs in a job with a status.
  • ✓Event-driven workflows are how the job runs. This decision is whether the person is blocked.

The button says Generate and then nothing happens for twenty seconds. Some people click again. Some leave. The model often answers in four seconds and sometimes not at all. The interface promised a single wait for a single answer. The dependency does not keep that promise.

Decide from the user’s next action. If they cannot proceed without the result, and the result is usually fast, a wait with a visible limit can be honest. If they can keep working, or the result is a write that must not be duplicated, accept the request and show a status. Move Slow Work Out of the HTTP Request is the server half of that choice. Event-Driven AI Workflows is how a long chain survives. Neither choice should be an accident of whichever HTTP client timeout was copied from a sample.

A simple split

SituationUser experienceServer shape
Label or route an item the user is looking atWait, with a cap, then show unsureSynchronous call, fallback to a queue or a person
Draft text the user will editWait only if it is usually short; otherwise show a placeholderSync with a timeout, or a job that fills the draft
A result that posts, sends, or paysAccepted, then a statusJob, idempotent, with an owner
A batch over many recordsStarted, with a count of done and failedWorker, not a request
The model is downA clear failure or a queued retryDo not spin. Record the state

The cap has to be a number you chose for this screen, not the provider’s maximum. When the cap hits, the UI needs a sentence and a next step: edit by hand, try later, or leave it queued. A spinner with no end is the same as a crash that takes longer.

Illustrative scenario

This scenario is illustrative. A support tool suggests a category while the agent reads the ticket. The suggestion waits at most a short, fixed budget. If it misses the budget, the dropdown stays manual and the suggestion is marked skipped. Nobody retries three times inside the keypress. Separately, a nightly summary of tickets is a job. The agent does not wait for it. They open it in the morning, and a failed night is a status on the report, not a loading state from yesterday. The two calls use the same model vendor and opposite waiting decisions, because the user’s need is different.

Checklist

  • Name the decision the user is blocked on, if any.
  • Set a wait budget for synchronous calls and a fallback when it is missed.
  • Move writes and batches to jobs with status.
  • Make a second click safe. It must not start a second write.
  • Show failure as failure. Do not leave a spinner on a dead request.
  • Measure how often the wait budget is hit. If it is often, the call is not a wait. It is a job.

Questions that usually come next

Should we stream tokens to feel faster?

Streaming shows progress for text the user is reading as it arrives. It does not make a write safer, and it still needs an end state when the stream fails halfway. Use it for drafts the user is watching. Do not use it to avoid a status for a job.

What if the business wants every answer immediately?

Then the budget and the fallback are the product conversation. Immediate is a target you measure. A blocked UI with no cap is not immediate. It is indefinite. Ship the cap, show how often you miss it, and move the misses to a job or a narrower prompt.

Direct answers

Does streaming remove the need for a job?

Streaming is a way to show a draft that is already running. Writes and batches still need a durable status, because a stream can fail halfway.

What if stakeholders want every response to feel instant?

Set a budget, measure misses, and give those misses a fallback. An uncapped spinner is not an instant response.

ACADEMIC & INDUSTRY CITATIONS

References & Prior Art

REF 01Internet standard

RFC 9110: HTTP Semantics

R. Fielding, M. Nottingham, J. Reschke • IETF (2022)

Source
VERIFIED CONTRIBUTOR

Vishal

Founder & Engineering Lead

Vishal leads engineering at Vasiva, establishing merge gates, deterministic verification patterns, and human-in-the-loop review architecture across production AI systems.

CURATED ARCHIVE

Continue Reading

Contextually relevant engineering logs and production architecture notes.

SYSTEM ADVISORY

Have an AI workflow or complex system worth exploring?

Work directly with the senior engineers who designed and shipped these systems. Zero vendor lock-in, deterministic architectures, and first-party audit integrity.

Evaluate the opportunity