01
Assume every external call will fail
APIs rate-limit, tokens expire, and third-party services have their own incidents. Retries with backoff and idempotent writes turn a transient failure into a non-event rather than a duplicate record.
02
Alert on absence, not just on errors
Error alerts catch loud failures. Silent ones need a different check: if a workflow that normally runs forty times a day has run zero times by noon, something is wrong even though nothing errored.
- Alert on error rate and on unexpected silence
- Keep a searchable run history with inputs and outputs
- Route alerts to a channel someone actually reads
03
Version workflows like code
Automations accumulate business rules. Without versioning and a change record, nobody can safely answer why a step exists — so nobody removes it, and complexity compounds.