Race Report: 2025 Ironman 70.3 Coeur d’Alene
There’s always something going on with the weather in Coeur d’Alene. Last year, high winds on race day forced the swim to be shortened and made for a nerve-wracking bike leg; the year before, I got hit by a gnarly surprise hailstorm on the bike; and although I wasn’t there, 2021 was the infamous “Coeur de Flame,” with a high of 38.3ºC and one of the highest DNF rates on record for a full Ironman. It’s enough of a recurring theme that at the end of my race report for last year’s race, I jokingly wondered what the weather would hold for this year.
The answer: Despite a threat of cold temperatures and rain in the days leading up to the race, it turned out to be an almost perfect day for racing.
* * *
After last month’s race in St. George, where I suffered miserably in the heat, I’ve spent the past few weeks working to improve my heat acclimation in case there was a repeat of the “Coeur de Flame” situation. Even if that didn’t happen, I wanted to be prepared for, you know, normal late June temperatures, so imagine my surprise when I looked at the weather forecast for Coeur d’Alene a week out and saw a low of 7.2ºC, a high of 15.6ºC, and a 50% chance of rain on race day.
I didn’t have specific time goals for this race other than “go hard, leave nothing on the table, be faster than last year,” but that still threw a wrench in my planning. Instead of preparing for the heat, I had to figure out what to do with the opposite situation: At 32 km/h on the bike, 7.2ºC feels like 2.8ºC; add starting the bike wet from the swim, and the risk of hypothermia is real—in 2017, one triathlete was hospitalized and about thirty others showed symptoms of hypothermia at the Napa Valley Triathlon, a particularly cold race with 2.8ºC air and 13.9ºC water.
The forecast wasn’t quite as cold as that, but still cold enough to be at risk for hypothermia, especially if it rained. That could be particularly dangerous considering how technical this course is—mental confusion and loss of reflexes are two of the symptoms of hypothermia, and that could prove disastrous on one of the many steep descents at this course. A comment on Reddit from someone who participated in that triathlon in Napa Valley described exactly what I wanted to avoid:
> Comment
> byu/ryuns from discussion
> intriathlon
After researching cold-weather races, asking for advice on Slowtwitch and TrainerRoad, and consulting with my friend Kristin, I narrowed down my options to:
1. Wear my normal kit, tough it out, and hope hammering the bike would warm me up. This was a gamble—if it turned out to be colder than expected and I started developing hypothermia, I might have to DNF, or worse, I could crash on the bike. Even simply fumbling a bottle because my hands are numb could ruin my day (and I’m particularly prone to that after a bad case of frostbite on my hands a couple of years ago).
2. Wear warm clothing during the bike leg, such as a winter cycling jersey or a rain jacket. This would slow me down quite a bit and potentially turn my race into a “just finish” kind of day, but if that’s what it took to make it back safely, then so be it.
In either case I’d do my best to dry myself as thoroughly as possible before getting on the bike, and wear full-finger gloves and toe covers to keep my extremities warm. Otherwise I’d monitor the weather, keep both options on the table, and make a final decision before hopping on the bike. I hoped the weather would shift, but I also made up my mind not to stress about it and, no matter what, just go out and enjoy myself out there. I’ve found that my mindset going into a race is one of the most important factors—if I get stuck in the mindset that I’m going to have a bad day, I’ll somehow find a way to make it happen.
### Pre-race preparations
I arrived in Coeur d’Alene the Thursday before the race, and after checking into my hotel and unloading my car, I went out for a race pace run on the North Idaho Centennial Trail. It’s a lovely place to run, through fancy neighborhoods along the Spokane River and the shores of Lake Coeur d’Alene. The weather was perfect; overcast, but not too cold or too warm, although Garmin Connect kicked my heat adaptation score up a few points. Shame I wouldn’t need it.
The next day, I went to the Ironman Village as soon as it opened to check in for the race and attend the pre-race briefing, where I was curious to hear what they had to say about the weather. The briefing validated my race day strategy—the announcer warned about the cold temperatures after the swim and suggested having dry layers in transition, bringing a towel to dry off as much as possible, and wearing a jacket and gloves out on the bike course, all things I was already considering. The water temperature that morning was 20.1ºC, so there was no mention of shortening or canceling the swim, but after last year’s Ironman Canada, where a rainy day before the race caused Okanagan Lake to turn over and the water temperature plummeted overnight, I didn’t think either of those things was out of the question. I mentally made plans for that, too.
Saturday was my usual pre-race routine: Rest, carb up, and watch shitty hotel TV while I check, double-check, triple-check, and quadruple-check all my gear, which consisted of:
* Roka Gen II Elite trisuit. I briefly thought about wearing tri shorts for the swim and then putting on a winter jersey in T1 and a running top in T2, but my jersey fits just fine over my one-piece trisuit, and I wanted the option to leave the jersey behind if it turned out to be warmer than forecast.
* The water temperature wasn’t a concern, so I brought my Roka Maverick Pro II sleeveless wetsuit, which I’ve worn without issues in colder temperatures. I brought a neoprene hat just in case the water temperature dropped, though, one of the lessons I learned from Ironman Canada last year.
* For the bike leg, I brought my usual setup: My Trek Speed Concept, Shimano S-Phyre SH-TR903 shoes, and Giro Aerohead helmet. I also brought my Rapha winter toe covers and winter jersey, plus a pair of running gloves I grabbed from REI before leaving Jackson. I normally wear lightweight non-cushioned Darn Tough running socks for the bike and run, but this time I wore cushioned ones, thinking the extra thickness might provide a little more comfort.
* I dusted off my Core body temperature sensor and set up its data field on my bike computer, mostly out of curiosity to see if it could give me an early warning of hypothermia if the weather got particularly bad.
* The forecast showed the temperature would be at least 15.5ºC during the run, so I didn’t make changes to my running gear: Hoka Cielo X1 2.0 shoes, Roka Matador Air sunglasses, and a regular hat. (Uh, and the trisuit, of course.)
Some of my gear, laid out before the race.
In the afternoon I headed over to Coeur d’Alene City Park to check in my bike in transition. It’s a single transition, so no gear bags are provided, but I bought a bunch of crap at the expo just so I could use the plastic bag to keep my shoes and socks dry if it rained (that’s my excuse and I’m sticking to it).
Shadowfax, ready for race day.
After racking my bike, I scoped out the transition layout, making a note of the entrances and exits and the position of my bike relative to nearby landmarks, walking back and forth a few times to memorize the path I’d need to take. While I was doing that, it started drizzling and the wind picked up. I was shivering, even though I was wearing a puffy jacket and a hat; the lake looked just as choppy as it did last year. I hoped for better weather during the race, but either way, I had a good plan and felt ready for whatever Coeur d’Alene threw at me, so I went back to my hotel and settled in for a good night of sleep.
### Race day
The good night’s sleep didn’t materialize; I woke up at 3:00 AM, after getting barely two hours of sleep. I spent some time going over my gear and transition checklists to make sure I wasn’t forgetting anything while I had my usual breakfast of a plain bagel with jam and coffee. I checked the weather one last time shortly before leaving, and it seemed like cold and rain would be on the menu after all.
Brr.
Transition at Coeur d’Alene City Park on race day is open from 4:30 AM to 5:45 AM. One of the best things about this race is that it’s pretty easy to find street parking close to transition, so I’ve never had to rush or leave at the crack of dawn; I left my hotel at 5:00, and by 5:20 I was done setting up my gear. While setting up my bike computer, I noticed that its thermometer said it was 13.9ºC, much warmer than the forecast—that bode well for the rest of the day. I set up a data page on my bike computer with the temperature as a data field, and left it so it’d be the first thing I’d see once I got back to transition after the swim. I made 10ºC my completely arbitrary decision point: If it was colder than that when I got to T1, I’d wear the jersey; otherwise, I’d take my chances without it.
With the rain and wind the day before, the water had cooled down to 18.6ºC, thankfully not nearly enough for the swim to be shortened or canceled. Once transition closed, I staged myself in the 40–43 minute group for the 6:00 AM swim start. The lake looked like glass, without so much as a ripple, and I heard the announcer say, “Look at that blue sky! Isn’t that beautiful?” I looked up, and indeed, I could see a little bit of blue sky for the first time since I got there. So far it looked like we’d gotten lucky—the weather was better than forecast, and it was shaping up to be a great day for racing. I could see dark storm clouds across the lake, though, and I willed them to stay away.
### The swim
My race started at 6:34 AM. After diving in, it took me a few seconds to get my breathing under control in the cold water, but after that it felt great, since it was actually warmer than the air.
The field seemed rather small this year and officials were spacing people out, with only two people starting at a time, and lots of space between waves; I was at the front of my wave, so I had no one in front of me. It was great to be able to focus on my form without dealing with the washing machine. I just kept swimming, one buoy at a time. It was overcast, and I wasn’t sure if my goggles would be too dark for the conditions, but I had no trouble at all sighting the buoys; without the sun glinting off the surface, they stood out like beacons.
It wasn’t an issue this year, but I love that the course is oriented north-to-south so you’re not sighting into the sun.
I caught up with the previous wave shortly before the first turn buoy, so the swim got busier from there on, but nowhere near as chaotic as in other races. I just moved towards the outside and stayed out of the way.
I finished in 41:47, not quite as fast as last month in St. George, but not a terrible result for me. I still have lots of work to do on my swim, though.
### T1
After getting my wetsuit ripped off by the wetsuit peelers and running through transition, it was the moment of truth. I woke up my bike computer and saw the temperature in giant numbers: 11.4ºC.
Game on. The winter jersey was staying behind.
It was still pretty cold, mind you. I could see steam coming off my body, which I thought was amusing. I figured the gloves and toe covers wouldn’t hurt (and worst case, I could ditch the gloves at an aid station if my hands got too warm), so I took them with me anyway.
I spent a few minutes futilely trying to dry myself with a towel and left T1 after 11:54.
### The bike
The bike course is a single lap, starting with an about 30 km out-and-back through Coeur d’Alene Lake Drive before turning around at Higgens Point and heading out on a roughly 60 km out-and-back section on US-95, with a short section through downtown Coeur d’Alene in between. It’s a hilly course, with twelve categorized climbs according to Best Bike Split, and a total elevation gain of 939 m. It’s a fun, challenging bike course if you enjoy climbing, with smooth pavement and great separation from traffic; the two southbound lanes on US-95 and the streets in downtown Coeur d’Alene are all closed to traffic, so for most of the race you’re not sharing space with cars. There is one no-passing, no-aerobars zone at about the 80 km mark, in the last, steepest descent before coming back to Coeur d’Alene. There, you’re riding in the shoulder, with only a couple meters of space between the rumble strip and the barriers. That particular descent is a little sketchy, but in general you do need to be comfortable with bike handling on fast, steep descents—both times I’ve done this race I’ve seen the aftermath of bad crashes during the descents. They’re no joke.
View this course in Garmin Connect or Strava.
I set up a power guide in my Garmin targeting an intensity of 80%, which according to Best Bike Split would give me a finish time of 2:41:18 and put me in the green zone of my TSS table. I thought about trying to go a little harder since I expected it to be cold, but I didn’t want to risk overbiking and then falling apart on the run. 80% seemed like a good balance; I could hammer the climbs, recover on the descents, and hopefully that’d keep me warm while leaving enough in the tank for the run.
Bike pacing table for Ironman 70.3 races. Credit: TriStar Athletes
To fuel that effort, I brought two 24-ounce bottles of Maurten Drink Mix 320, for about 80 g/h of carbs, which has worked well for me in previous races. I carried them both between my aerobars; even though the new World Triathlon hydration rules aren’t being enforced yet by Ironman in age groups, I managed to get my setup within spec. I haven’t tested if this is actually aerodynamically faster than having one bottle between the aerobars and one behind the saddle, but at least it’s practical: Since I have side-loading cages, I can grab a bottle, take a sip, and put it back without ever coming out of aero, which is nice.
I also have the option of swapping that top cage for a torpedo bottle, but this setup works quite nicely.
With my trisuit still wet, I was _freezing_ after leaving T1. I used the first segment through downtown Coeur d’Alene to spin up the legs, shake off the cold, and hopefully warm up enough before I hit the first short climb on Coeur d’Alene Lake Drive. That didn’t quite work; when I started that climb, I felt… off. My legs just didn’t seem to have any strength. My quads ached, and I was feeling a disconcerting amount of muscle burn for the middling power I was putting out. I hoped it was just the cold, or else I was about to have a very long day in front of me, especially once I hit the bigger climbs.
Somewhere on Coeur d’Alene Lake Drive—I was still freezing my ass off here. Credit: FinisherPix
However, by the time I crossed the bridge over the Spokane River and got on US-95, the clouds had parted, the sky was blue, I was warm, I was dry—I felt revived. I don’t think I’ve ever been more glad to see the sun. The weather was gorgeous, and I could feel my strength coming back. I put that to the test on the first big climb after leaving Coeur d’Alene, the Cougar Gulch climb, a 2.4 km segment at an average grade of 5.6%. I finished it in 8:13, about thirty seconds faster than last year. That felt pretty good, I _did_ have the legs for this after all.
I enjoyed the hell out of the outbound leg after that—it was just a great day for a bike ride. I think I did a decent job of pacing. With only about a thousand people on the course and an entire lane of highway to maneuver, I had no problem following my power cues closely. I simply stayed in aero, held my power, and passed people with ease. I saw plenty of referees on motorcycles, but blocking and drafting weren’t an issue at this race as far as I could tell. In hindsight, I probably could have left the gloves and toe covers behind, but I don’t think it would have made much difference.
Here comes the sun, doo-doo-doo-doo. Credit: FinisherPix
The clouds came back shortly after the turnaround. The wind picked up and the temperature dropped noticeably, although not enough to be a problem; I was still quite comfortable. I started getting that unpleasant feeling of getting buffeted by the gusts, though—I hate it. I was riding in what felt like a strong crosswind, but admittedly spent more time than I would have liked sitting up to get a little more stability, which slowed me down quite a bit. In any case, it didn’t last very long and the rain in the forecast never materialized.
After clenching all the way back down the last descent through the no-passing zone, I was relieved to be safely back in Coeur d’Alene. I finished the bike leg in 2:46:03, with a final intensity of 77%, only five minutes slower than predicted by Best Bike Split. The initial misfire after leaving T1, the wind after the turnaround, and coasting through the no-passing zone probably explain the lower intensity, but overall I’m pretty happy with my performance. More importantly, I’m happy with how I handled the weather uncertainty; I’m glad the cold turned out not to be an issue, but I was prepared for it. I had a plan, I executed it, and it worked out. There’s very little I would have done differently—I’d call that a win.
### T2
When I got back to Coeur d’Alene the sun was out again and it had warmed up to what felt like the upper tens—perfect weather for racing. I didn’t waste time; I racked my bike, swapped my bike gear for running gear, used the porta-potty, and left in 6:03.
### The run
I came out of T2 _hot_ , despite my legs feeling like jelly after the bike leg. I had to consciously slow myself down and not let the race adrenaline get the best of me; my pace for the first few minutes was 4:18/km and I didn’t even notice until I looked at my watch. My goal of “go hard, leave nothing on the table, be faster than last year” meant holding a pace faster than last year’s 4:58/km, but I didn’t want to go so hard that I blew up partway through.
The run course consists of two laps around McEuen Park and neighborhoods in downtown Coeur d’Alene, before heading out on Coeur d’Alene Lake Drive and back, with 114 m of elevation gain. This is my favorite run course in all the races I’ve done so far: there are supporters everywhere, there’s tons of shade, and the variety of the neighborhoods you run through breaks up the course nicely so it never feels like a slog. The segment through Coeur d’Alene Lake Drive is the only one that’s really exposed to the sun and it’s slightly uphill, but it’s not very long and there’s an aid station at the end. It’s just a great course, and time seems to fly by.
(One of my favorite moments at this race was towards the end, when a group of girls asked me, “Is this your second lap?” I didn’t have the presence of mind to do much more than nod, but when I did, they cheered me on with such sincere intensity, as if they were personally invested in me, a complete stranger, finishing the race. I thought that was heartwarming and cool, and that’s the vibe I’ve gotten from the spectators every time I’ve come here.)
View this course in Garmin Connect or Strava.
By now the weather was pleasant and sunny, and I thought I probably wouldn’t need a ton of water or electrolytes, so my plan was to skip most of the aid stations except to grab a gel roughly every thirty minutes. About halfway through the first lap I realized that was probably a bad idea; I was going at a pretty hard pace and the aching and burn in my quads I felt at the beginning of the bike started coming back. I wasn’t sure if that meant I was going too hard, or had gone too hard on the bike, or perhaps needed water and electrolytes, so I reverted to my usual strategy: Walk through every aid station to hydrate and recover.
Action shot! Credit: FinisherPix
That seemed to do the trick, for the most part. I kept a hard pace that sometimes felt like I could barely make it to the next aid station, recovered while I grabbed water or a gel, and did it all over again. My nutrition consisted of two Maurten 100 gels (the last one caffeinated) and a couple of bites of Maurten bars for some variety. I had water at every aid station I stopped at, and a couple cups of Mortal.
The first lap was hard; the second lap was _punishing_ , despite the pleasant weather and cool block party vibe of the run course. It was one of those runs where I get that voice in my head telling me to just slow down, just walk, just stop, just give up, and then I have to tell it shut up, shut up, _shut up_. After the last turnaround I tried to push the pace, but it really felt like I was redlining it. I was going as hard as I could, my legs were in absolute agony. Shortly before arriving back in McEuen Park for the last stretch before the finish line I ran past three wild turkeys, and I did a double take; I swear to god, I thought I was hallucinating. I asked a race volunteer nearby and he confirmed they were very real (although it’s possible he was a hallucination too). I’m not kidding when I say this was an all-out effort.
I reached the last stretch on Sherman Avenue and I could see the finish line a few hundred meters away, at last. I planned to sprint to end with everything I had left, but I had two people in front of me and I didn’t want to ruin their finish line photos, so I hung back and slowed down to high-five the spectators on the sidelines, which made crossing the finish line feel extra joyful.
And that’s a wrap for this race. Credit: FinisherPix
I finished the run in 1:44:35, for a final pace of 4:52/km and a total time of 5:30:22. I was 16th in the M40–44 age group, out of 95, and 209th overall, out of 1,021 finishers. I am blown away by this result—16th place is my best ever in an Ironman-branded race. My finish time is also my personal best for a 70.3 (not counting Tri-Cities last year, which had a current-assisted swim).
After all the stress over the weather, this turned out to be a nearly perfect race for me. I can’t believe it.
* * *
That afternoon, I attended the awards and roll-down ceremony at the Ironman Village. With my 16th-place finish, I thought I had a slim shot at a World Championship slot. Here’s how it works: Each race gets a number of qualification slots for the Ironman 70.3 World Championship, which this year is in Marbella, Spain. This race had fifty slots, allocated proportionally to each age group. Mine had four, offered to the top four finishers. If any of them declines, the slot “rolls down” to the next person in line, and so on until all the slots are claimed.
In my age group, the last slot was claimed by the person in 13th place—just five minutes ahead of me. _Five minutes_. That’s all that kept me from qualifying for the World Championship.
In the past, I’ve joked that my plan to get to Worlds is to outlive everyone and qualify in the 90–94 age group. But this made me realize this goal I thought was out of reach might be closer than I imagined. If I work on my swim, make my transitions a little quicker, get a little stronger on the bike, a little faster on the run, and get a little lucky with the right conditions at the right race… qualifying might not actually be out of reach. And that feels really, _really_ good.
Next up: Ironman 70.3 Boise. After this result, I’m raring to go. Let’s do this.
*[DNF]: Did Not Finish
*[TSS]: Training Stress Score