writing
n8n vs. Custom Code: A Founder's Guide to Automation Plumbing
When you're wiring up automation, you hit a fork early: use a low-code tool like n8n to connect things visually, or write custom code. Founders tend to pick a side on instinct, low-code because it's fast, or custom because it feels more serious, and both instincts are wrong as often as they're right. The better answer depends on the job, and knowing which to reach for saves you from either a brittle mess or a rebuild a year in.
What n8n is genuinely good at
n8n is automation plumbing you assemble visually. It connects to hundreds of services, you wire steps together in a flow, and you can have something useful running in an afternoon. Its real strengths:
Speed. Gluing together known services, triggering on a webhook, moving data from A to B, n8n gets you there fast.
Visibility. The flow is a diagram. You, and a non-engineer on your team, can look at it and understand what it does, which matters for maintenance.
Integrations. The connectors are already built. You're not writing yet another API client for a service everyone integrates with.
For glue work, prototypes, and the long tail of "when this happens, do that," it's excellent and often the right tool even at scale.
What custom code is genuinely good at
Custom code wins where the logic gets real.
Complex logic. Once the branching, edge cases, and conditionals get involved, a visual flow becomes harder to follow than the code would be. Code is better at being complicated clearly.
Testing and version control. Code can be tested, reviewed, and tracked in git. For anything where a silent break is expensive, that safety net matters.
Performance and scale. High volume, tight latency, or heavy processing is where purpose-built code pulls ahead of a general-purpose flow engine.
Reliability you control. When the automation is load-bearing, you want full control over error handling, retries, and what happens when something fails.
The framework
Reach for n8n when the job is connecting existing services, the logic is simple to moderate, speed of building matters more than squeezing out performance, and you want something a non-engineer can see and maintain. Reach for custom code when the logic is complex, the automation is load-bearing, you need real testing and reliability, or you're operating at a scale where a visual tool strains.
And notice it's not either-or. A strong pattern is hybrid: n8n handles the orchestration and the integrations, and calls out to custom code for the genuinely complex steps. You get n8n's speed and visibility where the work is simple, and code's rigor where it isn't.
The two failure modes are equal and opposite. One is forcing genuinely complex, load-bearing logic into a visual tool until it's an unmaintainable tangle. The other is hand-coding plumbing that n8n would have handled in an hour, then maintaining it forever. Both are expensive. The skill is matching the tool to the job, the same judgment behind picking your first workflow well.
This is the 70/30 Method applied to tooling: most of the plumbing can be fast, visual, and low-code, and the senior judgment goes into spotting the parts that genuinely need the rigor of custom code. If you're deciding how to build out your automation and don't want to over- or under-engineer it, that's exactly the call I help clients make. Let's talk.