Retry with backoff, per step, with a policy that distinguishes retryable from terminal failures. A rate limit should back off and retry; a malformed request should fail fast and alert. Treating both the same either hammers a struggling provider or gives up on a transient blip.
Provider fallback. Model APIs have outages, and a workflow that hard-codes one provider inherits their availability. Our workflows declare a preference order and fall back on failure or timeout, with the substitution logged so quality differences can be traced afterwards.
Idempotency. Any step with a side effect — sending an email, posting a ledger entry, charging a card — carries an idempotency key so a retry cannot duplicate it. This is the single most common defect we find in hand-rolled AI pipelines, and it is invisible until the day it double-charges someone.
Structured output validation. Model output claimed to be JSON is validated against a schema before anything downstream consumes it, with a bounded repair attempt and then a clean failure. Without this, a malformed response corrupts data three steps later where the cause is very hard to find.
Human tasks as first-class steps. A review or approval is a workflow step with an assignee, an SLA, an escalation rule and a reminder — not a Slack message and a hope. The workflow blocks, the item is visible in a queue with its deadline, and it resumes automatically on completion.
Cost and token accounting per step, per run, tagged to a business unit. You cannot control what you cannot attribute, and attribution after the fact from provider invoices is close to impossible.