DEV Community

Cover image for Agentic vs. deterministic: I built the same n8n workflow both ways. The agent lost.
Felix
Felix

Posted on

Agentic vs. deterministic: I built the same n8n workflow both ways. The agent lost.

šŸ‘‹ Hey dev.to Community,

A couple weeks back I shared a workflow that uses the easybits Extractor to classify uploaded invoices (PDF, PNG, JPG), route them to the right Google Drive folder, and flag low-confidence documents to Slack for review.

A lot of comments came in asking the same thing: why not build this agentic?

Fair question. So I built the same workflow again – this time with an AI Agent node, Gemini as the chat model, and seven tools hanging off it (six "move to folder" tools + one Slack alert). The agent sees the file ID, decides the category, and calls the matching tool.

It works. But after building it, here are the four reasons I'm sticking with the deterministic version.

šŸŽ² Non-determinism where I don't want it

Classification is a solved deterministic task. Adding an LLM in the middle means the same invoice can route differently on two runs. For a process that's supposed to be boring and reliable, that's a downgrade.

šŸ” Debuggability collapses when it fails

When the deterministic workflow breaks, an IF node either fires or it doesn't – I can tell you exactly why in 10 seconds. When the agent misroutes, I'm reading execution logs trying to reverse-engineer what the model was reasoning about. The tool calls are visible, sure, but the why behind a wrong call is a judgment about a black box.

šŸ“Š You lose real confidence scoring

The Extractor returns null when it genuinely can't extract a field – that's a clean signal I can branch on with a single IF node. An agent's self-reported confidence is vibes. It'll happily tell you it's 90% sure on something it got wrong.

āš ļø More failure modes, zero capability gained

Building this I hit tool loops, missing $fromAI parameters, schema mismatches, binary-passing issues between agent and tool nodes. Every one of those is a new thing that can break in production – and at the end, the output is the same file in the same folder.

My take: agentic makes sense when you actually need reasoning – ambiguous decisions, multi-step planning, or work that genuinely can't be expressed as a graph. Invoice classification is none of those.

šŸ“ Both workflows if you want to compare:

Agentic version: https://github.com/felix-sattler-easybits/n8n-workflows/blob/2e9153b83d94fb1200a130f2c3b10a21298ed49b/agentic-document-classification-workflow/agentic_document_classification_workflow.json

Deterministic (easybits Extractor) version: https://n8n.io/workflows/14960-classify-invoices-and-route-them-to-google-drive-with-easybits-and-slack/

āš™ļø easybits Extractor setup (for the deterministic one):

Cloud users: easybits Extractor is available – search in the node panel

Self-hosted: Settings → Community Nodes → install '@easybits/n8n-nodes-extractor'

Create a pipeline at extractor.easybits.tech with two fields: document_class and confidence_score

Free tier covers 50 requests/month.

For those of you running agents in n8n – where have they earned their keep for you, and where have you found yourself ripping them back out? Genuinely curious what the line looks like for other people.

Best,
Felix

Top comments (0)