Observe progress at meaningful steps
Record when each step starts and finishes, with status and a correlation identifier. For long-running steps, report checkpoints or measurable progress such as items processed rather than repeating a generic running message.
Identify expected waits such as external callbacks, scheduled delays, rate limits, and human approval. If a step waits for an event, make its deadline and timeout behavior explicit so the run does not remain pending forever.
Set thresholds and recovery actions
Choose warning and timeout thresholds from observed service behavior and business needs, not an arbitrary short interval. A slow external dependency may need a different threshold from a local transformation.
When a threshold is exceeded, inspect the last completed step and its dependency before retrying. Notify an owner with the run identifier and actionable context; resume or cancel only through a defined recovery path.