I started with a deceptively simple question: if I want to act just before a horse race starts, what time should I count down to?

The printed schedule seems like the obvious answer. When a race is delayed, a new start time should replace it. A program can then wait until the chosen moment, check that betting is still open, and act.

That is the tidy version. The live data showed something much less tidy.

I followed the start-time and betting-status messages over five race days. The analysis included 111 Swedish races whose actual start followed their printed schedule. The median was already 54 seconds late without an earlier update. At the 90th percentile, that silent drift was 5.1 minutes.

For the most delayed races, the system often learned the corrected start only after the horses had already left.

Following one delayed race

The first figure follows race 8 at Romme on May 26, 2026. It was scheduled for 20:56 but actually started at 21:14:06, just over 18 minutes late.

Figure 1

Known start time through an 18-minute silent delay

The printed start becomes increasingly overdue for 18 minutes while betting remains open and no replacement start time appears.

The black line shows how long the latest announced start had been in the past. It rises from zero at the printed 20:56 schedule to 18.1 minutes at the actual start at 21:14:06. The green ribbon shows that the pool remained bettable throughout the blind interval.

The black line shows how long the latest start known at that moment had already been in the past. At 20:56 it begins at zero, but the race does not start and no replacement time arrives. It then rises minute by minute as the printed start becomes increasingly stale.

The red area therefore measures time without a future start to count down to. The program knows that the pool is still open, but not when that window will end. I call this interval flying blind.

For this race, the blind period lasted 18.2 minutes. The green strip across the top is important: betting remained open throughout it. There was plenty of clock time in which a bet could theoretically have been placed, but no reliable timestamp said when that window would end.

What happened at the actual start

The second figure zooms in on the few seconds around the actual start. The horses left at 21:14:06. The message confirming that the race was underway arrived 8.9 seconds later.

Betting closed in that same instant.

Figure 2

Signals arriving after the actual start

Betting remains open through the actual start, then the start confirmation and betting close arrive together 8.9 seconds later.

The race begins at 21:14:06. The recorded start time first appears about 3.5 seconds later, already too late to become a future target. Betting remains open until +8.9 seconds, when the start confirmation and betting close arrive together. That leaves zero seconds in which to act on the confirmation.

So the sequence was:

  1. The scheduled start passed.
  2. Betting stayed open for another 18 minutes.
  3. The horses started without a new future start time being announced.
  4. The definitive status confirmation and the betting close arrived together, 8.9 seconds after the horses had left.

This was not a slow reaction inside my program. The messages were applied in well under a second after they arrived. The missing time was upstream: there was no useful start announcement to react to.

There are two related messages in the data. The recorded start time was first received about four seconds after the actual start. That was already too late to serve as a future target. The start confirmation and betting close followed at +8.9 seconds. The comparison figure below retains both events.

All 12 races with at least five blind minutes ended without advance notice

From 25 to 29 May 2026, 12 races spent at least five minutes flying blind. Three of the 12 received an earlier replacement start time, but every race still ended with a final start that had no advance notice. Across all 111 races whose actual start followed the printed schedule, the median blind drift was 54 seconds and the 90th percentile was 5.1 minutes.

Figure 3

Twelve races with at least five minutes flying blind

Twelve delayed races shown on separate linear scales for minutes before the actual start and seconds after it. Three received an advance update, while every recorded start time arrived after the race began.

Each row is one race. The blue row is the example followed in Figures 1 and 2. The left panel uses minutes before the actual start: grey crosses are printed schedules, while green lines run from receipt of an advance update to its newly announced start. The right panel uses seconds after the actual start: red dots show when the recorded start time arrived, and purple diamonds show betting close. Keeping the two linear scales separate makes both the long delays and short closing intervals readable without distorting either one.

The boundary between the panels is the actual start. On the right, each red dot shows when the recorded start time was received and each purple diamond shows when betting closed. The purple interval is useful timing evidence, but it is not a valid betting window: it occurs after the horses have already left.

Three races did receive an early replacement time. Those are the green lines. But all three slipped again and ended with a final start that had no advance notice.

The other nine races never received a useful forward update at all. Their best notice was negative: the corrected time arrived three to seven seconds after the horses had already left.

That made the result surprisingly consistent. Every one of the 12 races ended with a final start that had no advance notice, even though the length of the delay ranged from about five to 23 minutes.

Why a countdown cannot solve this

A countdown-based strategy needs a future target. In simplified form, its rule looks like this:

act when the known start is close and betting is still open

During a silent delay, those two conditions never overlap in a useful way. Before the scheduled time, the countdown works but points to the wrong start. After the scheduled time, its target is already in the past. When the recorded start time finally arrives, the race has started and the pool is closing.

Changing the lead time does not fix that structure. Nor does polling more often. The problem is not choosing the perfect countdown; it is that there may be no trustworthy future time to count down to.

This leaves two honest options:

  • Treat a stale schedule as a reason to skip the race.
  • Build a separate strategy around observable live state, such as the pool still being open and a start-status message arriving, rather than pretending to know the future start.

The first option is safer. The second may be useful, but it is a different decision rule with different risks. What should not happen is silently inventing a new start time from the current clock.

What I took from it

I expected delayed races to be a latency problem: get the update faster, react faster, and leave a little more safety margin.

Instead, the difficult part was the absence of an update. The printed schedule was not a precise start anchor even for ordinary races, and the largest delays were not reliably repaired by a new forward-looking time.

The sample is small—111 races whose actual start followed schedule over five days—so the 9-of-12 split should not be treated as a long-run prevalence estimate. A longer observation window is needed for that. But one operational conclusion does not need a prevalence estimate: a system that requires an accurate countdown must be designed for the case where that countdown does not exist.

The safer lesson is simple: when the only start time you know is already in the past, admit that you do not know when the race will begin—unless you are there to see it.

The three standalone figures were generated from the same canonical point-in-time data reconstruction used for this analysis.