Race Report: 2026 Ironman 70.3 Boise
After last month’s not-so-great race at Coeur d’Alene, I was champing at the bit to come back to Ironman 70.3 Boise and try again. I had a great time last year—I got a PR in the 70.3 distance, and I love spending time in Boise. It’s a cool town and the Boise River Greenbelt is an underrated gem; I’ll take any excuse to visit.
My main goal for this race was simply to have a better race than I did last month, with a secondary goal of improving last year’s finish time of 5:28:10, and a very long-shot stretch goal of nabbing an Ironman 70.3 World Championship slot (this was extremely unlikely, but hey, I can dream). I wasn’t too worried about the bike and the run; I’ve had a pretty solid training block for both disciplines in the past few weeks and felt reasonably dialed in. The swim was another matter, though; with my local lap pool closed for renovations, I’ve done all of my swim training in the Endless Pool at one of the gyms in Jackson. Not ideal, but I hoped it’d be enough to get me through the swim leg with a better result than last month.
Turns out, I never even got to try.
Arrival & Preparations
As usual, race week came with some weather drama. First, the heat, with highs of 39.4°C in the days leading up to the race, although race day itself promised to cool down slightly, to a mere 37.8°C. Ironman sent out a “race day heat warning” before the race, explaining that they’d be adding cooling resources throughout the race, including offering neck gaiters soaked in ice water on the bike course, cooling tubs with ice water in T2, and additional cooling stations on the run.
I wasn’t too concerned about this; the average high in Boise in July is 33.7°C, so I expected the heat. I’ve spent the past few weeks after Coeur d’Alene getting my heat training dialed in, and by the time I got to Boise, both my CORE body temperature sensor and Garmin Connect agreed I was fully heat adapted. I felt reasonably prepared to deal with the heat on race day.
The bigger issue was the air quality, with smoke from multiple wildfires in Oregon causing historically bad air quality in the Treasure Valley area. A week before the race the AQI was firmly in the “unhealthy” range, and I didn’t want to expose my lungs to that—you can adapt to the heat, you can dress for cold and rain, but there’s no adaptation possible for bad air quality; it’s just straight up bad for you. I considered skipping the race entirely and getting my hotel refunded, but I decided to go anyway and make it a race-day decision: If the AQI was less than 100, in the “good” or “moderate” ranges, I’d race; if it was over 200, in the “very unhealthy” range, I’d DNS; and if it was somewhere in the middle, I’d just have to make a judgment call that day. Worst-case scenario, I’d still enjoy spending a few days relaxing in a nice hotel and hitting up every coffee shop in the area.

I drove to Boise on Wednesday before the race and stayed at the Residence Inn downtown, just two blocks away from the Ironman Village and the finish line. I went for a swim immediately after checking in and dropping off my gear—I discovered that the Grove Fitness Club, a block away, has a three-lane 25-meter lap pool with day passes available. It’s 1.2 m deep and 32°C, so it’s like swimming in a bathtub, but it felt great to get a couple of proper pool swims in before the race. I’ll definitely use it again next time I come here.
That afternoon the AQI had dropped to about 110, in the “unhealthy for sensitive groups” range, so I went out for an easy run on the Greenbelt, essentially doing one lap of the run course, to see how it felt to exert myself in that air quality, which would help inform my race-day decision. The heat felt manageable, and I didn’t experience any side effects from the air quality, which boded well for the race.
Bike check-in was on Friday, the day before the race, as usual. This race does a split transition, with T1 at Barclay Bay in Lucky Peak Lake and T2 at Julia Davis Park in downtown Boise, so the race provides the usual gear bags: a blue bike gear bag, a red run gear bag, and a clear morning clothes bag to place the clothes and items you wear on race morning. Unlike other races with gear bags, though, the only thing you need to drop off the day before is the bike; the bike and run gear bags can be brought in on race day.
I went to Lucky Peak State Park in the afternoon to rack my bike and stayed for a few minutes to scope out the swim course and the transition area. The swim course was changed from last year; rather than starting in Turner Gulch, the swim would start and end at the boat ramp in Barclay Bay, with a single clockwise lap. The lake looked perfect for a swim, with calm winds, barely a ripple in the water, and a pleasant temperature of 20.8°C. If those conditions held, it’d be a lovely wetsuit-legal swim.

