Work snippetMonitoring + reliability
n8n and Make error monitoring, with retries, a dead-letter queue and alerts
How I would approach 14 automations across n8n and Make for a five-branch group, so each failure is classified, retried only when safe, parked with its full payload, and reported to the right person by severity.
Work snippet with example figures.
- Area
- Monitoring + reliability
- Tools
- n8n · Make · Airtable · Slack
- Typical scope
- US$1,500–3,000
- Timeline
- About 4 weeks · 4 fixed milestones
Context and systems map
A 60-tech plumbing and electrical group with five branches and 14 automations spread across Make and n8n: job creation, invoice pushes, supplier bill intake, review requests and nightly reports. Failures are found by someone noticing that a number looks wrong.
The systems in play
In the example each automation is wrapped with the same error pattern: classify the failure, retry what is safe to retry, park what is not in a dead-letter queue with the full payload, and tell the right person in the right channel. Silent failures are caught by heartbeat checks.
| System | What it does for the business |
|---|---|
| Make scenarios | Eight scenarios that connect ServiceM8, Xero and HubSpot. Each gets the shared error handler. |
| n8n workflows | Six workflows for supplier bills, reports and webhooks. Each gets the same error workflow. |
| Error workflow | One shared workflow that classifies an error, decides retry or park, and writes the log. |
| Dead-letter queue | An Airtable table holding each failed item: payload, error, attempts, owner and status. |
| Alert channels | A Slack channel for operations and email for the finance lead, by severity. |
| Heartbeat monitor | A scheduled check that expects each automation to have run inside its window. |
How the data moves
- Automation step fails
- Error workflow
- Classify
- Retry with backoff
- Dead-letter queue
- Alert by severity
- Owner resolves
- Replay or close
Problem
What the owner sees
- An invoice push that failed three weeks ago and nobody knew
- A flood of alerts that people learn to ignore
- Failed items that vanish with no payload to replay
- Fixes that create duplicates when the item is replayed
Automations rarely stop with a bang. They fail on one record, return a rate-limit error at month end, or quietly stop being triggered after a credential expires. The business needs a pattern that makes each failure small, visible and replayable, without creating duplicates when it is retried.
| Everyday situation | What goes wrong |
|---|---|
| Rate limit at month end | A burst of invoices fails and is never retried |
| Expired credential | Every run fails the same way until someone logs in |
| Record missing in the target | The error says 404 and the item is lost |
| Validation error from bad data | The same bad record fails on every retry |
| Retry without a key | The item is created twice when the first attempt actually succeeded |
| Scenario switched off by accident | Nothing fails; nothing runs either |
Approach
Four steps, in this order. Each one ends with a result that is checked.
- LookInventory of every automation: trigger, steps, owner, what a failure costs and how it is noticed today.
- Agree the rulesError types, retry schedule, severity levels, owners and the replay procedure are written down.
- Build and testThe shared error handler is added to each automation in a copy first, then forced to fail in every class.
- Go live in orderHighest-risk automations first. Alert thresholds are tuned for two weeks so noise does not train people to ignore it.
| Item | Example setting |
|---|---|
| Retry types | Rate limit, server error and timeout are retried. Authentication, validation and missing record are not. |
| Retry schedule | Five attempts with backoff of 1, 2, 4 and 8 minutes |
| Idempotency | Every write carries a key built from source id and action, so a replay never creates a second record |
| Dead-letter queue | Any item that fails the last retry or a non-retry class is parked with its full payload |
| Severity | Critical: money or customers affected. Warning: delayed, will retry. Info: daily digest. |
| Heartbeat | Each automation has an expected run window and a maximum gap |
| Replay | Only from the queue, by a named person, with the cause recorded |
| Owner | Every automation has one named owner and a backup |
Flow and data mapping
The first table is the decision made for every error. The second shows what is stored with each failed item so it can be replayed safely.
| Error class | Example | Decision | Alert |
|---|---|---|---|
| Rate limit | HTTP 429 from the accounting API | Retry with backoff | Warning if all retries fail |
| Server error or timeout | HTTP 5xx, no response in 30 seconds | Retry with backoff | Warning, then Critical if the queue grows |
| Authentication | HTTP 401 or 403, expired token | No retry; park and pause the automation | Critical, immediately |
| Validation | HTTP 400, missing tax code | No retry; park with the field named | Warning to the data owner |
| Missing record | HTTP 404, customer not found | No retry; park | Warning to the data owner |
| Already exists | HTTP 409 on a replay | Treat as success, log | None |
| No run in window | Heartbeat missed | Alert | Critical for money flows, Warning otherwise |
| Field | Content | Use |
|---|---|---|
| Item id | Source record id and action | Idempotency key |
| Automation | Name and version | Find the owner and the steps |
| Payload | Full input as received, secrets removed | Replay without asking the source again |
| Error | Class, code and message | Triage |
| Attempts | Count and times | Retry history |
| Owner and status | Open, in progress, replayed, closed | Queue discipline |
| Cause | One of eight causes, chosen on close | Monthly review of the biggest causes |
Edge cases handled
Agreed in advance with the finance lead and the operations manager, and tested before go-live.
| Situation | How it is handled |
|---|---|
| Retry succeeds after the original actually worked | Idempotency key makes the second write return the first record |
| Same bad record fails every day | Parked once; the repeat is counted against the same item, not re-alerted |
| Credential expires at night | Critical alert at the first failure; the automation pauses so it does not fill the queue |
| Alert storm after an outage | Alerts grouped by automation and sent as one message every 15 minutes |
| Webhook sent twice by the source | Duplicate key found, second ignored and counted |
| Replay of an item that is now out of date | Replay checks the current state of the record first and asks for a decision |
| Error handler itself fails | Second-level email to Manaz Afzal and the owner, with the raw error |
| Maintenance window | Alerts muted for the named automations for a fixed time, with a log entry |
Worked example
The tables below show one month for an example group with 14 automations. They show the shape of the checks, not a client result.
| Attempt | Wait before it | Elapsed since first failure |
|---|---|---|
| 1 | Immediately | 0 min after first failure |
| 2 | 1 min | 1 min after first failure |
| 3 | 2 min | 3 min after first failure |
| 4 | 4 min | 7 min after first failure |
| 5 | 8 min | 15 min after first failure |
| Cause | Items | Replayed | Closed without replay |
|---|---|---|---|
| Missing tax code on a bill | 11 | 11 | 0 |
| Customer not found in Xero | 6 | 4 | 2 |
| Expired credential | 2 | 2 | 0 |
| Source sent an invalid date | 3 | 1 | 2 |
| Total | 22 | 18 | 4 |
| Severity | Alerts sent | Went to |
|---|---|---|
| Critical | 3 | Finance lead by email, operations on Slack |
| Warning | 31 | Operations on Slack, grouped |
| Info | 30 | One daily digest message |
| Automation | Expected | Maximum gap |
|---|---|---|
| Invoice push to Xero | Every 15 minutes, 06:00 to 20:00 | 45 minutes |
| Supplier bill intake | Every 30 minutes | 2 hours |
| Nightly branch report | Once, 02:00 | 26 hours |
| Review requests | Daily, 16:00 | 26 hours |
Monitoring and alerting
This whole piece is about monitoring, so the alerts are designed to be few. Each one names the automation, the item, the likely cause and the first action.
| Signal | Threshold | Alert goes to | First action |
|---|---|---|---|
| Critical failure | Any money or customer flow fails its last retry | Finance lead email and operations Slack | Owner opens the item, fixes the cause, replays |
| Queue size | More than 10 open items or any older than 24 hours | Operations Slack | Owner reviews the queue the same morning |
| Heartbeat missed | Gap above the maximum | Owner and operations Slack | Trigger and switch status checked |
| Credential expiry | 14 days before and on the day | Owner email | Credential renewed and tested |
| Error handler failure | Any | Manaz Afzal and owner by email | Handler fixed, items replayed |
| Weekly digest | Counts by automation and cause | Owner and finance lead | Review of the top cause |
Test plan
Every check has a written pass condition and a written fail condition before it is run. A FAIL stops the next step until it is cleared and re-run.
| ID | Check | Method | PASS when | FAIL when |
|---|---|---|---|---|
| T1 | Rate limit | Force a 429 in a copy | Five attempts on the schedule, then success or park | Fewer attempts or no park |
| T2 | Authentication | Revoke a test token | No retry, paused, Critical alert at once | Retries or no alert |
| T3 | Validation | Send a bad record | Parked with the field named | Retried or lost |
| T4 | Idempotency | Replay a successful item | No second record | Duplicate created |
| T5 | Heartbeat | Switch off a test automation | Alert inside the maximum gap | No alert |
| T6 | Alert grouping | Fail 20 items at once | One grouped message per window | 20 messages |
| T7 | Replay | Fix the cause and replay | Item created once, queue closed with the cause | Item stuck or duplicated |
| T8 | Handler failure | Break the handler in a copy | Second-level email sent | Silence |
Go-live and rollback
The handler is added automation by automation. Each one can be unwrapped in minutes, because the original steps are unchanged.
| Step | Owner | Gate to continue | Rollback trigger |
|---|---|---|---|
| Invoice push and bill intake | Manaz Afzal | T1 to T4 pass in a copy | Any duplicate in the target |
| Review requests and reports | Manaz Afzal | T5 passes | Missed heartbeat not alerted |
| Remaining automations | Operations manager | Queue worked for a week | Queue above 10 for three days |
| Alert tuning | Manaz Afzal and owner | Two weeks of review, noise below 5 alerts a day | Owner asks to mute a Critical alert |
| Rollback | Owner | Handler removed from the automation, original steps untouched | Decision recorded with the reason |
Scope and milestones
A fixed scope agreed in writing before anything starts. Each milestone is paid when you sign off its deliverable.
| Area | Included |
|---|---|
| Systems Audit | Read-only review of every Make scenario and n8n workflow, owners and failure history, a 45-minute call, written findings and a fixed quote |
| Inventory | Every automation with owner, trigger, steps and failure cost |
| Shared error handler | One pattern for Make and one for n8n, with types and retries |
| Dead-letter queue | Table, views, owner and status, with replay steps |
| Alerts | Slack and email by severity, grouped and tuned |
| Heartbeats | Windows and gaps for each automation |
| Runbook | What to do for each alert, one page each |
| Handover | Written SOPs, a recorded handover video and files you own, plus 14 days of fixes after go-live |
| Not included | Tax filing and statutory returns. |
| Also outside the scope | Rebuilding the automations themselves. Changing the tools. A 24-hour on-call service. Software subscriptions (billed to you by the vendors). |
| Milestone | Deliverable | Timing | Share |
|---|---|---|---|
| M1 Audit and rules | Inventory, fixed quote, error rules in writing | Week 1 | 25% |
| M2 Handler and queue | Handler and queue built and tested in a copy | Week 2 | 30% |
| M3 Rollout | Handler live on all automations, heartbeats on | Week 3 | 30% |
| M4 Tuning and handover | Alert tuning, runbook, SOPs, handover video, 14 days of fixes | Week 4 | 15% |
Typical scope for this kind of project: US$1,500–3,000
About 4 weeks across 4 fixed milestones. The Systems Audit (US$300, fixed) comes first and confirms the scope.
Describe what is going wrong between your job system and your books, and I will say where I would look first.
Send a short note through the form on the home page. I will reply with where I would start, and whether the US$300 Systems Audit is the right first step.