One signal, three stories.
HRV is a parasympathetic stress detector. It crashes when the body is under load, but it does not differentiate between kinds of load. Training fatigue, broken sleep, viral infection, dehydration, emotional stress, they all look the same on the HRV chart. A 35 to 40% drop reads as "system under stress" regardless of cause.
The cause matters. Training stress wants light recovery and the next workout adjusted. Illness wants rest, sleep, and load drops until the body clears it. Reading the wrong cause means doing the wrong thing. This case study shows three HRV crashes inside one user's data over five weeks, same biomarker signature, three different causes, three different responses. The differentiation lives in the surrounding data.
The cause is what determines the management.
How to read this case.
Throughout this case, three colour codes do the work of differentiation. Amber marks crashes caused by training stress and disrupted sleep. Red marks crashes caused by illness. Cyan is the body's baseline state, recovery and signal.
Each crash is read in two layers. The first is the biomarker itself: HRV, RHR, sleep duration. The second is the context: what the user was doing, what they noted, what their sleep architecture looked like the night before. The biomarker says something is wrong. The context says what kind of wrong, and what to do about it.
Training + sleep stress.
"recovery wasn't fantastic"
On 27 April, the user's HRV peaked at 54ms, the highest reading in the entire case window. The annotation that day described the workout as the best post-Hyrox training session he'd had: 3x10min intervals at sub-4-minute kilometre pace. Body was firing.
Four days later, HRV had crashed to 23ms. No symptoms. No illness annotation. Just a note: "recovery wasn't fantastic." The user swapped his planned strides session for a Z1 cycling recovery ride.
Between the peak and the crash, the data shows four consecutive load days, one early-morning wake with a young child in the household, two short sleeps, and a sustained heart-rate session that pushed HR into LT2 territory. The body wasn't fighting anything. It was depleted.
Steady monotonic fall over four days. 54 → 45 → 43 → 37 → 23 No partial recoveries. No bounce-backs. The body trending one direction, depletion accumulating.
1h 20m (19.6% of total sleep). Within normal range. The body wasn't preparing for an immune fight. It was just under-rested.
The differentiation lives in what's absent. No sleep extension on the crash night (7h 04m, below the user's 7h 24m average). RHR climbed across the week, peaking at 55bpm on the crash day. No symptoms. No annotation suggesting illness.
The cumulative training load, three sessions in three days plus broken sleep from a household wake, explained the crash without invoking infection. Recovery took one day because the body wasn't fighting anything except its own fatigue.
Illness, overridden.
"may have caught something"
The 20 May crash is the longest-running of the three. Looking back from the crash day, the data shows roughly six days of soft signs before HRV finally fell off, none of which the user acted on at the time.
Sleep architecture broke down on 14 May (1 hour of awake time during the night, anomalously high). Mood and energy hit their lowest scores of the case window on 15 May (6/10 across the board). On 16 May, the first verbal acknowledgment appeared in the annotations, a household member was sick. By 18 May, the user noted feeling "a tad flatter." Energy and mood stayed depressed on 19 May.
HRV had been drifting downward across all of these days. On 20 May, it crashed to 24ms. The annotation: "may have caught something." Rest day declared.
Wobbly. 41 → 45 → 39 → 37 → 35 → 38 → 24 The body fought, partially recovered, then crashed. This is what HRV looks like when the immune system is engaged but the user keeps adding training load on top.
1h 05m (15.3% of total sleep), the lowest single-night REM percentage across the entire case window. Reduced REM is associated with compromised immune function. The night before the crash showed it.
The differentiation appears in two places the training-stress crash didn't show. First, sleep extended dramatically on the crash day (8h 26m versus a 7h 24m baseline, over an hour above average). The body forced itself into recovery sleep. Second, the warning period stretched back nearly a week with multiple signal channels lighting up: sleep, check-ins, household exposure, subjective feeling.
RHR stayed flat across the lead-up (52-54bpm), the heart wasn't being pushed by training; the body was just slowly losing the fight. Where Crash 01 showed RHR climbing, Crash 02 showed RHR holding while the immune system worked.
Recovery cost three days. This is the cost of overriding signals.
Illness, pre-empted.
"sore throat... early night"
Five days after returning to baseline from Crash 02, HRV peaked at 46ms on 25 May. The next day, it dropped to 38ms, an 8ms decline back to baseline with no clear cause. The user noted no symptoms. The training plan called for a hard run that day.
The user dropped the run. Replaced it with a mixed cardio session of significantly lower intensity. Reason recorded in the annotation: "to reduce load." No other explanation. Just the dip.
Twenty-four hours later, HRV crashed to 30ms. The annotation that morning: "sore throat... early night." The user took a quiet evening. Slept 8h 40m with 2h 26m of REM, the highest REM duration in the entire case window. By the next morning, HRV was back to 43ms. Recovery: one day.
Sharp single-day drop. 46 → 38 → 30 No multi-day build-up. The body went from peak to crash in 48 hours. This shape, combined with the timing, suggested acute onset rather than accumulating fatigue.
1h 13m (16.5% of total sleep), second-lowest REM percentage in the entire case window. The same signal that preceded Crash 02 also preceded Crash 03, low REM as a quiet pre-symptom indicator.
The user's instinct on 26 May was correct. The 8ms HRV drop without a clear training explanation was the signal. The decision to drop load that day reduced the impact when symptoms arrived 24 hours later.
The crash itself looked structurally similar to Crash 02, sleep extended past 8h, RHR stayed flat, immune-driven physiology. But the recovery curve compressed from three days to one. Same illness fingerprint, acted on five days earlier in its cycle.
Notably, the night before the crash showed a REM percentage almost identical to the night before Crash 02 (16.5% vs. 15.3%). This is now the second time in this case window that a low REM night preceded an illness-driven HRV crash by 24 hours.
What the data shows across all three.
Three crashes. Same HRV signature each time, a drop of 35 to 40% from the user's baseline. Looked at in isolation, no biomarker tells you which kind of stress drove which crash. Looked at together with the surrounding data, three different stories appear. The table below summarises the differentiation. The colour-coding makes the categorical difference visible.
| Crash 01 | Crash 02 | Crash 03 | |
|---|---|---|---|
| Date | 1 May | 20 May | 27 May |
| Category | Training + sleep | Illness, overridden | Illness, pre-empted |
| HRV at crash | 23ms | 24ms | 30ms |
| % below baseline | −40% | −37% | −35% |
| HRV trajectory | steady decline | wobbly decline | sharp drop |
| Pre-crash period | 4 days | 6 days of soft signs | 24 hours |
| REM night before | 19.6% (normal) | 15.3% (lowest) | 16.5% (low) |
| Sleep on crash day | 7h 04m (short) | 8h 26m (extended) | 8h 40m (extended) |
| RHR direction | climbing (55) | flat (54) | flat (53) |
| Symptom note | none | "may have caught something" | "sore throat" |
| Bounce-back | 1 day | 3 days | 1 day |
| Differentiator | RHR up + no sleep extension | sleep extension + soft signs | single signal + acted early |
HRV alone is one data point. Compiled with sleep, RHR, workout context, and the user's own annotations, it becomes a diagnostic.
Three patterns emerge from the comparison.
First, sleep response is the most reliable single differentiator. Training stress crashes show no sleep extension, the body is depleted but isn't fighting anything that requires extra rest. Illness crashes show clear sleep extension as the immune system takes the resources it needs.
Second, the shape of the HRV decline carries diagnostic information. Steady declines suggest accumulating load. Wobbly declines suggest the body fighting something while still being pushed. Sharp drops suggest acute onset. Reading the curve before the crash, not just the crash itself, narrows the cause.
Third, REM sleep the night before may function as a pre-symptom indicator for illness. Both illness crashes in this case window were preceded by nights with REM percentages at the bottom of the user's range (15.3% and 16.5% versus a typical 22 to 28%). The training-stress crash was not. This is one user, one window, not a conclusion. But it's a signal worth watching across more cases.
How to read this in your own data.
No HRV reading is self-explanatory. A 35% drop tells you something is happening; it doesn't tell you what. The reading lives in the context, and the context only becomes legible when biomarkers and annotations are compiled together.
Three questions to ask when HRV crashes:
These are the questions Me. is built to surface.
Methodology.
Data sources. All biometric data in this case study was collected via Apple Health on the user's iPhone and Apple Watch. Sleep staging, HRV, and RHR are derived from Apple's algorithms. Workout data was recorded by the same device. Annotations and daily check-ins were entered manually by the user via the Me. app. All data is stored on-device.
Baseline calculations. The user's HRV baseline (38ms) is the average HRV value across the case window. RHR baseline (52bpm) and sleep baseline (7h 24m) are calculated the same way. These are personal baselines, not population norms. HRV in particular varies dramatically between individuals, a 23ms reading is meaningful for this user against their 38ms baseline; it would not be diagnostic on its own without that context.
HRV measurement. The HRV values shown are daily averages reported by Apple Health, typically measured during sleep or rest. Single-point HRV readings are noisy; the daily averages used here are more stable but still subject to measurement error.
The concern zone. The shaded area below 30ms in the charts represents 21% below the user's baseline. It is not a universal threshold. It is a visual cue for this user's meaningful deviation.
What this case study is not. It is not a medical assessment. None of the crashes were diagnosed by a clinician. The illness identifications are based on the user's symptom notes and the biomarker patterns. The case study demonstrates a reading framework, not a diagnostic tool.