If the positions arrive overnight, the dashboard is not real-time. It is punctual.

We have been here before. The sales deck says “live,” the timestamp says today, and the positions say yesterday. Congratulations, the stale data has low-latency delivery.

A browser refresh tells you when the browser asked for data. A dashboard refresh tells you when the display or its cache was rebuilt. Neither tells you when a position was effective, when the source system published it, or when it reached the dashboard. Those can be different times, and different numbers on the same screen can have different ages.

The clock is working hard; the pipeline, less so. Calling it a stream does not make the nightly scheduler feel appreciated. At least a spreadsheet usually admits when you last opened it.

If you are going to present exposure, risk, or PnL, have the decency to disclose the age of every number. Here is what the screen should say, at minimum:

  • Source “as of” time for each figure.
  • Last successful ingest time, separate from page refresh time.
  • Clear stale-data indicators when expected updates fail.
  • Disclosure when live prices are combined with older positions.

Yes, really. If you cannot say how old the number is, stop calling it live.

A timestamp is not a freshness guarantee. A clock in the corner is not a data lineage strategy. Yesterday’s positions have been given today’s timestamp and a nicer font. The screen is live. The numbers are taking a well-earned rest.

Batch jobs do honest work. Let them keep their honest name. And if you must call it real-time, at least put the age on the screen. The dashboard can survive the embarrassment.