SSkilvy

Agents are powerful, but not always needed

Agents impress, and there is a temptation to make "an agent" for everything. But an agent is more complex, costlier, less predictable and riskier than an ordinary LLM call. Often a task is solved more simply — with one call or a fixed chain of steps. Understanding when an agent is justified and when overkill is an important engineering decision.

āœ• Agent is overkill • a simple one-off task• one call solves it• a predictable flow āœ“ Agent is justified • a multi-step task• tools and decisions needed• the path is unknown in advance
An agent is justified for multi-step tasks with tools; for the simple it is overkill.

When an agent is overkill

  • A simple one-off task: one LLM call solves it — no agent needed.
  • A predictable fixed flow: if the steps are known in advance and always the same, it is simpler to spell them out explicitly (ordinary code + LLM calls) than to let an agent "decide".
  • Where full predictability matters: an agent is by nature less predictable.

When an agent is justified

  • A multi-step task: solving it needs a sequence of actions.
  • The path is unknown in advance: which steps are needed depends on intermediate results.
  • Tools and decisions needed: get data, perform actions, adapt.
  • Dynamism: the task requires reacting to what is discovered along the way.
How do I decide whether to make an agent or keep it simpler?
A practical filter question: "Are the solution steps known in advance and are they always the same?" 1) YES, the steps are fixed and known to NO agent needed. Spell out the flow explicitly: ordinary code + LLM calls in the right places. For example, "take text to classify via LLM to save the result" is a fixed chain, an agent is overkill. An explicit flow is more predictable, cheaper, more reliable, easier to debug. 2) NO, the path depends on intermediate results, the task is multi-step and dynamic to an agent is justified. For example, "research this topic, find relevant sources, analyze and draw a conclusion" — which steps and in what order depends on what is found; the agent decides along the way. Important considerations against an agent (do not overuse): — Complexity: an agent is harder to build, debug, control. — Predictability: an agent is less predictable — it decides the steps itself, which can go differently than expected. — Cost: an agent makes many LLM calls (the think-act cycle), which is costlier than one call. — Risk: an agent acting with tools autonomously is a source of risks (the safety module). Practical rule: start with the simplest solution. Does one call handle it? Use it. A fixed chain? Spell it out explicitly. Only if the task genuinely requires a dynamic multi-step solution with tools where the path is unknown in advance — build an agent. Do not make "an agent for the agents sake": it is trendy but often overkill and risky. The right question is not "how do I make an agent?" but "is an agent even needed here, or is the task solved more simply and reliably?".

Start simple

A key principle: start with the simplest solution that works. Does one call handle it — use it. Are the steps fixed — spell out the chain explicitly (it is more predictable and reliable). Build an agent only when the task genuinely requires a dynamic multi-step solution with tools. "An agent for the agents sake" is trendy but often overkill, costlier and riskier than needed. Do not overcomplicate unnecessarily.

The cost of autonomy

Remember the cost of being an agent: complexity (harder to build and debug), unpredictability (the agent decides the steps), cost (many LLM calls in the cycle), risk (autonomous actions with tools). These downsides are justified when the task genuinely benefits from autonomy, and unjustified when it does not. A conscious choice of "agent or simpler" saves a mass of problems.

Rule: an agent is justified for multi-step dynamic tasks with tools where the path is unknown in advance. For the simple and predictable — use one call or an explicit chain. Start simple.

🧠 When is it better NOT to make an agent?