Race Report: 2026 Ironman 70.3 Coeur d’Alene
Coeur d’Alene has been one of my favorite races ever since I raced my first full-distance Ironman here in 2023; it has a lovely swim, a challenging bike course, and one of the best run courses in North America. While I DNF’d that first full-distance race, I’ve had good results at the 70.3 distance here—last year I was about five minutes away from qualifying for the World Championship. With St. George discontinued, this race immediately became my A race, my top priority for the year, and the one I would peak for.
I wanted to improve on that result, so my goal this year was simply to be faster than last year—anything under 5:30 would be a success. My stretch goal was qualifying for this year’s Ironman 70.3 World Championship in Nice, France; although the new qualification system had moved the goal posts significantly, with a good result and a little luck it was still possible one of the thirty-five slots available could roll down deep enough for me to snag it.
The weather would be a wildcard, as always. Last year had perfect weather, but not before a cold snap caused me some anxiety; in 2024, the gnarly wind forced the swim to be shortened; in 2023, I rode my bike through one of the wildest hailstorms I’ve ever seen; and 2021 is infamous for the heat wave that caused one of the highest DNF rates in Ironman history. Fortunately, it looked like the weather would be cooperating this time; with no severe weather in the forecast, conditions seemed great for my PR attempt.
Arrival & Preparations
I drove to Coeur d’Alene the Thursday before the race, and after checking into my hotel room and unloading my gear, I changed into running clothes and went out for a run—it was pretty warm out, so I wanted to see how I felt running in the 28°C weather. I ran from my hotel to the Ironman Village, which was still being set up, and back, for a total of 12 km, and despite only being 31% heat adapted according to my core body temperature sensor, I felt great, which gave me confidence the heat wouldn’t be much of an issue on race day.
The Ironman Village at Coeur d’Alene City Park officially opened the next day, so I went there as soon as it opened to check in for the race, get my race packet, timing chip, and swag, as well as do my obligatory shopping at the race expo. I stayed for the athlete briefing afterward, which was essentially the same as in previous years, since the course hadn’t changed much—as far as I could tell, the only difference was that the finish line was now in City Park itself instead of on Sherman Avenue. The water temperature that day was 17.8°C, a little chillier than in previous years, which made me glad I had brought my new sleeved wetsuit. Afterward I went on another shakeout run; I probably should have rested instead, but I love running on the North Idaho Centennial Trail along the Spokane River and Lake Coeur d’Alene. It’s such a good route.
On Saturday I went downtown for breakfast and was surprised to find most of Sherman Avenue and the surrounding streets closed for Car d’Lane, an annual classic car festival I had never seen the previous times I’ve been here. Turns out that, due to a scheduling snafu, the race was inadvertently scheduled on the same weekend as the festival, which they usually try to avoid for obvious reasons—that explained why they had moved the finish line into City Park.

It was a cool festival and I spent a good part of the morning photographing the cars, but with the crowds, street closures, and limited parking, I realized racking my bike in the afternoon might prove to be more inconvenient than usual, so I left to go get my bike and take care of that. I racked my bike in my spot, made a note of the row where it was, and walked around transition to make sure there were no changes to the layout or to the path I would need to follow on race day, but everything seemed to be where it was supposed to be.

This race does a single transition at City Park, one of my favorite transition areas. It’s covered in grass so it’s easy to run on, and has lots of shade, so the bike and gear don’t sit out in the sun all day. As is typical for 70.3s with a single transition, the race doesn’t provide gear or morning clothes bags, so you have to bring everything in your own bag on race day (I also brought one of the plastic shopping bags from the expo to put my wet wetsuit in after the race).
I checked out the swim start and exit before leaving to see what the conditions were like on the lake. It was windy as hell and it looked even choppier than two years ago, when the swim was shortened; the buoys were being battered by the wind and the waves so much they were already out of whack, and the windsock at the seaplane base next to the park was fully extended, so the wind was at least 15 knots (28 km/h). I hoped the wind calmed down before the race, but I assumed the organizers would just shorten the swim again if it didn’t, so I wasn’t too stressed about it. I went back to my hotel to organize the rest of my gear, watch the World Cup, and try to get a good night of sleep.
Race Day
I woke up at 1:30 AM and spent another hour tossing and turning before giving up on trying to fall back asleep. I didn’t feel quite right; I was more fatigued than I expected and my stomach was unsettled. For a moment I entertained the idea of skipping the race and going back to bed, but the weather forecast looked lovely, with clear skies, a high of 25°C, and barely any wind; a push notification from the Ironman app announced that the official water temperature was 18.4°C, and an Instagram story from Ironman showed Lake Coeur d’Alene looking like a mirror at the swim start. It looked like a great day for a race, and I knew if I DNS’d I would absolutely regret it, so I had breakfast, did some mobility work to try to wake myself up, and got ready to leave. Whatever was wrong with me, I’d just try to power through.
Transition at City Park is open from 4:30 to 5:45 AM, but there’s plenty of parking available in the area, so there’s usually no real reason to be there at the crack of dawn. This year was no exception; I left my hotel at 5:00 AM, found a sweet parking spot a block away from the park, and by 5:20 AM I was done setting up all my gear. I wriggled into my wetsuit and headed over to the swim staging area on the beach, lining up conservatively with the 43–46-minute wave.

