A number with no visible timestamp lets readers assume it's current when it might be hours stale
Aliases: data freshness · as-of time
What it is
Every number on a dashboard has a "which moment does this data belong to" property, yet the interface typically shows only the value without the time. Users default to assuming what they see is "now," when the data may actually be 5 minutes old (pipeline delay), an hour old (batch computation), or from yesterday (daily aggregation). Without a timestamp, the user cannot distinguish "the data hasn't changed because the business hasn't changed" from "the data hasn't changed because it hasn't been refreshed yet"—the former is a business signal, the latter is data lag, and their action implications are entirely different.
Why it happens
The misreading from a missing timestamp comes from a misaligned implicit assumption: the system knows the data's temporal boundary (every query has a time-range parameter), but the user cannot see that boundary and defaults to "what I see is the latest." When the data pipeline has delay, that default is wrong—the user believes they are looking at real-time state when they are seeing a delayed snapshot. The most dangerous scenario is alert judgment: the user sees a normal metric without noticing the data is 30 minutes stale, concludes "the system is fine," while the metric may have crossed the threshold during those 30 minutes. A timestamp makes the implicit assumption explicit: one line reading "data as of 14:32" converts the data's temporal boundary from internal system knowledge into a user-visible fact. When the gap between the timestamp and the current time exceeds expectations, the user naturally grows suspicious and acts (refresh, check the pipeline) instead of deciding on stale data.
Where it stops holding
Timestamp granularity must match the data's actual update granularity: labeling daily-aggregated data "data as of 14:32" misleads users into minute-level freshness; the correct label is "data through yesterday 24:00." For multi-layer pipelines (raw data at 5-minute delay, aggregation layer at 1-hour delay), a single timestamp cannot express different metrics' different freshness—each metric or section needs its own label. Timezone is another boundary: when cross-timezone teams share a dashboard, the timestamp must carry timezone information ("14:32 UTC+8"), otherwise "as of 14:32" points at different real-world moments for readers in different zones.
Applying it
- Label every dashboard section's corner with "data as of [time]," updating it with each refresh.
- When the timestamp-to-now gap exceeds the dashboard's expected refresh interval, turn it yellow to flag possible staleness.
- For batch-computed data, label the computation completion time separately from the data's coverage cutoff, using distinct wording.
- Verification: pick any number on the dashboard and try to determine its moment within 5 seconds; no timestamp visible means the requirement is unmet.
Related
- Same group: U7.09.1 Data jumping disrupts reading · U7.09.2 Update frequency should match decision frequency
- Nearby: U7.06.5 The active time range must be visible alongside the chart · U7.05.5 The comparison period's statistical scope must match the current period's
- Search terms:
data freshness·as-of timestamp·staleness indicator