Refresh Cadence · Article 2

Unreviewed Output Is Provisional Output

Frequent pipeline runs can create provisional output faster than controls, consumers and recovery processes can accept it.

A new timestamp is not the same as a new assurance.

Consider a scheduled pipeline that publishes a new output every 15 minutes.

The source file arrives at 06:00. The dashboard refreshes at 06:15, 06:30, 06:45, and every quarter hour after that. By 09:00, twelve outputs have existed in some form.

Some outputs overwrote earlier states. Some triggered extracts. Some reached caches and reports. All of them left run records, logs, and operational state.

Nobody used the output until the 09:00 review.

At 09:05, the reviewer spots the problem. A reference mapping has been wrong since the 06:00 source arrived. The pipeline did not create twelve useful refreshes. It created twelve versions touched by the same unresolved fault.

This is a cadence problem.

The issue is not that the pipeline ran quickly. Fast execution helps. It shortens waiting time and gives the team more room to recover.

The issue is that production ran faster than acceptance. Output accumulated ahead of the point where the system found out whether that output was fit to use.

This article concerns batch and scheduled pipelines: bounded runs, expected inputs, known outputs, and planned handoffs. The examples include human review and automated consumers. The argument is not that every pipeline needs manual approval. It asks a narrower question:

Can the system around the pipeline absorb output at the rate the pipeline produces it?

Freshness and Confidence Are Different

Freshness describes age.

Confidence comes from controls, reconciliation, review, acceptance, and known system behaviour.

Those are related ideas, but one does not create the other.

A dataset refreshed five minutes ago can still be waiting for publication checks. A daily file from 06:00 can be the right output for the 09:00 decision after it has passed its controls and reached the right consumer.

Newer can matter. Some processes really do need recent data. A treasury decision, a risk review, a customer intervention, or an automated handoff can all have a clear freshness need.

But a newer timestamp alone does not answer the reliability question.

Freshness tells you when the output was produced. It doesn't tell you whether anyone should rely on it.

This distinction gets lost in dashboards and scheduler settings. A green run at 08:45 looks reassuring. A newer partition looks better than an older one. A report with a recent refresh time feels more current.

Those signals have value. They do not replace acceptance.

Acceptance can mean many things. A reviewer signs off a report. A downstream batch accepts a file. A reconciliation process matches expected totals. A publication check releases an output. An automated decision process consumes the dataset and records the version it used.

The shared point is practical. The output has crossed a boundary where the operating process can act on it, or reject it, with a known status.

Before that point, it is provisional.

What Provisional Output Means

Provisional output is not bad output. It is output whose operational status is still unresolved.

It can be:

  • produced, awaiting review
  • produced, awaiting reconciliation
  • produced, awaiting downstream acceptance
  • published internally, not released externally
  • available, but not yet used by the decision process

That state is normal. Most scheduled systems have some gap between production and use. A pipeline finishes at 06:30. A review starts at 09:00. A downstream process reads the data at 14:00.

The gap itself is not a defect.

The cadence problem starts when output enters that state faster than it can leave it.

Think about the 15-minute schedule again. By the 09:00 review, twelve outputs have passed through the system. The review has only just started. Confidence has not increased twelve times. The organisation has simply created more state to interpret.

That state can be small. An idempotent job replaces the same table each time. No consumer reads the intermediate versions. No downstream process starts. The operational exposure is limited.

That state can be large too. Each run can publish a versioned dataset, trigger extracts, update a cache, send notifications, or start downstream checks. A single upstream problem can then touch many more places before anyone sees it.

The difference matters. Frequent schedules are safer where the system gates, quarantines, suppresses duplicates, and names the authoritative output. They are riskier where every trigger proceeds as a separate production event.

Cadence determines how much provisional work can exist at once.

Every Run Adds to the Stock

A 15-minute schedule creates twelve trigger points between 06:00 and 09:00.

An hourly schedule creates three.

That comparison does not prove that hourly is right. It only shows the control that cadence gives you. The schedule sets the maximum amount of output that can build up before the next acceptance point.

The stock is not only stored files.

It can include output versions, overwritten table states, run records, downstream extracts, cache entries, alerts, reconciliation tasks, and questions about which version reached which consumer.

The strongest cases involve output that escapes into use. A report refreshes. A file goes to another team. A downstream batch starts. A model scores from an intermediate dataset. A business process records a decision against a version.

The milder cases still create work. The team needs to know which runs mattered, which outputs were superseded, and which ones never left the pipeline boundary.

That is why "nobody used it" is useful evidence, but not a complete answer. The team still needs to prove that nobody used it. In a well-designed system, that proof is easy. In a messy one, it can become the incident.

Each extra run asks the same operational questions:

  • Did this run read new input?
  • Did it publish anything?
  • Did any consumer see it?
  • Did it trigger another process?
  • Is it authoritative, superseded, failed, or suspect?

Those questions are manageable at low volume. They are still manageable at high volume with the right controls. They become costly where the schedule creates many states and the system records them poorly.

More output does not create more confidence. It creates more output.

Recovery Has a Production Rate

Failure recovery has its own clock.

Suppose a scheduled pipeline runs every 15 minutes.

The problem begins at 06:00. The team detects it at 07:30. Diagnosis and repair take 90 minutes. The rerun, checks, and release take another 30 minutes.

