All articles
August 2, 2025 6 min read

Agents vs workflows: choose the least agency that solves the problem

Fully autonomous agents are seductive in demos and brittle in production. Here's a decision framework — chain, state machine, or true agent — and how to pick the least autonomy that gets the job done.

Written forEngineeringProduct
AgentsArchitectureDesign

There's a principle that would prevent most agent failures if teams adopted it: use the least agency that solves the problem. The industry keeps reaching for a fully autonomous agent when a state machine would be more reliable, cheaper, and shippable this week. (For the conceptual workflow-vs-agent distinction, see that earlier post; this one is the decision framework.)

StartPath fixed?yesUse a workflownoOpen-ended?noUse a workflowyesUse an agent + guardrails
Prefer a workflow; climb to an agent only when the task is genuinely open-ended — and then wrap it in guardrails.

Why fully autonomous agents fail in production

Every degree of autonomy you hand the model multiplies the failure surface. That's not a knock on agents — it's the trade you're making, and it should be deliberate.

  • Compounding errors — each step builds on the last, so a small early mistake snowballs into a confidently wrong result.
  • Non-determinism — the same input can take different paths on different runs, which makes evals and support genuinely hard.
  • Cost and latency variance — a bad plan can 10× your bill and your p95 with no warning.
  • Blast radius — an autonomous agent with real tools can take real, hard-to-reverse actions.

The agency ladder

Think of it as a ladder, and climb only as high as the problem forces you to:

  • Single prompt — one call. If it reliably works, stop here; you've spent no complexity.
  • Chain — a fixed sequence of calls with gates between them (see the prompt-chaining post). Known steps, known order.
  • State machine (FSM) — explicit states and transitions; the model classifies intent and fills slots, your code owns the flow. This is the workhorse for real customer-facing products.
  • True agent — the model decides its own steps and tools in a loop. Only when the path genuinely can't be scripted in advance.

The decision framework

  • Can you write the steps down? → a chain or an FSM, not an agent.
  • Is there a bounded set of states with clear transitions? → an FSM; let the model handle language inside states, not control flow.
  • Is the path truly unknowable until runtime, and worth the operational cost? → an agent, with a capped loop, scoped tools, and full tracing.

Real examples: support triage is an FSM. 'Answer from our docs' is a chain over RAG. Multi-file code changes or open-ended research across an unknown number of sources is where an agent earns its keep. Most production value sits on the lower rungs.

Autonomy is a cost you pay, not a feature you flaunt. Reach for the least autonomous system that solves the problem in front of you.
Building something with LLMs?
I help teams ship GenAI that’s reliable and cost-efficient.
Let’s talk