An unattended job that fails silently is worse than no job. You keep assuming the work happened. Build the alert before you trust the schedule.
The smallest reliable shape
- Trigger on a schedule or on push, and also allow
workflow_dispatchso you can rerun by hand. - Check out the repo and set up the runtime the project already pins.
- Run one command that does the job.
- On failure, POST a short message to the channel people already watch. Include the workflow name and the repo.
Put retries around network calls, not around steps that charge a customer or send mail, unless the operation is safe to repeat. A second send is a second email.
Secrets and cost
| Habit | Why |
|---|---|
| Secrets in the secret store | A public fork or a log line will not contain the token |
| timeout-minutes | A stuck loop cannot run all weekend |
| concurrency group | Two schedules do not stack on the same output |
| Cache installs | Most of the bill is often setup, not the job |
Use the cheapest runner that can do the work. Pin third-party actions to a commit when the job touches production data.
When a diagram is enough
Connecting a form to a chat channel is often faster in n8n. Keep Actions for anything that must live next to the code, be reviewed in a pull request, or use repo secrets. The two can call each other with a webhook. Do not move a 200-line script into a visual node just to have one picture.