All field notes
Mobile Apps88 signal · Live F1 race coverage

Motorsport Live Data: What Should an App Do When a Feed Is Late?

A delayed race-data feed can make a live screen misleading. Define freshness thresholds, fallback states and monitoring before the app reaches race day.

OSIS Engineering
October 4, 2026 · 6 min read

A live race screen makes an implicit promise: the information is current enough to act on. When a provider pauses or falls behind, that promise can fail even if the app itself is running normally. A rain delay makes the distinction especially visible: event time may stop moving while update time continues to advance—or the feed may stop altogether. The product decision is not simply whether to show the last value. Teams need to define how freshness is measured, what users see when confidence falls, and how engineers learn that the integration is degraded. This guide sets out a practical approach for a hypothetical motorsport app.

01 / 03

Define freshness as product behaviour, not just a timestamp

Start by identifying which fields the app receives and how quickly each one matters. A lap position, session status, incident notice and event schedule do not necessarily need identical freshness rules. For each field, record the provider’s expected update pattern, the time the source says the information was observed, and the time your system received it. Those are different clocks. A timestamp on a screen is useful only if its meaning is clear; “updated” could otherwise refer to a database write rather than a new observation from the track. Agree on a freshness threshold per data type with product, engineering and the data provider.

For a hypothetical app, suppose a timing update includes a source observation time and an ingestion time. If the observation time is old but ingestion is recent, the app has received stale information; if both are old, delivery may have stopped. The app should calculate age from the source observation time when it is trustworthy, while monitoring transport delay separately. Also define what happens when the provider omits timestamps, sends them out of order or changes its schema. Treat freshness as an explicit state—such as current, delayed, stale or unavailable—not as an assumption based on whether a network request succeeded.

  • Document timestamp meaning, expected update cadence and stale thresholds for each feed or field.
  • Distinguish source-data age from ingestion delay and client display time.
02 / 03

Design a fallback that is honest and still useful

When a feed crosses its agreed threshold, preserve the last known value only if the interface makes its age and status visible. A compact label such as “Last update received 2 min ago” is more informative than continuing to present a changing animation that suggests live data. If the feed is unavailable, say so plainly and avoid implying that the event itself has stopped. Event state and data-provider state are separate facts. During a rain delay, for example, a hypothetical app might show the latest confirmed session status, the time it was confirmed and a separate notice that live timing is delayed.

Choose fallback content deliberately. The app might keep stable details such as venue information available, show the last confirmed timing snapshot, and provide a route to refresh or view an official information source if the product has a verified link. Do not silently substitute a different provider unless its rights, coverage, semantics and reliability have been assessed. On recovery, update the display with the new source timestamp and, where useful, indicate that data has resumed. Avoid replaying a burst of old updates as if each were happening now; the client should distinguish a recovered snapshot from a live change.

  • Keep “event status” separate from “feed status” in the data model and interface.
  • Specify whether recovery replaces the snapshot, replays events, or does both with clear labelling.
03 / 03

Monitor the whole path and test failure states

A provider-status dashboard alone cannot show what a user experiences. Monitor the integration from receipt through validation, storage, API response and mobile rendering. Useful operational signals include time since the last valid source observation, source-to-ingestion lag, rejected or malformed records, request failures, and the proportion of app responses marked stale. Set thresholds and escalation ownership before an event; otherwise a warning may appear without anyone knowing whether to contact the provider, investigate your pipeline or publish a user-facing notice. Keep provider errors distinct from internal processing errors so incident response starts with evidence rather than guesswork.

Test realistic failure transitions, not only successful sample responses. In a hypothetical race app, simulate a feed that slows down, stops, sends an old timestamp, resumes with a newer snapshot, and delivers duplicate or out-of-order records. Verify that the screen changes state at the agreed threshold, cached content retains its age label, and recovery does not create misleading jumps. Include the same checks in backend integration tests and mobile acceptance tests. Operationally, record who owns provider escalation, what evidence to capture, and who can change a public status message. These requirements affect scope: timestamp support, monitoring, fallback UX and test fixtures all need planned engineering effort.

  • Alert on freshness and user-visible stale responses, not only server uptime.
  • Exercise delayed, missing, malformed, duplicate and recovering-feed cases before launch.

A resilient live-data app does not pretend every feed is live. It defines freshness in terms the product can explain, separates event facts from integration health, and provides a useful, clearly labelled fallback. Before estimating or building the integration, agree on timestamp semantics, field-specific thresholds, recovery behaviour, monitoring ownership and test scenarios with the provider and product team. These decisions turn a vague “real-time” requirement into a deliverable contract—and help users understand what the app knows when the feed does not.