After I racked my bike, I realized I had no idea how I would get it back if I decided not to race, and surprisingly, none of the volunteers or race staff seemed to know either. One person told me I’d have to come back to get it after the roads reopened; another told me it’d be taken back to T2 and I could pick it up there; and someone else suggested I come spectate, and then I could take it back in one of the buses. I really hoped I’d be able to race because the only surefire way I knew to get my bike out of T1 was to ride it out.
I didn’t have any running gear to drop off in T2, but I stopped there anyway to scope it out and see where my spot on the rack was; it’s always a good idea to figure out the path I’d need to take ahead of time. It’s a good transition area, laid out sensibly, and with lots of tree cover, so my stuff wouldn’t be sitting out in the sun all day, which I like.
Finally, I stopped at the Ironman store to get a few odds and ends—a hoodie for race morning, since I had forgotten to bring one, and a nice Compressport boonie hat, which I thought would be better in the heat than my usual running cap—and then went back to my hotel to organize my gear bags, have dinner, relax, and settle in for the night.
Race Day
I woke up at 2:40 AM, after getting a surprisingly decent amount of sleep for once, and the very first thing I did was check the air quality:

Game on. I was racing after all.
In hindsight, that was very fortunate—the AQI stayed in the “moderate” range through race day, but shot up to “very unhealthy” the very next day, and by Monday it had skyrocketed past 500, into the “hazardous” range. If that had happened on race day, I have no doubt that the race would have been canceled, like Ironman 70.3 Mont-Tremblant in 2023.
With that bullet dodged, I had my usual breakfast of a plain bagel with jam and a cup of coffee, did a final check of my gear bags to make sure I wasn’t forgetting anything, and left my hotel at around 4:30 AM. I stopped at T2 to leave my running gear bag under my spot on the rack, and got on one of the shuttles for the twenty-minute drive to Lucky Peak.
When we got to the dam, I couldn’t help but notice how windy it was—the trees and the traffic signs on the side of the road were swaying in the wind. Even in the predawn twilight I could see big swells and waves crashing against the dam. I had flashbacks of Ironman 70.3 Coeur d’Alene in 2024, when the high winds forced the swim to be shortened, and expected to hear some kind of announcement to that effect when I got to T1.
That didn’t happen, though, and as far as I could tell the race was still on, albeit with a ten-minute delay, with the male pros starting at 6:35 AM, followed by the female pros at 6:45 AM, and the age-group start now at 6:55 AM. It didn’t take me long to set up my gear, and I spent the rest of my time stretching and chatting with the folks around me. I was glad I got that hoodie; I was shivering in the wind.

