Engineering
Before You Replay a Failed n8n, Make or Zapier Workflow
A workflow adds a customer to the CRM, sends a welcome message and then fails while updating an operations sheet. Someone opens the failed run and presses replay.
Whether the customer gets a second message depends on what that control actually repeats. It also depends on what happened inside the step that reported the error.
This is a hypothetical example. It illustrates a question worth settling before commissioning a workflow: can the person operating it explain what recovery will repeat?
Identify the recovery control before using it
“Retry” can mean resuming a failed execution, repeating a module or starting a new run with old inputs. Those are different operations. The distinction belongs in the handover documentation, beside the workflow itself.
The current platform documentation describes these boundaries:
| Platform and control | What the documentation says | What to check before using it |
|---|---|---|
| n8n: retry a failed execution | Resumes from saved execution state and preserves completed node results. The failed node processes its saved input again, including items it handled before failing. A failed Execute Sub-workflow node reruns the sub-workflow from its beginning. | Check effects within the failed node and any sub-workflow. Confirm whether the retry uses the original or currently saved workflow. |
| Make: retry an incomplete execution | Starts at the module that caused the error, using its configuration from the failed run. Incomplete execution storage must be enabled; it is disabled by default. | Check whether the incomplete execution exists, whether the failure is temporary and whether its saved configuration is still appropriate. |
| Zapier: replay errored steps or replay an entire run | Error replay attempts errored steps. Replaying an entire run starts from the trigger and repeats every step using the current published workflow. | Identify which replay option is selected. Check the intended inputs and whether repeating successful actions is acceptable. |
Sources: n8n execution retry, Make incomplete executions, Make recovery controls, and Zapier replay behavior. Features and limits can change; check the documentation against the deployed version and account plan.
The recovery note should name the exact control and the steps or items it can repeat.
A run marked failed does not establish that every action in its failed step had no effect. A request might reach another system even when the workflow never receives its response. Retrying that request needs a separate decision about duplicates.
Write down what is known and what is uncertain
Consider a second failure in the same hypothetical workflow: the messaging step times out before the sheet update runs. The CRM confirms the customer record exists. The operations sheet has no completion entry.
The missing sheet entry tells us the workflow did not record completion there. It does not tell us whether the messaging provider accepted the message.
For this example, the recovery note would look like this:
| Action | Evidence available | Proposed recovery decision |
|---|---|---|
| Create the CRM customer | Destination record ID is recorded and the record can be found | Preserve it. Do not create another customer merely because the overall run failed. |
| Send the welcome message | Timeout; provider acceptance is unknown | Check the provider using a request or message identifier. If the outcome cannot be established and duplicate prevention is unavailable, send the incident to an operator. |
| Record completion in the sheet | No completion entry | Update it only after the preceding outcomes are established. A completion timestamp should describe completed work. |
This is a design worksheet, not a tested integration. The receiving systems determine which checks are possible. Some expose a lookup by external reference; some provide a duplicate-prevention mechanism; some leave a person to reconcile the result.
Record the business item, attempted action, destination reference, workflow version and recovery decision together. Limit stored payloads to what the operator needs, with access and retention rules appropriate to that data. A long execution log is useful only if someone can connect it to the affected customer or order.
Check duplicate prevention at the destination
An idempotent operation can be repeated without applying the same intended change again. The important detail is where that property is enforced.
For example, Stripe's API documentation describes idempotency keys for requests. Its API v1 returns the saved result when the same key is reused after endpoint execution begins, including saved errors. Keys can be removed after at least 24 hours; reuse after pruning can create a new request. Those rules matter when designing recovery. They are not a guarantee that an entire workflow runs only once.
An internal “already processed” flag also needs scrutiny. If the workflow sets the flag before sending a message and then crashes, a later run could skip a message that was never sent. If it sets the flag afterward, a crash between sending and recording can leave the outcome uncertain.
The team should explain how it closes that gap for each consequential action. A durable action record, a destination-supported key and a reconciliation path may all be necessary. Where the destination provides no reliable way to resolve uncertainty, manual review can be the correct boundary.
Make the handover demonstrate recovery
Ask the implementation team to demonstrate the controls the operator will actually use, in a test environment with external sends contained.
Use four cases: a temporary error before an action, an ambiguous response after an action, a failure partway through a batch and a workflow change before recovery. For each case, record what repeats, what stays completed, how uncertainty is resolved and who is allowed to continue.
Include a case where an action succeeds but the final completion update fails. Confirm that the operator can finish the record without repeating the customer-facing action. If the workflow calls sub-workflows, include those boundaries in the demonstration.
The acceptance evidence should include the affected record IDs and final outcomes, alongside the platform execution history. Another person should be able to follow the recovery note without needing the original builder to explain it on a call.
This is narrower than investigating why a job reported success without doing its work, which we cover in finding silent background job failures. Here, the decision is which actions a specific recovery control will repeat after a partial failure.
Scope the operating responsibility with the build
A simple internal notification may need little more than a clear retry instruction. A workflow that changes customer records and sends external messages needs a more explicit recovery design. The consequence of repeating an action should determine the effort.
Before expanding an automation programme, choose one important workflow and ask for its recovery note and a failure demonstration. Agree who watches unresolved runs, who can authorize a replay and what happens when the owner is unavailable. That makes ongoing support a defined responsibility.
If that review reveals a broader engineering problem across your operating systems, Better Software can discuss the scope with you. Bring the workflow, the systems it changes and one failure that is difficult to recover from.
About the author
Better Software Team
Product and engineering team
Better Software Team is the product and engineering team at Better Software. We build new software products and improve existing applications and systems, with deeper experience in healthcare, finance and energy.