HomeFrequently Asked Questions

How CycleLytic measures performance, terrain, training load, and more

How is performance measured across terrain?

CycleLytic answers the question: "how fast were you really going, accounting for the terrain you were riding over?" Raw average speed is misleading — a 14 mph ride over a mountain is far harder than a 14 mph flat spin. By grouping rides into elevation buckets (based on climbing rate per mile), your speed is compared against rides of similar terrain difficulty. A higher terrain-categorized speed means better performance for that difficulty level. Over time, watching that trend is a more honest measure of fitness improvement than average speed alone.

What are the terrain buckets?

Every ride gets a "terrain rate" — total elevation gain divided by total distance, expressed in ft/mile. A ride with 2,000 ft of climbing over 40 miles = 50 ft/mi. The ride is then dropped into a bucket using that number. With a bucket size of 5 (the default), a 47 ft/mi ride goes into the 45–49 bucket; a 72 ft/mi ride into 70–74. Buckets are color-coded: Flat (<40), Rolling (40–49), Hilly (50–69), Very Hilly (70–79), and Mountain (80+). You can switch between bucket sizes of 5 and 10 in your Profile. Terrain buckets are the foundation of CycleLytic’s analysis — your score is the average speed within each bucket.

How is speed calculated per terrain bucket?

There are two layers. First, the ride-level view: each ride’s average speed is grouped into the terrain bucket for that ride, then averaged across all rides in the bucket to produce your terrain-categorized speed for that tier. Second, the stream-level view: your device records gradient, power, heart rate, and speed every second. Each second is converted to a ft/mile equivalent (% grade × 52.8) and placed into the matching bucket. Downhill sections are excluded since gravity dominates speed there. The result shows your terrain-categorized speed, average power, and heart rate at each gradient — so you can see exactly how you perform on flat roads vs. steep climbs.

What is Normalized Power (NP)?

Normalized Power accounts for the variability in your effort throughout a ride. Unlike simple average power — which treats every moment equally — NP weights harder efforts more heavily. A ride full of surges, accelerations, and recoveries will show a significantly higher NP than its average power, better reflecting the true physiological cost and metabolic stress on your body. In simple terms, think of Normalized Power as the steady, constant power output you would have needed to produce the same overall training stress if the ride had been perfectly even (no highs or lows). CycleLytic takes a different approach from apps like Strava. Our Normalized Power calculation closely aligns with Garmin’s method (based on the original Dr. Andrew Coggan algorithm), rather than Strava’s weighted average power approach. This means CycleLytic delivers NP values that are more consistent with what you see on Garmin devices and platforms that use the standard NP formula — providing a more accurate picture for serious training analysis.

What is TSS (Training Stress Score)?

TSS quantifies the training load of a ride relative to your FTP. It is calculated as: TSS = (duration × NP × IF) / (FTP × 3600) × 100, where IF (Intensity Factor) = NP/FTP. A one-hour ride at exactly your FTP = 100 TSS. Under 150 TSS is typically recoverable by next day; 150–300 may need 2 days; over 300 may need several days to recover.

What is FTP and how is it estimated?

FTP (Functional Threshold Power) is the highest power you can sustain for approximately one hour. This dashboard estimates it as 95% of your best 20-minute power from the power curve. You can also manually set it in Settings. FTP is used to calculate TSS and Intensity Factor.

What makes a ride "qualifying"?

A ride must match your selected sport types (Road, Gravel, MTB, E-Bike, Virtual) in your Profile settings and be at least 1 mile / 1.6 km in distance. Rides without power or heart rate data are included but those metrics will show as dashes where applicable.

What is Fitness / Fatigue / Form (CTL/ATL/TSB)?

These are calculated from your daily TSS values. Fitness (CTL) is a 42-day exponential average of TSS — it rises slowly with consistent training. Fatigue (ATL) is a 7-day average — it responds quickly to hard efforts. Form (TSB) = Fitness minus Fatigue. Positive form means you are rested; negative means you are carrying fatigue. Peak performance typically occurs with form between +5 and +25.

