We scheduled a question for an hour when nobody could answer it
The run was fully unattended. That was the point. Everything upstream of the final step had been automated for weeks, and the last remaining human touch was an approval — a request sent out, a wait, a decision, a continue-or-stop. We left it in place deliberately, because it felt like the responsible thing to keep. Then the approval request timed out. The interesting part is not that it timed…
The automated question pipeline, designed for unattended runs, encountered an unexpected glitch when the final approval request timed out. This unexpected timeout was not a cause for concern, but the log entry provided little insight into why the request failed. The log merely indicated that the request had failed, offering no differentiation between a rejection due to credentials, channel, or permissions, and a situation where an intended display occurred without any human to view it.
This outcome produced the same silence, consuming the same timeout window, and leaving the log line unchanged, whether the destination rejected the request outright or accepted it perfectly. The gate that depended on human presence had been built with an assumption that no human would be involved at a specific hour, which proved to be an inaccurate expectation.
This realization revealed a recurring pattern where approval steps were not merely technical controls but rather requests for human attention. The availability of human attention was not monitored or accounted for in the pipeline configuration, leading to the gate being perceived as a dependency on human presence. The first instinct was to increase the timeout, but this did not resolve the issue; instead, it merely delayed the failure and lengthened the runtime of successful paths.
The second instinct was to eliminate the gate entirely, swapping an ambiguous failure for an unreviewed action. Neither solution addressed the core problem, which was the inability to distinguish between "no one home" and "access denied." The distinction was critical, as one scenario necessitated fixing credentials or the destination, while the other indicated that the destination was functioning correctly and the assumptions about the operating environment were incorrect.
The first step towards resolving this issue was to update the record to differentiate between the two types of failures. A failed approval should now specify whether the destination accepted the request but never received a reply or if it never accepted the request in the first place. This distinction existed in the response before the wait began but was disregarded because the desired outcome was either pass or fail.
By discarding the field indicating the specific failure, valuable diagnostic information was lost. The second change made was to stop assuming the gate was always available. If a step required human intervention, the run should be aware of whether a human was plausibly reachable at that moment. An unattended run that dispatched a question into an empty room was not merely cautious; it was generating a guaranteed timeout and claiming it as a safety measure.
This approach masked the true root cause, which was the absence of human presence. The broader discomfort lies in the tendency to describe automation as removing humans from the loop, when in reality, the human often remains in the loop nominally, disappearing practically. The step still exists, the request is still sent, and everything appears supervised until one checks for actual human presence, only to find that it was never present, a condition that had persisted for an extended period.
An unattended pipeline can only produce one of two outcomes: either a failure due to the destination's rejection or a failure arising from the lack of human presence. The log, however, does not discern this difference, writing the same line regardless, leading to the belief that a request was refused when, in reality, it was simply left unattended.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.