Not Every AI Workflow Needs an Agent
(And We Need To Stop Pretending It Does)

Somewhere along the way, the AI ecosystem collectively decided:
“If a workflow has more than 2 steps, it probably needs an autonomous agent.”
And suddenly every architecture diagram started looking like:
- orchestrators
- planners
- memory layers
- tool routers
- reflection loops
- multi-agent systems
- MCP everywhere
- reasoning chains for tasks that a cron job solved perfectly in 2019
At this point I’m convinced some engineers would build a LangGraph pipeline to turn on a light bulb.
The Current AI Stack Situation
There’s this growing tendency in AI engineering where complexity itself is starting to look like innovation.
You’ll see demos like:
“Our autonomous multi-agent cognitive architecture dynamically reasons over tool ecosystems.”
Brother.
It’s calling three APIs.
This is becoming the software equivalent of this meme:
“Task failed successfully.”
GIF:
Task Failed Successfully GIF
And honestly, I get why this happens.
LLMs are magical.
Tool calling is cool.
Agents feel futuristic.
Watching a model “decide” what to do feels intelligent.
But from an engineering perspective, we should probably ask a more boring question more often:
Is this workflow actually uncertain?
Because if the answer is “no,” then you may just be replacing deterministic software with probabilistic software.
And that tradeoff becomes very expensive very quickly.
The Hidden Cost Nobody Talks About
A lot of AI workflows today are doing this:
- User input
- LLM interprets request
- LLM chooses tool
- LLM generates payload
- LLM validates response
- LLM summarizes result
- LLM re-checks reasoning
- Another agent reviews output
- Final answer generated
Meanwhile the actual business logic was:
response = requests.post("/generate_invoice")
This is the modern version of:
“We used Kubernetes because we had two containers.”
GIF:
Kubernetes Overkill Meme GIF
The issue isn’t that agents are bad.
The issue is that reasoning has computational cost.
Every unnecessary reasoning step adds:
- latency
- token cost
- inference overhead
- prompt complexity
- observability problems
- debugging pain
- non-deterministic failure modes
And the scary part?
The system can still look intelligent while silently becoming less reliable.
That “smart orchestration” often becomes:
- harder to test
- harder to reproduce
- harder to scale
- harder to monitor
Which is exactly why many experienced engineers still prefer deterministic systems whenever possible.
If The Path Is Known, Why Rediscover It Every Time?
This realization changed how I think about AI systems completely:
If you already know the workflow, don’t spend tokens rediscovering it.
Example:
Suppose your system always:
- validates customer ID
- fetches billing info
- generates invoice
- sends notification
Why exactly should an LLM decide:
- which endpoint to call
- what payload shape to use
- what order to execute steps
- whether validation is required
…every single time?
That’s not intelligence.
That’s orchestration.
Traditional software solved this years ago.
And honestly?
Very reliably.
Sometimes the smartest architecture decision is:
- fewer prompts
- fewer agents
- fewer abstractions
- fewer reasoning loops
Not more.
MCPs, Tool Calling, And The “Because We Can” Problem
I’ve been experimenting a lot with MCP/tool-calling systems recently.
And they’re genuinely powerful.
But I’m also seeing people use them for things that are fundamentally static.
The workflow often becomes:
LLM → inspect tools → choose endpoint → generate arguments → execute
…when the endpoint was already known beforehand.
At that point the LLM is basically roleplaying as a switch statement.
And yes:
technically it works.
But engineering is not just about whether something works.
It’s also about:
- operational efficiency
- reliability
- predictability
- maintainability
Sometimes direct API orchestration is simply the better engineering decision.
This is where a lot of AI demos diverge from production reality.
Demo architecture optimizes for:
“Look how autonomous this is.”
Production architecture optimizes for:
“Please don’t wake me up at 3 AM.”
GIF:
Production vs Demo Reality GIF
The Industry Is Starting To Notice “AI Slop Engineering”
The term “AI slop” originally became popular around low-quality AI-generated content.
But honestly, it now applies to engineering too.
There’s growing frustration around:
- overengineered AI stacks
- unnecessary agents
- blindly generated code
- systems nobody fully understands
And honestly?
The frustration makes sense.
Because many AI-generated systems look correct at first glance.
But underneath:
- edge cases are missing
- architecture decisions are weak
- abstractions are unnecessary
- debugging becomes painful
One Reddit engineer described it perfectly:
“AI code is creating MORE work for experienced devs.”
That line has been stuck in my head for days.
The Internet Can Now Smell AI Writing Instantly
And honestly, engineering blogs are becoming victims of this too.
You know the style:
- “In today’s rapidly evolving landscape…”
- “It’s important to note that…”
- “Leveraging AI-powered solutions…”
- “This isn’t just X. It’s Y.”
The internet has collectively developed AI-content PTSD.
Which is why I increasingly think the best technical writing today should:
- include opinions
- include tradeoffs
- include failures
- include uncertainty
- include humor
- include real engineering scars
Because humans don’t write like sanitized onboarding documents.
Humans rant.
Humans exaggerate.
Humans make weird analogies.
Humans say:
“We accidentally built a distributed system for a feature used by 14 people.”
And somehow that feels more authentic than perfectly polished AI symmetry.
Agents ARE Useful. Extremely Useful.
Now to be clear:
I’m not anti-agent.
Agents are genuinely transformative when:
- the environment is uncertain
- tools are dynamic
- workflows evolve
- planning matters
- reasoning matters
- exploration matters
Examples:
- research agents
- coding copilots
- deep search systems
- autonomous debugging
- open-ended planning
- multimodal reasoning
These are probabilistic environments.
Reasoning belongs there.
But many backend workflows are not probabilistic.
They’re just pipelines.
And pipelines are fine.
Not every workflow needs:
- memory
- self-reflection
- recursive planning
- multi-agent collaboration
- existential philosophy before calling Stripe API
Sometimes:
if valid:
call_endpoint()
…is peak engineering.
The Engineering Principle I’m Following Now
The more predictable the workflow:
→ the more deterministic the architecture should become.
The more uncertain the workflow:
→ the more reasoning-oriented the architecture can become.
That balance matters a lot.
Because complexity compounds faster in AI systems than people realize.
Every additional reasoning layer:
- multiplies failure paths
- increases observability burden
- creates prompt dependencies
- introduces probabilistic behavior into deterministic systems
And eventually you wake up inside a production incident wondering why four agents debated for 11 seconds before deciding to fetch a JSON object.
GIF:
Confused Math Lady Meme GIF
Final Thought
I think the AI industry is currently in its:
“If all you have is an LLM, everything looks like an agent problem.”
phase.
That phase is useful.
Experimentation is good.
Overengineering is sometimes how the industry learns.
But eventually the ecosystem matures.
And when it does, I suspect the winning systems won’t necessarily be the most autonomous.
They’ll be the ones that best understand:
- where reasoning is needed
- where determinism is better
- where AI adds leverage
- where traditional software still wins
Because sometimes the smartest AI architecture is also the simplest one.
And honestly?
A well-engineered boring pipeline is still one of the most beautiful things in software.





