The trap I see repeatedly: a team treats workflow automation like a software purchase when it's actually an infrastructure commitment. They evaluate platforms by how fast they can ship the first version, not by what happens when the workflow is handling live customer data at 2:00 PM on a Tuesday. By the time they realize the tool can't escape its own sandbox, can't run inside a private network, or can't absorb a tenfold volume spike without rewriting the budget, they've already built thirty production workflows. Now migration means reconstructing business logic from screenshots and memory.
A tool that scores well on speed but fails on lock-in and cost slope is a loan, not a purchase.
I've done those migrations. They are never fun. The only way to avoid them is to decide on criteria that matter over a three-year horizon, not a three-day proof-of-concept. I use four axes, one curve, and a single midnight question. That's the framework.
I evaluate every automation platform on four axes. You can map any tool against them in five minutes.
Lock-in, Escape Hatch, Hosting Model, and Cost Slope. Score every candidate on these four dimensions — anything that scores poorly on more than one is a future migration.
Lock-in is the simplest: who owns your logic? If the vendor disappears tomorrow, can you export your workflows and run them somewhere else? Zapier and Make own your logic in their proprietary visual formats. You can see it, but you can't run it elsewhere without a full rebuild. n8n stores workflows as JSON. It is portable, diff-able, and you can check it into git. Custom orchestrators are just code; you own them entirely.
The severity of lock-in depends on how many workflows you have. One Zapier automation is a minor liability. Forty interconnected automations, each calling the next through native app steps, is a platform migration that will consume a month of engineering time.
Escape Hatch is what happens when the visual builder hits a wall. Every no-code tool eventually faces a payload that needs a recursive loop, a custom JWT validation, or a regex transformation that would make a visual node cry. n8n gives you Code nodes that run full JavaScript or Python, with access to the incoming data from every previous node. Make and Zapier offer code steps, but they run in restricted sandboxes with timeout limits, no package imports, and no access to the full execution context. Custom solutions are nothing but escape hatch; the trade-off is you build every retry policy and secret injector from first principles.
Hosting Model is about where the runtime lives. Zapier and Make are SaaS-only. Your data touches their servers, period. There is no air-gapped option. n8n offers a Cloud tier starting at EUR 24 per month, but also a Community Edition you can self-host on a VPS, Kubernetes, or even a Raspberry Pi. That matters when your CRM data can't leave a VPC, when a third-party API only whitelists your static IP, or when compliance requires data residency in a region the SaaS vendor doesn't offer.
Cost Slope is the trajectory from free trial to production load. Most teams model cost at their current volume. I model it at 10x and 100x. The shape of the pricing curve matters more than the first-month invoice. A tool that is cheap at rest and expensive in motion will punish growth.
These four axes are non-negotiable. A tool that scores well on speed but fails on lock-in and cost slope is a loan, not a purchase.
There's a volume threshold where the tool that felt perfect in the demo becomes the tool you want to throw out the window. I call this the demo curve.
Most workflow tools look fine until you cross roughly 1,000 executions per day. Below that, convenience wins. Above that, execution economics and operational control win.
At a few hundred executions per day, Zapier is genuinely pleasant. You connect a trigger, add a filter, post to Slack, and you're done in twelve minutes. The cost is negligible. The ops overhead is zero. This is the left side of the curve, and it is a real advantage. I have no ideological opposition to Zapier; I have an opposition to using it for the wrong volume.
At 1,000 executions per day, the picture shifts. If your average workflow has three steps, you're generating 3,000 billable tasks on a per-task pricing model. Every webhook, every conditional branch, every iterator burns credits. You are now in spreadsheet territory, watching a usage counter that resets monthly and panics on the 28th.
At 10,000 executions per day, a SaaS-only tool is a budget item. You are either on an Enterprise plan—where pricing is opaque and requires a sales call—or you are paying a usage bill that rivals a mid-range salary. Worse, you are capped. Rate limits, concurrency limits, and payload size limits that were invisible at low volume now block your pipeline.
At 100,000 executions per day, a SaaS-only tool is no longer an automation platform; it is a recurring tax on your revenue.
At 100,000 executions per day, a SaaS-only tool is no longer an automation platform; it is a recurring tax on your revenue. This is the right side of the demo curve, and it belongs to self-hosted or custom infrastructure.
n8n self-hosted breaks this curve. The Community Edition has no per-execution license fee. You pay for the server, the PostgreSQL database, and your time. On a modest VPS, you can comfortably handle 10,000 executions per day. Push to 100,000 and you need queue mode, horizontal scaling, and a reverse proxy—but you're paying for compute, not an ever-growing task tax. n8n Cloud starts at EUR 24 per month and scales predictably, but for true high volume, self-hosted is the economic answer.
Custom orchestrators are the flat-line option, too. Upfront development cost is high, but the marginal cost per execution is just compute. They make sense when you're already deep on the right side of the curve and the workflow is the product, not a utility.
The mistake is assuming you'll stay on the left side. If your business grows, your automation volume grows with it. Pick a tool whose cost slope won't punish that growth.
Here's how the four options stack up when you put them through the axes.
Zapier is the fastest path from idea to running workflow. It connects to thousands of apps, abstracts away all infrastructure, and presents the cleanest UI for non-technical users. The lock-in is total: your logic lives in Zapier's editor and can't be exported to run elsewhere. The escape hatch is a Python or JavaScript code step that executes in a tightly restricted environment—no external packages, strict timeouts, and limited memory. Hosting is strictly SaaS; your data transits their systems. Cost slope is linear and steep. I use Zapier only when the workflow is temporary, the team is purely no-code, and volume is guaranteed to stay under a few hundred executions per day.
Make (formerly Integromat) sits between Zapier and n8n on flexibility. Its visual builder is more powerful for data manipulation, and it handles branching logic and iterators better than Zapier. But it's still SaaS-only, still locked-in, and its operations-based pricing can surprise you. A single execution that iterates over an array of twenty items can consume twenty-one operations. The escape hatch exists but is limited. I see Make used heavily by agencies building client automations because the visual logic is easier to hand over than code. For internal long-running infrastructure, I find it fragile.
n8n is my default for teams that have outgrown the left side of the demo curve but don't yet need a dedicated platform engineering team. It offers over 400 built-in integrations, a visual node-based editor, and—crucially—Code nodes that run full JavaScript or Python with access to the full execution context. Workflows are JSON you can version-control. You can start on n8n Cloud for EUR 24 per month and move to self-hosted Community Edition when data residency or execution volume demands it. The cost slope is flat in self-hosted mode; your infrastructure bill grows with compute, not task count.
Custom orchestrators—Temporal, Airflow, Dagster, or even a purpose-built worker fleet—are the right call when the workflow is the product. You get zero lock-in, infinite escape hatches, and full control over hosting and scaling. The trade-off is that you build and operate everything: retry logic, observability, secret management, queue semantics, and deployment pipelines. I reach for custom only when there's a platform team ready to own it, or when the business logic is so specific that wrapping it in a generic automation tool creates more friction than it saves.
| Axis | Zapier | Make | n8n | Custom |
|---|---|---|---|---|
| Lock-in | Total | Total | Portable (JSON/git) | None |
| Escape hatch | Sandbox code | Sandbox code | Full JS/Python | Full code |
| Hosting | SaaS only | SaaS only | Cloud or self-hosted | Anywhere |
| Cost slope | Linear per task | Per-operation, can spike | Flat (self-hosted CE) | Upfront dev, flat ops |
That table is the decision engine. If you need to move fast and don't care about the right side of the curve, the left side of the table is fine. If you need to survive the right side, move right.
After cost and lock-in, I run every tool through the 3AM test.
When a critical workflow breaks at 3:00 AM, what breaks, and who can fix it? If the answer involves a support ticket and a status page refresh, you've outsourced the part of your business that wakes you up.
With SaaS-only tools like Zapier or Make, the failure modes are external: the vendor's API returns a 503, or a third-party service changes its rate limit and your operations queue freezes. Your playbook is limited. You can't SSH into the runtime. You can't patch the retry logic. You can't force a raw cURL to see exactly what the upstream API returned. You file a ticket and wait.
With self-hosted n8n, you own the failure mode. If a webhook source starts firing faster than your instance can ingest, you can see the backlog in the execution queue. You can restart the container, inspect the PostgreSQL execution table, or temporarily route traffic through a reverse proxy while you tune rate limits. You are the on-call engineer, but you have a toolbox.
With a custom orchestrator, you also own the failure mode, and you should have structured logging, distributed tracing, and circuit breakers already in place. If you don't, the 3AM test fails before the tool choice even matters.
The 3AM test doesn't mean self-hosted is always better. It means you should know, in advance, what your incident response looks like. If your team has no one who can read a Docker log, self-hosting is a liability, not an asset. In that case, n8n Cloud or a SaaS tool is the safer call because the 3AM fix is someone else's pager.
Despite everything I've said about lock-in and cost slopes, SaaS-only tools still win in specific situations:
The key is to be honest about why you're choosing it. "We don't have the headcount to operate infrastructure" is a valid reason. "It's what I already know" is not a strategy.
Given the four axes, the demo curve, and the 3AM test, I default to n8n for most teams building production workflows. Here's why.
The fair-code license means I can inspect the source, self-host without negotiating a sales team, and avoid the surprise of a vendor changing terms out from under me. The 400 built-in integrations cover the standard SaaS landscape, and when they don't, the HTTP Request node plus a Code node connects to anything with a REST API. I can build visually for the simple paths and drop into JavaScript or Python when the payload needs surgery. The workflow JSON is readable in a text editor and diffable in pull requests, which means I can apply the same code review discipline to automation logic that I apply to application code.
But "default" is not "universal." I don't default to n8n when:
Self-hosting n8n is not free. It is only license-free. If you run it in production, you are now operating a service.
If you run the Community Edition in production, you are now operating a service. That means PostgreSQL, not SQLite. SQLite is fine for testing, but it will lock up under concurrent production loads. It means a reverse proxy—Caddy, Nginx, or Traefik—handling SSL termination. It means pinned Docker versions so an automatic pull doesn't introduce a breaking change at midnight. It means backups of both the database and the /home/node/.n8n directory, tested on a schedule.
I've seen teams skip these steps because "it's just automation." Then they lose a day's execution history because the database locked, or they can't restart after an update because the migration path broke. Self-hosting without operational discipline turns n8n from a cost saver into a liability.
If you aren't willing to write a runbook for updates and backups, don't self-host. Use n8n Cloud. The EUR 24 starting price is cheaper than a weekend outage. Cloud gives you automatic updates, managed SSL, and included backups. You trade control for convenience, which is exactly the trade you should make when you lack operations capacity.
If you're evaluating tools or reconsidering your current stack, here's the checklist.
Log into your current platform and find your daily execution count. If it's under 500 and flat, you probably don't have a problem. If it's over 1,000 and growing, plot the cost at 10x volume. If that number makes you wince, you're already on the wrong side of the demo curve.
Pick your most critical workflow and ask: if it stops working right now, what's the playbook? If the answer is "email support and hope," you have a single point of failure you don't control.
Export your most complex workflow. If you can't read the export format in a text editor and understand the logic, you're renting your business processes.
Self-hosting n8n is the right economic choice for high volume, but only if someone owns the server. If no one does, stay in the cloud — either n8n Cloud or a SaaS tool.
Pick the tool that matches where you're going, not where you are. The migration is always more expensive than the decision.