A few minutes later, just as I had finished putting on my wetsuit, an announcement came in through the speakers: Due to the “increased winds and adverse weather conditions,” the age-group swim was now canceled, and the pros would swim a modified two-lap course instead.
Well, shit.
I’ve read some chatter on Reddit and Slowtwitch about whether Ironman’s decision was premature, or even correct, but in my opinion it was the right call. Last year’s swim was tough, and it wasn’t as windy: According to the weather station in Barclay Bay, the wind speed last year was 22.5 km/h—this year it was 40 km/h. Sam Long, who ended up winning the men’s pro race, said the swim was “very, very hard,” and Blake Harris, who finished third, described the conditions as “crazy rough.” Furthermore, the day after the race I met someone who volunteered for water safety, and he explained that the volunteers on kayaks and SUPs had trouble staying in position with the wind and might not have been able to respond to an emergency in the water effectively. This is not my first race with a canceled swim, so I understand the frustration about not being able to race a complete triathlon, but while I would have preferred a shortened swim at least, I think even that would have been too challenging and perhaps even dangerous for a lot of people.
In any case, the race now had a bike time trial start, in bib order. With my 169 bib number, I had the benefit of being among the first out of transition, which would hopefully help me avoid the worst of the heat later in the day, especially now that the start was delayed to 7:30 AM. This is why I make a point to check in for the race as soon as it opens to secure a low bib number—it ain’t my first rodeo.
At least my spot on the rack was next to the pros’ transition area, so I got a front-row seat to the pro race, which I never get to see—the pros are usually halfway through the race while I’m still waiting in line for the swim. After throwing some “yo yo yos” at Sam Long as he ran past me, I handed my morning clothes bag to the volunteers, got all my cycling gear on, and lined up with my bike for the time trial start. My race started at 7:32:01 AM.
The Bike
I left T1 and spun my legs on the descent down the dam to try to get some blood flow going; without the swim or much opportunity to warm up before the start, my quads were cold and achy for the first few kilometers.
The bike course is a single lap, starting with a fast, steep descent from Lucky Peak Lake, and then looping around the Idaho countryside south of Boise before returning to Julia Davis Park downtown. It’s not the most scenic bike course—just sagebrush as far as the eye can see—but it’s quiet and safe, with about 56 km of closed roads and little car traffic to worry about. It’s described as “hilly” on the race website, with roughly 580 m of elevation gain, but it’s not too bad; there are only six categorized climbs, and most of them are less than a kilometer long. The only longer climb is this segment on Pleasant Valley Road, right before the first aid station (which you’ll also do in reverse on the way back). The descent after that first aid station is steep and has by far the worst pavement of the entire course, but the rest of the pavement is in good condition, although most of it is rough chipseal (I lowered my tire pressure to 72 psi, per Silca’s tire pressure calculator, which seemed to help with the bumpiness). Most of the course is ridden counterflow, in the left lane, so the first and last aid stations are left-hand grabs. I didn’t use the aid stations, but it’s worth practicing grabbing bottles on the left beforehand if you’re planning to use them—I saw so many people completely miss and send the bottles flying down the road that I decided to skip them rather than risk crashing.

This bike leg was different from what I’m used to. Since I’m a much worse swimmer than cyclist, I usually start the bike leg almost at the back and then have to work my ass off to pass people and negotiate a crowded course. This time I was one of the first people out on the bike course, so it was largely a solo effort on an almost empty bike course. That should have made it easier to hit my pacing targets, but I wasn’t sure how best to pace this bike leg. I had a power plan in my bike computer targeting 0.8 IF, but I expected it to warm up to at least 29°C during the bike leg, and last time I raced at that intensity and temperature I ended up with GI distress, which I wanted to avoid at all costs. I decided to pace by feel, more conservatively than what the power guide prescribed, just to be safe. My fueling consisted of two 24-ounce bottles of Maurten Drink Mix 320, which, at the 2:32 that Best Bike Split estimated the bike leg would take me, amounted to about 90 g/h of carbohydrates. My stomach handled it well, although I didn’t time it right, and had about half a bottle left at the end. I supplemented that with plain water from my frame’s aero bottle, drinking to thirst and using some to pour on myself when it got really hot.
It was a largely uneventful and pleasant bike ride. I encountered few people, only the handful I passed and the ones who passed me, plus the occasional motorcycle with media or referees, so I mostly kept my head down and pedaled away. The winds that caused the swim to be canceled weren’t much of an issue on the bike; I could definitely feel a headwind at times, but no gusts that could have made the descents sketchy, and I was much more confident descending in aero position than I’ve been in the past.