Shortly before the start of the race, I heard the announcer say that the wind was starting to pick up, and that we might see some “texture” in the water. It didn’t look as bad as the day before, but it definitely looked a little choppy. (I checked the weather data after the race and the wind at the time the swim started was 16–19 km/h from the south, so a direct headwind on the outbound leg of the swim.)
Well, too late to back out, I was already in the chutes. I started my race at 6:25 AM.
The Swim
I can’t believe what I’m about to say: The Escape from Alcatraz swim was easier than this one.
I started the race with a strong pace, but the chop and the swells made it hard to get in a good rhythm; I had trouble timing my breathing correctly and ended up swallowing a bunch of water. I’m not sure if it was due to the headwind, but I slowed down to a crawl, as if I was swimming against a current. Things got easier on the inbound leg, now that I was swimming with the swells instead of against them. I figured out how to time my sighting better, at the top of the swells, so I never had trouble seeing the buoys, and I also think I did better than usual swimming in a crowd, staying on people’s feet, and dealing with contact, even after a breaststroker kicked me square in the head at the first turn buoy.
Despite that, I wasn’t much faster on the way back, and I finished the swim in 48:27, with an abysmal pace of 2:31/100 m, my slowest swim to date in a 70.3. Unlike in Boise last year, I don’t even have the excuse that it was long: Per my GPS, it was exactly 1.9 km. It was just not a good swim.

I’ve been reflecting on this, trying to understand what went wrong. In hindsight, I don’t think the conditions in the water were that bad, just choppy enough to degrade my technique, which slowed me down, which tired me out, which degraded my technique some more, and so on—a downward spiral from which I never recovered. In any case, I’m deeply frustrated by this. I thought I had made good progress on my swim this year—I’ve been getting faster in the pool, I had one of my best, most consistent swim training blocks ever heading into Escape from Alcatraz, and that swim went as well as I could have hoped, so it’s demoralizing to end this one feeling like I’ve actually made no progress at all. I know I can do better than this, and I’m annoyed at myself for failing so badly.
T1
I was tired and frustrated after the swim and I needed to get my head straight, so after getting my wetsuit removed by one of the volunteers, I walked to my bike and took my time getting my bike gear on. I spent 10:05 in T1.
The Bike
The bike course was unchanged from previous years: a single lap consisting of two out-and-backs, with a short section through downtown Coeur d’Alene in between. The first one is about 30 km on Coeur d’Alene Lake Drive with a turnaround at Higgens Point and a couple of short climbs, and the second is approximately 60 km on US-95. It’s a hilly, challenging course, with twelve categorized climbs, 940 m of elevation gain—and long, steep descents, so you do need good descending skills. That said, it’s a great bike course, with smooth pavement, lovely scenery, and good separation from traffic; the section in downtown Coeur d’Alene and the two northbound lanes on US-95 are closed to traffic, so for most of the course, you’re not sharing the road with any cars.

I left T1 and rode easy through the streets of downtown Coeur d’Alene, using the time to spin up my legs and shake off the cold before the first climb on Coeur d’Alene Lake Drive. When I got in aero I felt a familiar pain in my abdomen, which usually means I ingested air and water during the swim, but beyond that, I still felt off—I felt flat and depleted, as if I had somehow lost half my FTP overnight. I didn’t know exactly where this malaise was coming from—perhaps I was simply getting sick—but I knew the race I had planned to race was effectively over, and my only goal now was to just finish.
My slow swim had put me behind a ton of people so the first out-and-back was very congested, but that gave me time to assess how I felt and come up with a new game plan. The abdominal pain made it uncomfortable to put down power in aero position but I felt alright sitting up, so I decided to push on the climbs, recover on the descents, and do the best I could in aero on the flats. To avoid upsetting my stomach any further, I halved my planned fuel intake of two 24-ounce bottles of Maurten Drink Mix 320, which, over the course of the roughly two and a half hours I originally expected to take to finish the bike leg, amounted to about 80 g/h of carbs. The last thing I wanted was to have my stomach shut down, like it did at Ironman Coeur d’Alene, which made it impossible to get any fuel in during the run and ultimately caused me to bonk. I had set up a reminder in my Garmin to drink every 15 minutes, so my solution was simply to skip every other reminder.
That plan worked out alright, I suppose. I pushed hard on the climbs, not as hard as my power plan prescribed, but a decent enough effort that I even got PRs in a couple of Strava segments along the way. I hoped my abdominal pain would resolve eventually, but it never did, so I mostly stayed in zone 2 on the flats. I kept passing people throughout the entire bike leg, which felt pretty good—I was going surprisingly fast despite not putting in my best effort. The only changes I made to my setup were tweaking the position of my aerobars and arm scoops to give me a little extra reach, and swapping my usual Giro Aerohead for a new Rudy Project Wingdream, all of which perhaps resulted in some additional aero gains (at the expense of making me look like Dark Helmet).
The rest of the bike leg was uneventful and unremarkable, and I finished in 2:50:20, with a final intensity of 68%, far below the 80% I had originally planned. Despite that, I was surprised to finish 15th in my age group, my best result of the day. I can’t help but wonder how I could have done if I had been at my best.
T2
I was pretty spent when I got off the bike, so I took my time to walk my bike to my rack, catch my breath, get my running gear on, apply a good layer of sunscreen, and leave. I spent 9:20 in T2.
The Run
The last two times I’ve done this race I’ve started the run feeling so strong I’ve had to consciously slow myself down to avoid blowing up. That’s not how I felt this time; within a few seconds of starting I knew I would have to gut this one out. I wasn’t about to quit, though—I had already DNF’d once here, and I wasn’t going to let this course defeat me again. If I had to walk it in, so be it. I was going to finish this damn race.
The run course was essentially the same as in previous years, two laps around McEuen Park and the neighborhoods in downtown Coeur d’Alene, before an out-and-back on Coeur d’Alene Lake Drive, with 114 m of elevation gain. The only minor change this year was the move of the finish line to Coeur d’Alene City Park instead of the traditional finish on Sherman Avenue.