The recovery window runs from 06:00 to 09:30.

During that three-and-a-half-hour window, a 15-minute schedule can create fourteen scheduled runs.

Those runs will not all have the same effect. The control design decides what happens after the first bad output or failed run.

New triggers can stop. They can queue. They can fail with the same error. They can publish suspect output. They can generate repeated alerts. They can overwrite state that an operator later needs to inspect.

The interval alone does not decide the risk. The interval and the failure controls decide it together.

A system that produces every 15 minutes but detects and recovers in three and a half hours has two different operating speeds.

The production speed is fast. The recovery speed is slower. That gap is where provisional output accumulates.

Earlier detection shortens the window. Appropriate cadence limits what accumulates inside it.

This is the link to failure latency, but it is not the same problem. Failure latency asks how long a detectable problem remains hidden. Refresh cadence asks how much work can build up around that problem during the same period.

Both matter.

A frequent schedule can be sound where recovery design matches it. Stop new production after a blocking failure. Quarantine suspect outputs. Mark pending and superseded states. Group repeated failures under one incident. Make the accepted output explicit.

Without those controls, the schedule can turn one fault into a queue of nearly identical operational tasks.

Operational Attention Is Finite

One unresolved fault should not arrive as twelve unrelated surprises.

That sounds obvious. Many operating patterns still do exactly that.

A reference table is wrong. The 06:15 run fails. The 06:30 run fails in the same place. The 06:45 run fails too. Each run sends an alert. Each alert lands in a channel, ticket, mailbox, or incident feed.

The team does not have three faults. It has one fault and three notifications.

Frequent schedules can make that distinction harder to see. Repeated messages crowd out the first useful signal. Operators spend time closing duplicates, comparing run states, and explaining that the later failures are symptoms of the same unresolved cause.

Published outputs create a related problem. The team must answer which version was good, which version was suspect, which version reached a consumer, and which version should be treated as authoritative now.

Those answers should be visible in the system. They should not rely on someone reconstructing the morning from scheduler logs and chat messages.

This is still a cadence design issue, not only an alerting issue.

Each trigger creates work. The work can be technical, operational, or social. It can be a compute job, a validation result, a failed downstream dependency, a message to a reviewer, or a question from a consumer.

High-frequency systems can handle that work. They need design that matches the frequency.

Duplicate alerts should be grouped. Blocking failures should stop or gate later production. Outputs should have clear states: pending, accepted, rejected, superseded, or quarantined. The authoritative version should be easy to find.

Those controls let frequent output stay legible.

Without them, the schedule writes more operational debt into every incident.

Automated Consumers Have Cadences Too

The word "review" can mislead here.

This is not an argument for adding a person to every handoff. Manual sign-off can be the wrong control for many data pipelines.

The real boundary is consumption.

Automation removes the person from the handoff. It does not remove the handoff.

Take a downstream batch that starts at 14:00. It needs one accepted dataset ready by 13:30. The upstream source arrives at 06:00 and does not change again that day.

Publishing every 15 minutes from 06:00 to 13:30 creates many opportunities to produce the same state. The downstream batch still consumes one dataset.

That does not make the 15-minute schedule wrong by itself. It can support recovery. It can catch late source corrections. It can satisfy another consumer. It can run cheap readiness checks that are separate from full production.

But the automated 14:00 batch does not justify every upstream production run by existing.

Now change the example. An automated decision process consumes a new accepted dataset every 15 minutes. The source changes between those intervals. The controls can keep up. Recovery behaviour is designed for that speed.

That is a different system. Its consumption cadence supports the production cadence.

The distinction is not human versus machine. It is unused output versus output tied to action.

A scheduled pipeline should not inherit a short interval merely due to automation downstream. The question stays the same:

Who or what consumes each changed output, and what becomes late without it?

Produce at the Rate the System Can Absorb

The answer is not always a slower schedule.

Some systems need frequent output. Their sources change often. Their consumers act often. Their controls keep pace. Their recovery model matches the interval. Their run cost earns its place.

The problem is mismatch.

The source changes slowly. Output arrives quickly. Consumption happens later. Recovery takes longer than the trigger interval. Each extra run creates state that the system cannot interpret quickly.

That is how a pipeline can look current and still create uncertainty.

Return to the opening example.

Twelve outputs existed before the 09:00 review. The reference mapping was wrong for all of them. The new timestamps did not increase assurance. They expanded the set of outputs, records, and downstream effects the team had to understand.

A better design can still run every 15 minutes. It needs a reason. Perhaps each output feeds a real decision. Perhaps the system quarantines all versions until reconciliation passes. Perhaps downstream consumers read only the latest accepted output and record that version clearly.

Or the better design can run once after the source arrives, then keep a controlled rerun path for recovery. It can run readiness checks more often than production. It can align production with 09:00 and 15:00 use points.

Those choices belong in the design, not hidden inside the scheduler.

Article one made the first distinction: fast execution is an engineering goal, and frequent execution is a design choice.

This article adds the operational consequence. Production can outrun acceptance. Output can pile up in a provisional state. More versions can exist without more confidence.

The next question is practical: how should a team choose the interval?

That needs evidence about source change, consumption, recovery, and cost. It needs a recorded reason for each scheduled run.

Run at the rate the system can absorb, not only at the rate the pipeline can produce.