background-shape
Why I'm Building Internal Tools With n8n
May 2, 2022 · 6 min read · by Muhammad Amal programming

TL;DR — n8n is self-hosted, open source, and lets you mix visual node-based workflows with raw code when you need it. For internal engineering tools — Jira automations, Slack bots, sync glue — it beats both Zapier (cost, lock-in) and homegrown Python scripts (maintenance, observability). The right tool for the boring middle.

After four months of product-shaped posts — containerization, Postgres, Rust, React/Next — May pivots to the inner-loop of engineering work itself: internal tools that save the team time. The kind of work that doesn’t ship as a feature but compounds.

The theme: n8n + Jira API. Why n8n specifically, why now, and what the rest of the month covers.

What internal tooling I’m trying to fix

Concrete pains from the last six months on our team:

  • Engineers manually move Jira tickets to “in review” when they open a PR. Forgotten half the time.
  • Daily standup notes pasted into Slack by hand.
  • New tickets in the bug project don’t get auto-assigned by component; PM triages every morning.
  • Postmortems need follow-up tasks created in Jira; they get created in Notion instead and lost.
  • Slack reminders to file expense reports go out manually each Friday.

Each of these is 5 minutes of work, repeated daily, across 12 engineers. ~10 hours/week total. None of them are “real” engineering work; all of them get put off until they become a fire.

This is the canonical “automation” use case. Five years ago I’d have written 5 Python scripts in 5 cron jobs. They’d have worked, then broken, then nobody would know who owned them.

Why not Zapier

Zapier was the default in 2017. In 2022 it’s expensive and limited:

  • Per-task billing. 50K tasks/month = $400+. A standup bot alone burns 1500/month per channel.
  • Closed ecosystem. The connectors you need are the ones Zapier hasn’t built.
  • “Code” steps are limited (no persistent dependencies, no real local IO).
  • No version control. Workflows are clickable artifacts in a hosted UI; reviewing changes is a screenshot diff.
  • Data lives on Zapier’s servers. Sometimes a hard no for compliance reasons.

For consumer-level automation Zapier is still fine. For engineering teams, the friction is real.

Why not just scripts

The other end. Python script + cron. Cheap, flexible, total control. Costs:

  • Every script needs hosting (a VM, a Lambda, a container). Operational tax.
  • Secrets management ad-hoc per script.
  • Observability is whatever you cobble together (usually nothing).
  • “Who owns this?” turns into “git blame from 2019.”
  • Schedule + retry + error handling reinvented every time.

Works at small scale. Becomes a graveyard at medium scale.

What n8n is, briefly

n8n is an open-source workflow automation tool. Self-hostable as a Docker container. Visual node-based UI but with first-class JS code nodes for the parts that don’t fit the visual model. Built-in scheduling, webhook triggers, credential management, execution history, retries.

The pitch: a hosted UI for the easy 80% of automation, with code-node escape hatches for the 20%. All running on your infra.

Concretely:

  • Built-in nodes for ~400 services (Jira, Slack, GitHub, Notion, Postgres, HTTP, etc.)
  • Workflows export as JSON; version-control in git
  • Self-hosted = no per-task billing, no data leaving your VPC
  • License: Sustainable Use License (effectively open source for in-house use; commercial restrictions don’t apply if you’re not reselling it)

In production it feels like a typed function pipeline you can also edit in a browser.

What May covers

Twelve more posts after this one:

The plan: by end of May, the 10 hours/week of toil above are zero hours/week, with workflows running in our cluster and visible in our monitoring.

What I’m NOT going to cover

  • n8n’s enterprise features (SSO, advanced auth, etc.). The community edition is enough for what most teams need.
  • Comparison with every alternative (Pipedream, Airplane, Retool, Make, Activepieces). I picked n8n; this is what shipping with it looks like. Others may be fine.
  • AI / LLM nodes in n8n. They exist; we’re not using them this month. A later month gets into AI-augmented workflows.
  • Building n8n itself, or contributing nodes upstream. End-user perspective only.

The honest case for caution

Internal tooling has a way of becoming load-bearing. If a workflow assigns Jira tickets for the whole team, it being down at 9 AM Monday is a real problem. n8n is reliable; it’s also one more thing to operate.

The mitigation:

  • Run two instances behind a load balancer (covered Friday)
  • Keep workflows simple — one purpose per workflow
  • Version control the workflow JSON; treat changes like code
  • Monitor execution failures, page on consecutive failures
  • Have a runbook for “the n8n service is down”

These take an afternoon to set up. Skipping them is the difference between “automation that saves time” and “automation that’s a new pager.”

A small philosophical note

The reason workflow automation gets neglected on engineering teams isn’t that it’s hard. It’s that it doesn’t look like “real” engineering. Nobody gets promoted for “automated the standup notes.” But the team’s effective velocity goes up when toil goes down, and toil compounds.

This month is permission to spend a week shipping plumbing nobody asked for, because the math works out. By June, those 10 hours/week become something else useful — or just space.

Common Pitfalls

Picking n8n because it’s the most-starred OSS. Try it against your actual use cases first. If your needs are all in Zapier’s free tier, just use Zapier. If you need 5 self-hosted automations, n8n earns its operational cost.

Treating workflows as throwaway. Workflows that automate real-business operations need version control, code review, monitoring. Same as code.

Putting credentials in workflow JSON. n8n has a credentials system specifically for this. Use it.

Self-hosting on your laptop “just for now.” Now becomes always. Run it where your other services run.

Skipping retries. Every external API call eventually fails. n8n has built-in retry; configure it from day one.

Reinventing scheduled automations as workflows when cron suffices. n8n is great when there’s branching, conditionals, multiple steps. For “run this script at 9 AM,” a cron + container is fine.

Wrapping Up

n8n is the right middle between Zapier-style hosted automation and Python-script-on-a-VM. Self-hosted, open source, code-friendly, no per-task billing. May covers shipping it end-to-end. Wednesday: self-hosting n8n with Docker Compose — the setup that makes the rest of the month possible.