For a long time, "low-code automation" meant Zapier or Make and a monthly bill that scaled with how successful your automations became. n8n flipped that economics: it is source-available, runs anywhere Docker runs, and the marginal cost of a million executions is a slightly larger VM. We have shipped n8n as the workflow backbone for fourteen client projects in the last eighteen months. This is what we have learned about running it for real.

A note on where this sits commercially, since most people arrive here while shopping for workflow automation services rather than for a runtime. Those engagements usually cover three things: choosing the orchestration layer (n8n, a managed platform, or plain code), building the integrations between the systems you already run, and operating the result once it matters to the business. This post is about the third, which is the part vendors quote least honestly. If you want the shape of the whole engagement instead, that is our AI automation services work, and RPA vs AI agents covers how to decide which parts of a process should be deterministic and which need judgement.

When n8n is the right answer

n8n is not a replacement for code. It's a replacement for the seam between systems: the part where a CRM event needs to land in a spreadsheet, ping a Slack channel, and create a Jira ticket. Three things make it a fit:

Default mode vs queue mode

n8n's default execution mode runs everything in the main process. That's fine for ten executions an hour and miserable above that: one slow webhook stalls every other workflow. Switch to queue mode the moment you cross into hundreds of executions a day:

Setup is environment-variable level: EXECUTIONS_MODE=queue, point at Redis, run n8n worker on as many machines as you need. Scaling out is then a Compose replica count.

The database choice that bites everyone

Default SQLite works until it doesn't, and the failure mode is silent slowness, not a clean error. We switch every deployment to Postgres on day one. Migration is straightforward with the official export/import scripts, and the performance gain on workflow listing and execution history is dramatic past a few thousand stored runs.

Secrets: stop pasting tokens into the UI

n8n has a credentials system that encrypts secrets at rest using N8N_ENCRYPTION_KEY. Three rules we enforce on every deployment:

Workflow versioning

The single biggest weakness of low-code tools is that "the workflow" is a row in a database that anyone with the editor can change. We solve it with two practices:

Observability

The built-in execution log is fine for debugging a single run and useless for spotting trends. We pipe n8n.execution.finished events into the same observability stack as the rest of our services, usually Loki for logs and Prometheus for metrics. The three dashboards every n8n deployment should have:

The eight integrations we ship most often

Across our client work, these account for roughly 80% of the node usage:

What we still write code for

n8n is not the right place for: anything that needs sub-100ms latency, anything that runs millions of times a day with the same shape (write a worker instead), or anything where the failure mode is "lost money." Use it for the connecting tissue, not the load-bearing walls.

The honest summary: n8n replaces three Zapier seats, two manual ops engineers, and most of the "can someone write a quick script for…" Slack messages in a small team. It is not magic. It is a well-engineered piece of glue.

Starting points

Related reading