Questera

Implementation worksheet · 5 min read

A Warehouse Audience Refresh Service-Level Worksheet

Set a staleness budget per use case rather than one refresh schedule for everything. Three tiers cover most needs: attributes that change slowly (plan, company size, region) can refresh daily; audience membership driving scheduled campaigns needs hourly or better; anything a user expects to be immediate should not come from a sync at all and needs an event path. Then record the actual observed freshness alongside the target, because warehouse jobs slip and a sync configured hourly that has been running every four hours since a schema change is the common failure — and nothing reports it unless you measure it.

Reverse ETL and warehouse audiences make a large amount of data usable for campaigns, and they introduce a delay that is invisible in the interface. The audience looks current because it has a name and a count. Nothing on the screen says the underlying query last ran at 4am, and a campaign sent at noon against it is acting on this morning's world.

Put it into practice

1. Classify each audience by how fast its condition changes

Plan tier changes rarely. Usage thresholds change hourly. 'Currently in a failing state' changes by the minute. The refresh schedule should follow the underlying volatility, and a single global schedule will be wasteful for the first and wrong for the third.

2. Write the staleness budget as a number, not as 'fresh'

'Up to 24 hours old is acceptable for this audience' is a budget. 'Should be reasonably current' is not, and it cannot be violated, which means it cannot be monitored. The number is what makes the rest of this worksheet actionable.

3. Measure observed freshness, not configured freshness

Record the actual last-successful-refresh timestamp per audience and compare it against the budget. A sync configured hourly and running every four hours because of a warehouse queue is the most common version of this failure, and the configuration screen will keep saying hourly.

4. Show the audience's as-of time wherever it is used

On the campaign setup screen, next to the count. Someone scheduling a send should be able to see that the audience was computed nine hours ago. This one display change prevents more stale-audience sends than any amount of process.

5. Decide what happens when the budget is exceeded

Block the send, warn and allow, or proceed silently. For anything consequential, block or warn — a send against a badly stale audience reaches people who no longer qualify, which for a win-back or an upgrade prompt means messaging current customers as though they left.

6. Route the genuinely real-time cases off the sync path

If the use case needs immediacy — a limit hit, a payment failure, a security event — a warehouse sync is the wrong architecture regardless of interval. Name those explicitly so nobody tries to solve them by shortening a schedule, which only raises cost without reaching the required latency.

Staleness budget by audience

Copy this structure into your review document and record your observed result for each row.

Staleness budget by audience
AudienceCondition volatilityBudgetObservedAction if exceeded
Plan tier / firmographicslow24hwarn
Lifecycle stagemedium4hwarn
Usage threshold approachinghigh1hblock
Trial expiring soonmedium4hblock
Recently churnedmedium4hblock
Currently failing paymentreal-timeevent pathn/anot a sync
Hit a hard limit nowreal-timeevent pathn/anot a sync

A failure worth checking

The win-back campaign to people who already came back. The 'churned' audience refreshed eighteen hours ago because a warehouse job was queued behind a backfill. Since then a number of those accounts reactivated. The campaign sends anyway, telling active paying customers that we miss them and offering a discount to return. Nothing in the system was wrong except the freshness, and nothing displayed it.

Common questions

Why not just refresh everything hourly?

Cost and warehouse contention, mostly — frequent refreshes on large audiences are expensive and can slow everything else running there. Budgets per audience let you spend the refresh frequency where it changes a decision.

What counts as real-time?

For this purpose: the user would notice the delay. A limit warning arriving after they hit the limit is late no matter how short the interval, which is why those cases need an event rather than a faster sync.

Basis and scope

This is a proposed implementation method using illustrative examples, not a measured benchmark or a customer case study. Prepared with AI assistance. Validate product-specific behavior against current documentation and your own test environment.

Continue with Questera

Discuss your workflow →