I’ve said it before and I’ll say it again: This is my favorite run course out of all the races I’ve done. It’s spectator-friendly, there’s a decent amount of shade, and the variety of streets you run through keeps you engaged the entire time. The whole course has a cool block-party vibe that I love, with music, supporters at every turn, and neighbors bringing out their sprinklers and garden hoses to help keep athletes cool.
It’s a really great, enjoyable course, but on this race I was suffering right from the start. The idea of running a half marathon when I was already not feeling well and after under-fueling the bike leg was daunting, so I mentally broke up the course: Each lap is almost exactly 10 km long, which makes the distance from McEuen Park to the turnaround point on Coeur d’Alene Lake Drive almost exactly 5 km. I didn’t have to run a half marathon; I just needed to run a 5K… four times. No big deal.
That helped for the first lap. I knew I wasn’t going to set any PRs, so I didn’t target a specific pace and instead paced by RPE, at what felt “comfortably uncomfortable.” I only slowed down at the aid stations to drink water and electrolytes, and had a few bites of Maurten bars, hoping that solid food instead of gels would help settle my stomach. It still hurt, but at least it wasn’t sloshing, which meant it hadn’t shut down yet.
If the first lap was comfortably uncomfortable, the second one was straight-up uncomfortable. I had two more 5Ks to go, but I was suffering more than I expected in the heat—in the midday sun, with the heat radiating off the pavement, it felt much hotter than the 25°C the forecast promised me, especially on the Coeur d’Alene Lake Drive segment, which is uphill and completely exposed to the sun. I had been trying to stay hydrated and fueled, but by now I was so nauseous I didn’t think I could get anything else in without it coming back out. I really wanted to stop, but I was sure that if I did, I’d end up walking the rest of the way. I only gave myself permission to walk the aid stations to pour water on my head and chest, and took advantage of every spectator with a garden hose and every bit of shade I could find to try to stay cool. I felt like complete and utter shit.
Still, I never stopped. Shortly after the turnaround point, with one more 5K to go, I looked at my watch, did some quick mental math, and realized I had a chance to at least eke out a sub-2 finish on the run if I kept my current pace. I made that my impromptu goal to feel like I could still salvage the day, and that gave me some motivation to press on.

I eventually made it back to McEuen Park for the last stretch to the finish line. I rallied to the end and finished reasonably strong, only slowing down at the very end to high-five volunteers and spectators, and avoid ruining the finish-line photo of the person in front of me. My final time for the run was 1:53:36, with a total time of 5:51:45. To my surprise, I finished 21st in the M40–44 age group, out of 84, so while this wasn’t my best race ever, it also wasn’t the worst.
You know what? I’ll take it.
I’m not sure exactly what went wrong. I suspect it wasn’t just one big thing, but a handful of things compounding on each other: a stomach bug, the poor sleep, the bad swim, the under-fueled bike, the heat on the run, even the residual fatigue from Escape from Alcatraz—it all likely added up to a not-so-great day. It’s hard not to be a little disappointed, but I still got to enjoy a beautiful day swimming in a pristine lake, riding my bike through the Idaho countryside, and going for a run while getting cheered on by hundreds of strangers. At the end of the day, there is nothing else I’d rather be doing.
Now it’s time to regroup, get back in the saddle, and try again next month in Boise.
Onwards.
Share this race report