I felt good and kept a strong pace for most of the ride, but started to falter in the last 24 km or so, once I got back on Pleasant Valley Road and started heading back to Boise—by then the temperature was over 32°C. Those last few kilometers were grueling; I couldn’t wait to get off the bike.
I rolled into T2 with a final time of 2:30:43. My IF was just 0.714; in hindsight I wish I had gone harder, but I still managed to finish four minutes faster than last year—my fastest 70.3 bike split to date. More importantly, my stomach felt good, with no cramps, bloating, or sloshing, so I was in good shape for the run.
T2
My spot on the rack had a clear view of the finish line, and I got there just in time to see Sam Long win the race, which was cool—clearly my “yo yo yos” helped. I spent 7:25 in T2 changing into running gear, reapplying sunscreen, and using the porta-potty before heading out.
The Run
This year the run course had some minor changes to make each lap more of a loop, but otherwise it was the same: two laps on the Boise River Greenbelt, a lovely multiuse pathway running along both banks of the Boise River, with only 26 m of elevation gain.

Most of the course, except for an under-construction segment along the Boise State University campus and the short loop by Warm Springs Golf Course, is in the shade, which helped enormously with the heat—by the time I got out on the run course it was already over 32°C. Fortunately, the first cooling station was right at the start, where a volunteer handed me a neck gaiter soaked in ice water. It felt amazing and made enough of a difference I think I’ll get one of these to wear next time I race in the heat.
As promised by Ironman’s heat advisory, they had placed additional cooling stations with ice buckets throughout the course, which I used to resoak my neck gaiter in ice water and fill my hat with ice cubes (it has ice pockets on the sides, but I found it much easier to just use it to scoop ice from the buckets and put it back on). Kudos to Ironman for being well prepared for the hot conditions; those cooling stations were a great addition to the race. And a big shoutout, of course, to the volunteers—these races are nothing without them.

In addition to using the cooling stations, I walked through every aid station to drink and pour water on myself, and although I didn’t feel any signs of cramps, I also drank a few cups of electrolytes just to be safe. For fueling, I had a Maurten gel roughly every thirty minutes, for a total of three. I didn’t have any GI issues at any point, which was great.
The first lap went by relatively quickly, and I felt strong despite the heat. The second lap was tough; the temperature was just shy of 36.7°C at this point. I was running with a hat full of ice, pouring water on myself every chance I could, and staying in the shade as much as possible; my shoulders hurt, my legs hurt, my toes hurt, my everything hurt. My heart rate was some of the highest I remember seeing during a race; I was definitely feeling the impact of the heat. It took every ounce of willpower I had not to stop, but I knew that if I gave in, I’d end up walking the rest of the way. One nice thing about this course is the constant spectator support; I high-fived everyone I could on the second lap, and getting cheered on, even by complete strangers, gave me motivation to keep on running. All that said, while that second lap was difficult, I felt much better than I did last month in Coeur d’Alene, even though it was significantly hotter—I think my heat training paid off.

I finished the run with a final time of 1:50:39, a little over two minutes slower than last year—not terrible, considering it was hotter this year. My total time for the race was 4:28:46, finishing 22nd out of 93 in the M40–44 age group and 188th overall, out of 1,212 finishers. My age-graded finish time was 4:10:12, which put me in 153rd place in the age-graded performance pool—not a chance in hell of getting a World Championship slot, but at least an improvement on last year’s 228th place.

After collecting my medal, chowing down on some vegan paella at the food tent—one of the best post-race meals I’ve had—and grabbing my bike and gear, I went back to my hotel, where I collapsed into a heap. I was demolished.
I came to Boise simply hoping to have a better race than I had at Coeur d’Alene last month. It wasn’t the race I hoped for—a triathlon without a swim isn’t a triathlon at all, so it’s hard not to feel a little disappointed. But considering that I was lucky to have a race at all given the ongoing wildfires and smoke, that I just had my fastest bike split to date in a 70.3, and that the run, as hard as it was, validated the work I put into heat training, I really have no reason to complain.
It was a good race after all.
Share this race report