Time in Hand

How the model works

Every number this tool uses to predict your pace is on this page, read straight out of the code that uses it. Nothing here is a description of the model — it is the model's own settings, so it cannot drift out of date while the code moves on.

The model is deliberately simple. It is a planning tool, not a physics simulator, and the standard it is held to is being honest rather than being precise. Publishing it is the point: you cannot sensibly bet a brevet on numbers you are not allowed to see.

What goes in

The model works its way along the route in pieces of about 500 m, and for each piece it asks one question: how fast, here, at this moment. Speed is your base speed multiplied by three factors — the gradient of that piece, how far you have already ridden, and whether it is dark.

Distances for the model come from the GPX, because that is what actually costs you time. The official opening and closing times never do — those are always computed from the organiser's declared distances.

Gradient

Each piece of road falls in a band, and the band carries a multiplier on your base speed. Your hilliness setting stretches those multipliers — but only the climbing penalties, never the descents. Nothing about a rider's climbing legs makes them descend faster, so a rider who says hills hurt can never come out with a quicker plan on a rolling course than one who says they do not.

Gradient bands and their speed multipliers
GradientLowMediumHigh
Below −3%1.251.251.25
−3% to −1%1.151.151.15
−1% to +1%111
+1% to +3%0.910.850.79
+3% to +6%0.790.650.51
+6% and steeper0.70.50.3

The middle column is the published table itself: medium is a scale of 1 by construction, so it can never drift from the defaults. Low stretches each penalty by 0.6 and high by 1.4. A band's upper bound is exclusive, so a gradient sitting exactly on a boundary falls in the gentler band above it.

Fatigue

Speed falls with distance already ridden, by a fixed fraction per 100 km, down to a floor it never goes below. The published coefficient is 0.015 per 100 km and the floor is 0.8 of your base speed.

Fade rate settings and their coefficients
SettingPer 100 km
I fade a bit0.009
I fade normally0.015
I fade a lot0.021

The three settings are the one published coefficient stretched by the same scale the hilliness setting uses, so “normally” is the published figure exactly rather than a fourth number invented to sit beside it. At the published rate the floor is not reached inside any ACP brevet distance; it is a guard against a mis-set coefficient rather than an effect you will ride into.

Night

Riding in the dark carries a multiplier of 0.95. Dark means between civil dusk and civil dawn — the sun's centre more than 6° below the horizon, which is a solar zenith angle of 96°.

Sun position is computed from the route's own coordinates and the UTC instant, with no API call and no timezone database — so it works in a lay-by with no signal, and it cannot be an hour out on the weekend the clocks change. Each piece of road is judged at the moment you start it rather than at its midpoint, which avoids needing the answer before the question can be asked.

Stops

Dwell is where plans quietly go wrong: it is the part riders under-estimate most and the part that varies most between a village hall and a PBP control. These are the defaults per control type, each the midpoint of the specified range rather than its pessimistic end — conservatism belongs in a safety buffer you set and can see, not buried in a default.

Default stop lengths by control type
Control typeMinutes
Start0
Finish0
Info control8
Commercial control8
Staffed control20
Meal stop40

A sleep block placed on a control costs the sleep itself plus 25 minutes of overhead — finding the bed, boots off, boots on. A figure you type in for a control is used exactly as typed, big-event multiplier and all left out: if you have named a number you have already accounted for the queue. Only the defaults scale, because only the defaults are a guess about a control the model has never seen. Where you would arrive before a control opens, the wait is added to your stop there rather than quietly dropped.

Recalibration, when you replan mid-ride

When you enter the times you actually reached controls at, the model does not simply shift everything later. Shifting is falsely reassuring: a rider down on schedule is usually down because they are riding slower than modelled, and a projection that assumes modelled pace from here tells them their deficit will hold constant when it will grow. It is the most dangerous number this product could emit.

So it fits an observed pace ratio over everything you have anchored — one ratio of modelled riding time to observed riding time, which is already weighted by distance — and applies it to the road ahead. It is applied only once there is enough evidence: 50 km anchored, or at least 2 anchors. Below that it is still computed and still shown to you, but it is not applied, with the reason stated. One anchor thirty kilometres in is noise, and projecting a whole event off it would be worse than projecting off nothing.

Where you recorded a departure as well as an arrival, slow riding and long stops separate exactly. Where you recorded only an arrival, the model assumes you took the planned stop and charges the rest to pace — so an unrecorded hour in a café makes you look slower than you are. That is a stated assumption rather than a hidden one, and it is the reason to capture departures when you can.

The pace you need is then quoted against whichever downstream deadline actually binds, which is frequently not the next control, and always as two figures: an overall speed including your remaining stops, and the moving speed that implies. A moving target that ignores the stops still to come is the arithmetic that times people out.

What the model does not use

Weather. There is no wind or temperature factor, and there is not one by design rather than by omission. It would be circular — your arrival time picks the forecast hour and the forecast changes your arrival time — and it could not be calibrated against the honest-rather-than-precise standard the rest of this page is held to. Keeping it out entirely is also what lets a plan be recomputed at 3am with no signal. A forecast may still appear beside your plan; it will never move a number in it.

Your preferred sleep window. The rider profile collects it, and today it plays no part in the numbers — it is carried for a later version that suggests where to sleep. Sleep affects your plan only where you place a block on a control yourself.

Given the same inputs, the model returns the same plan every time. It reads no clock of its own and calls nothing over the network, which is what makes a replan at a control a calculation rather than a request.