What does the Magical Day Detector show?

It identifies rides where your terrain-categorized speed was notably above your trend — faster for the terrain, higher power, or better efficiency than expected. These are the days where everything clicked.

Why is Coasting a factor — especially on Hilly or Mountain Rides?

Coasting is the share of your ride distance where you were not pedaling at all — freewheeling on a descent, sitting at a light, drafting hard, and so on. A second counts as coasting any time your power meter reads zero watts (you are not turning the pedals); any positive wattage counts as working. Your headline stats (NP, average speed, ft per mile) average across the whole ride, including those descent miles where you contributed nothing — which under-states how hard you were actually working on the climbs. When Coasting is meaningful (above 10%) we surface a "Working only" line on the ride detail page showing what the same metrics look like over just the seconds you were actually pedaling. On flat or rolling rides where you barely stop pedaling, Coasting will be a small number and the headline stats already paint an accurate picture; the metric is most useful on hilly and mountain rides.

How does CycleLytic decide two rides are the “same route”?

We compare the GPS tracks, not ride names. Two rides group as the same route only when their paths line up almost exactly: similar total distance (within ~10%), start points close together, at least ~92% of each track sitting within 100 metres of the other (checked both ways, so a short ride can’t “match” a long one just by sitting inside it), similar total climbing (within ~25%), and the same direction of travel. Matching is same-direction only — a loop or out-and-back ridden the opposite way is treated as a different route, because reversing it changes the effort entirely (climbs become descents, the hard parts land at different points). The strictness is deliberate: a “route” should be genuinely comparable effort-to-effort. If two rides you expected to match don’t, it’s usually because you cut it short, added on, took a detour, rode it the other way, or GPS drift pulled the track off the road.

What does the “∗ BEYOND ROUTE” flag mean?

Sometimes a ride covers an entire route but then keeps going — an extra loop, an out-and-back spur, or a bonus climb tacked on the end. Geometrically it still contains the route, so it matches, but it isn’t a like-for-like effort, because you rode substantially more than everyone else in that group. Rather than silently mixing it in (which would make your “time on this route” look slow), we keep it in the group and mark it with an orange ∗ plus a note. A ride gets flagged when it exceeds the group’s typical distance by about 1.18×, or its total climbing or moving time by about 1.22×. The flag is just a heads-up: this one overlaps the route but is a longer ride, so don’t read its time as a straight comparison.

How are segments matched — and what’s the difference between Strava and CycleLytic segments?

There are two kinds. Strava segments: Strava itself detects when your ride passes through one of its segments and records your effort; we simply read those from your activity (we never re-match them, and we only ever pull your own efforts). CycleLytic segments: segments you create by drawing a stretch of road — we match your rides by the same GPS-path approach used for routes, counting an effort when your track covers the segment closely enough and in the same direction it was drawn. Both are directional, same as routes: riding a segment’s road the opposite way is not an effort on it — to track a stretch both ways, create two segments (one each way). They appear together on a ride’s Segments list, with CycleLytic segments marked so you can tell them apart.

What segments does CycleLytic pull from Strava — and what does it not?

We keep this deliberately narrow, for your privacy and to stay within Strava’s API rules. We pull: your own segment efforts (your time, plus the segment’s basic details) and basic info for segments you’ve ridden (name, distance, elevation, map/elevation shape). We do not pull: public leaderboards, KOMs or QOMs; other people’s efforts (the one intended exception is a rider you’ve connected with in Community or who shares their dashboard with you, where you see their own efforts — never a stranger’s); or segment “explore”/discovery near a location. Two edge cases: if the community flags a segment as hazardous, Strava strips its leaderboard and achievements, but your own effort still comes through so your history is unaffected (we never show leaderboards anyway); and private segments you created show up only in your own ride data. In short: your own segments and efforts, yes; everyone else’s rankings and Strava’s wider catalog, no.


← Home