Given to Tri: A Triathlon Training & Racing Blog
giventotri.com.web.brid.gy
Given to Tri: A Triathlon Training & Racing Blog
@giventotri.com.web.brid.gy
A triathlon training & racing blog by Guillermo Esteves, a late-onset triathlete based in Jackson Hole, Wyoming.
Race Report: 2025 Hole Half Marathon
I was pretty bummed out when I had to pull out of the Hole Half Marathon at the last minute last year. It’s a fun fall race and a great way to close out my season before winter sets in, so I look forward to it every year, but with last year’s Fish Creek Fire sending the AQI into the stratosphere—235 on race day—I really had no choice but to skip it. We’ve been much more fortunate this year with a low-key fire season and good air quality most of the summer. I was once again looking forward to completing this race—not just to close out my season properly this time, but because it’s also the first time I would finish all three of my local half marathons. It feels like a neat little personal milestone. * * * The Hole Half Marathon is the third and last half marathon of the year in Jackson Hole, after the Jackson Hole Half Marathon and the Grand Teton Half Marathon, both in the spring. It sits in the middle in terms of participation, with about twice as many runners as the former, but nowhere near as many as the latter. (It’s also run concurrently with the full Jackson Hole Marathon, which I’ve never done—maybe someday, though.) The course is almost the reverse of the route for the Jackson Hole Half Marathon. It starts in the parking lot of the Presbyterian Church in Jackson, follows the community pathway across the Snake River for a quick loop to Wilson around the Stilson Lot, and then continues north on the pathway along the Moose-Wilson Road towards the finish line in the lawn of the Jackson Hole Mountain Resort in Teton Village. It starts mostly flat, but the last 12 km are at a mild grade, ending at 1,930 m with a total elevation gain of about 90 m. It’s a beautiful route, with gorgeous views of the mountains most of the way, and the fall foliage and crisp fall weather add to the beauty of the landscape. View this course in Garmin Connect or Strava. With fire season finally over, the AQI wasn’t a concern at all this time—it was firmly in the “good” range on race day. As is typical for this time of year, the day started chilly, with a barely-above-freezing temperature of 1ºC shortly before the 9:00 AM start. With clear blue skies and the sun shining brightly, I expected it to warm up quickly, so I didn’t bring too many layers. In previous years I’ve made the mistake of wearing heavy tops and long running tights and ended up overheating. This time I wore a lighter-weight Tracksmith long-sleeve top and half tights. It was the right decision; I was a little cold at the start but perfectly comfortable towards the end. After last week’s result at Ironman 70.3 Washington Tri-Cities, where I finished the run within five minutes of my personal best in an open half marathon, I wanted to try for another PR to truly close out the year on a high note. I gave myself a very aggressive—and probably unrealistic—goal of 1:35:00 and set it up using the PacePro feature on my Garmin watch (I had never used this feature before, so I was curious to see how it worked). It gave me a target pace of 4:30/km, which seemed tough, but worth a shot. At the Jackson Hole Half Marathon back in May, I felt like I was underfueled towards the end; this time I planned to fuel my effort with a Maurten 160 bar before the start of the race and three Maurten 100 gels spaced about 25 minutes apart, with the last one caffeinated for a little boost at the tail end of the race. This race is cupless, but I didn’t want to slow down at the aid stations or carry a bottle, so I didn’t worry about hydration. Kate dropped me off at the Presbyterian Church at 8:30 AM. This gave me just enough time to get my bib, do a quick warmup, and use the porta-potties before the start. I placed myself near the front, and hit the ground running as soon as the gun went off. I did my best to follow the pace guidance from my watch, but admittedly let the race adrenaline get the best of me; the first couple of kilometers were a little faster than I intended, and certainly near my limit. The PacePro feature worked well, though—it gives you a special data page on the watch with the current target pace, current pace, and how far ahead or behind you are from the desired finish time. It also provides alerts whenever the target pace changes. I’m not sure if I can use this in triathlon mode, but it’d be convenient if so. The first half of the race went well, and I stuck pretty closely to my target paces, although I was actually ahead of my target finish for most of this time. However, once I rejoined the community pathway for the uphill portion of the race on the Moose-Wilson Road after looping around the Stilson Lot, I started feeling some pain in my right knee. It’s the same damn IT band pain I had a couple of years ago in St. George, which hadn’t recurred since then. It wasn’t bad enough to cause me to DNF or even slow down to a walk, but it was definitely painful enough that I couldn’t sustain the pace I had been running. By the end it had fallen closer to 5:00/km. Roughly halfway through the race, in the Stilson Lot. Credit: Jackson Hole Marathon Races Those remaining 8 km were uncomfortable as hell, and the last couple in particular felt interminable, but I managed to finish the race in 1:38:14, with a final pace of 4:40/km. I was 3rd out of 23 in the M40–49 division and 15th overall, out of 345. Not quite the personal best I was hoping for, but still my third-fastest half marathon to date—I’ll take it. My knee is a little sore, but I have plenty of time to nurse it back to health before my next race, whenever it may be. And with that, this year’s race season is finally over. With four successful Ironman 70.3s and all three of the local half marathons done, it’s safe to say this has been my best season so far. But now it’s time to rest and relax, enjoy some fall bike rides and runs just for fun, and start dreaming of next year’s races. Onwards. *[AQI]: Air Quality Index *[PR]: Personal Record *[IT]: Iliotibial *[DNF]: Did Not Finish
www.giventotri.com
October 7, 2025 at 5:04 PM
Race Report: 2025 Ironman 70.3 Washington Tri-Cities
Last year, after driving ten hours from Jackson Hole to Richland for the inaugural Ironman 70.3 Washington Tri-Cities, I was certain it would be a one-and-done race—it was just too far, the drive too exhausting. After finishing the race, though, I _knew_ I needed to come back. It’s a phenomenal race in a great location, with a fast downriver swim, a beautiful bike course, and a fun, spectator-friendly run. So here I am again, a year later. My goal for this race was simple: Leave with no regrets. This year has been extraordinarily hard for me on a personal and professional level, and with this being my last triathlon of the year and a long, long wait until I can race again, I knew the post-race blues would hit me hard, so I didn’t want to leave Richland feeling like I could have or should have done more. If I could come up with a plan, execute it, and leave nothing on the table, I would be satisfied (and if that translated into a faster time than last year, that’d be the cherry on top). This race is also a milestone for me: It’s my tenth Ironman 70.3 since I started racing triathlons three years ago, and I wanted to leave on a high note. So, without further ado, here’s my last triathlon race report of this year. ### Arrival & Preparations Rather than driving straight from Jackson Hole, as I did last year, I split up the drive this time, spending a night in Boise on the way. This gave me an opportunity to run again on the Boise River Greenbelt, one of my favorite places to run, before continuing to the Tri-Cities region. I arrived in Richland on Thursday before the race and stayed at the Courtyard Richland Columbia Point, just a five-minute walk from the Ironman Village and transition. This race uses a shuttle system for race day, but if you can swing staying at one of the several hotels along the river, I can’t recommend it enough; nothing beats the convenience of being a short walk away from transition and the finish line. After checking into my room and unloading my gear, I went out on a shakeout run at race pace along the run course on the Riverfront Trail. I felt… like hot garbage. My legs felt heavy, and my heart rate and perceived exertion were through the roof. It was admittedly hot at 34ºC, but I should still have been heat-adapted, and I expected the lower altitude to help me—I live and train at 1,950 m, but Richland is at a mere 107 m above sea level. I finished that run worried I didn’t have my run fitness as dialed in as I thought. I had planned on one last easy run on Friday, but decided to take an extra rest day, thinking the additional recovery would be more beneficial than another run. I spent the next two days relaxing, doing mobility work, and checking and double-checking my gear. The race organizers offered a couple of practice swims in the river, but I didn’t bring a tow float to store my stuff and I knew what to expect from the swim, so I skipped them. Instead, I continued the tradition I started at Ironman Canada of hate-watching the most terrible movies on TV—this time I honed my mental endurance with a double feature of Batman v Superman: Dawn of Justice and Justice League. Absolute dogshit. My race gear, organized before the race. I checked in my bike on Saturday afternoon, and after that I spent a few minutes scoping out the transition layout, which was changed slightly from last year—the positions of the Ironman Village and the transition area were swapped, which meant a slightly longer run from the swim exit into T1. This race does a single transition, so you don’t get gear bags, as is typical for 70.3 races. You _do_ get a morning clothes bag, though, since the swim start is 1.9 km away, in Howard Amon Park. You can put anything you carry to the swim start there, such as your phone, a coat, and your shoes, and hand it to the volunteers before lining up for the swim. It gets returned to you shortly after crossing the finish line. Shadowfax, racked and ready for race day. With my bike racked and nothing left to do, I went back to my room, packed the rest of my gear into my transition bag, had some dinner, and turned in for the night. ### Race Day I had trouble sleeping almost the entire time I was traveling for this race, so I was relieved to get five full hours of sleep the night before, with my Whoop indicating a whopping 89% recovery. I woke up at 3:00 AM, had a bagel and coffee, and checked all my gear one last time while I waited for transition to open. At 4:00 AM, I walked over to transition to finish setting things up. As soon as I stepped out of the hotel, I was surprised by how windy it was—when I got to the transition area, the bikes were rocking in their racks. I had flashbacks of Ironman 70.3 Coeur d’Alene last year, where the high winds caused the swim to be shortened and made the bike, and particularly the descents, stressful. I doubted this swim would be shortened or canceled, but I certainly braced myself for another challenging bike leg. > It was, uh, very windy on race day on Sunday. > > [image or embed] > > — Guillermo Esteves (@giventotri.com) September 24, 2025 at 11:38 AM The weather forecast showed a high of 24ºC, so at least I didn’t expect the heat to be an issue; it also showed a 25% chance of rain, so I placed my shoes and socks in a plastic bag from the expo to keep them dry if it rained. After setting up my bike computer and pumping up my tires, I went back to my room to wait for the swim start and do some mobility work to stretch and warm up in the meantime. At 6:00 AM, I put on my wetsuit and joined the crowd of athletes on the twenty-minute walk to Howard Amon Park to start the race. The wind seemed to have calmed down, but the sky was overcast and I could see rain in the distance to the southeast. I hoped none of it would hit the bike course; it would have been bad enough to deal with the wind on the bike without adding wet roads to the mix. The Columbia River from Howard Amon Park, 6:29 AM. Once I got to the park I handed over my morning clothes bag to a volunteer, ate a Maurten 100 gel, and lined myself up for the start. For a current-assisted swim, you’re supposed to line up in the group for your estimated time _without_ the current, so even though I was expecting a finish time of around 26 minutes, I seeded myself in the 37–40 minute wave. One change I appreciated this year is that instead of lining up in the park, we were lined up on the beach along the river, so it was possible to get a quick dip in the water to get acclimated before entering the chutes. I didn’t really need it, though—the water temperature on race morning was a pleasant 21.2ºC. There weren’t any pros racing, so the race started with the Physically Challenged division at 6:27 AM, followed by the age groups at 6:30 AM. I didn’t have to wait long to get in the water, and I started my race at 7:04:13 AM. ### The Swim I ran out of the chutes and immediately dived in… by slipping on the rocks as soon as I set foot in the river and face-planting painfully in knee-deep water. Not my most graceful moment, but at least I wasn’t hurt, and recovered quickly. After pushing off into deeper water, I pointed myself towards the first buoy and let it rip. The swim course is point-to-point, starting at Howard Amon Park and ending back at Columbia Point Marina Park. This year the swim start got moved a little farther upriver, and after making a right turn at the first red buoy, it was almost a straight shot to the marina. With the huge assist from the current, it wasn’t a challenging swim at all. The only minor difficulty I faced was that my goggles fogged up almost immediately and made sighting difficult, although the buoys had strobes on them, which helped enormously. Beyond that, the swim was completely uneventful—I focused on my form, did my best to stay on track, and simply enjoyed the pleasant water while I watched the buoys fly by. Things got a little busy at the end as everyone got funneled into the marina, but nowhere near as bad as the pummeling I got in Boise a couple of months ago. You can see my swim split there quite clearly. Credit: FinisherPix After one last push through the marina, I exited the water with a finish time of 26:08 and an official pace of 1:19/100m. Easy peasy. Now, if I could just swim this fast _without_ a current… ### T1 After a quick stop at the wetsuit peelers to get my wetsuit pulled off, I jogged through Columbia Point Marina Park to the transition area, got my bike gear on, unracked my bike, and left in 9:13. On the off chance someone from Ironman happens to read this, here’s a small suggestion for next year: It’d be nice to get some mats on the paved footpaths in the park—they’re very rough and painful to run on barefoot. ### The Bike The course was largely the same as last year: A single clockwise lap through Richland and the countryside outside of town, with 619 m of elevation gain and a handful of short climbs. It’s a lovely course with smooth pavement, beautiful scenery as you drive through farmlands and vineyards outside of Richland, and just enough of a challenge from the climbs to keep things interesting—I described it to someone before the start as “Coeur d’Alene Lite.” There are three railroad crossings along the way, so there’s a chance riders might be stopped by passing trains, but the athlete briefing explained that timing mats before and after the railroad tracks would record any delays, and that time would be deducted from the final time. View this course in Garmin Connect or Strava. There were some minor but positive changes this year, most notably the descent through Dallas Road, which I found sketchy last year, now has much better separation from traffic, so it felt a lot safer. I didn’t find car traffic to be an issue at all; most of the course had an entire lane of traffic dedicated to the race, and most of the roads had barely any traffic anyway, especially on the backroads outside of town. With Ironman 70.3 St. George now discontinued, I think this might actually take its place as my favorite 70.3 bike course. I raced on my Speed Concept with the same nutrition setup I used in Boise: Two 24-ounce bottles between the aerobars with roughly 2.75 sachets of Maurten Drink Mix 320, for about 80 grams of carbs per hour. With the cooler temperatures this time around, I didn’t think I needed additional hydration, so I took out the aero bottle from the frame to save some weight for the climbs. I still haven’t tested if this setup is aerodynamically faster than having one bottle between the aerobars and the other behind the saddle, but I can’t argue with the convenience of having both bottles in front—it’s so easy to drink from either bottle without coming out of aero, and that’s gotta count for something. Instead of pacing by feel, I set up a Power Guide on my Garmin with an intensity factor of 0.8, which would give me an estimated finish time of 2:41:13, according to Best Bike Split, and put me in the green zone of my pacing table—not so easy that I’d feel like I left anything on the table, but not so hard that I’d blow up on the run later on. Bike pacing table for Ironman 70.3 races. Credit: TriStar Athletes With that, I left T1 and got right to work. I stuck closely to my power cues and had little trouble passing people—the course felt less crowded than last year, which gave me more space to maneuver. I felt strong as I pushed hard up the first couple of climbs—it gave me a lot of confidence to see my training pay off, although the cool temperature and low altitude definitely played a role. Shortly after leaving T1. Credit: FinisherPix I had forgotten all about the wind from earlier in the morning until I got to the top of Badger Mountain, at around kilometer 23. By then the weather had deteriorated and the wind was blowing fiercely again; I felt anxious coming down the mountain in a gusty crosswind. After that descent, I rode all of the roughly 20 km long segment on Badger Road in a strong headwind, which slowed me down enormously. In the parts of the road that faced northwest the wind was more of a crosswind, which made it hard to stay in aero position; I felt unstable every time I got hit by a gust of wind, so I spent a lot of time on the base bars, which slowed me down even more. I was so worried about crashing, I didn’t even want to let go of the handlebars for a second to drink from my bottles. I don’t know exactly how fast the wind was blowing, but one of the farms I rode by had a fully extended windsock, so the wind must have been _at least_ 15 knots (27.8 km/h). The sky was overcast and dark, and I was certain a storm would break out at any moment, but it never rained more than a slight drizzle, and it didn’t last long. I found this whole section harder than any of the climbs, and I had one moment when I was tempted to step off the bike and quit the race, but I pressed on, and eventually the course turned eastward along I-82. With the wind now at my back, I was glad to get back in aero, dig deep, go fast, and make up some of the lost time. Once I got back into Richland the wind had calmed down again, and it was smooth sailing all the way into T2. I’m not exactly sure where this was taken. Credit: FinisherPix I was pleasantly surprised to finish the bike with a final time of 2:42:52, close to what Best Bike Split had estimated; I had expected a much slower time after duking it out with the wind on Badger Road. My final intensity was 0.797, the closest I’ve ever been to my target. Maybe I could have gone a little harder, and I certainly could have gone faster if my handling skills in the wind were better, but as far as executing a plan goes, this was as close to flawless as I could manage. I’m very happy with this result. ### T2 I racked my bike, swapped my bike gear for my run gear, made a quick stop at the porta-potty, and left in 5:14. I don’t keep close track of my transition times, but I think this is my quickest one to date in a 70.3. My transitions are still slow, but this feels like progress. ### The Run After that awful shakeout run a couple of days before, I wasn’t quite sure how to pace this run, but I didn’t overthink it and stuck to my original plan: Aim for a pace of 4:55/km and reassess at the turnaround point. If I felt good, push the pace and get a negative split. If I didn’t, dial it back a little and finish as strong as I could manage. It was still windy and overcast as I left T2, so the temperature didn’t feel anywhere near the forecast high of 24ºC, which would help me—at least I wouldn’t get demolished by the heat. It took me a few minutes to shake off the “jelly legs” feeling from the bike leg, but after that I had no trouble hitting my target pace—my heart rate and RPE were where I expected them to be, which was a relief and restored my confidence. The run course was unchanged from last year, a single-lap out-and-back on the Riverfront Trail along the Columbia River, through parks and residential side streets, with a turnaround point on the north end, just past the Washington State University campus. It’s fairly flat, with only 60 m of elevation gain, and, save for the last few hundred meters before the turnaround point, it’s all on smooth, paved paths. It’s a really nice run course, with plenty of shade and lots of spectator support, especially through the residential parts and the hotels close to the finish line. View this course in Garmin Connect or Strava. A few minutes into my run it started drizzling again, which felt refreshing, and I had to resist the temptation to push the pace. Since it wasn’t hot, I didn’t feel the need to follow my usual strategy of walking through every aid station to drink water, and instead drank to thirst without slowing down. I relied on Maurten bars for my nutrition, eating half a bar roughly every 20 minutes, for a total of one and a half bars, plus a Maurten caffeinated gel to get a final kick before the finish line. Rain, I don’t mind. Credit: FinisherPix By the time I got to the turnaround point the drizzle had turned into steady rain, and I was soaked to the bone. I’ve worried about the heat in previous races, but now I had the opposite problem—I was _freezing_. My hands were so numb I fumbled a few cups of water at the aid stations. My watch recorded a low of 18ºC at this point, but I was soaking wet and the wind chill made it feel much colder than that. I had been keeping a “comfortably uncomfortable” pace up to this point, and with no heat to worry about, I followed my plan and started increasing the pace after the turnaround. I pushed well into “uncomfortable” territory. I was cold, my joints hurt, my toes hurt, I started getting painful blisters on the bottom of my feet, and running in waterlogged shoes was unpleasant, but I felt strong despite the harder pace. I was excited when I looked up and I could finally see the finish line off in the distance; it was time to empty the tank and give everything I had left. (After I finished I went back to that same spot to cheer on people and encourage them to make that last push to the finish line.) Those last couple of kilometers were an all-out effort, but I didn’t let up, and dug deep right up to the end, only slowing down in the last few meters to avoid ruining the finish line photo of the person in front of me. I finished the run in 1:41:53, with a final pace of 4:50/km. That’s almost four minutes faster than last year, my new personal best for the run in a 70.3. My final time was 5:05:16, over two minutes faster than last year. I finished 24th out of 148 in the M40–44 age group and 214th out of 1,702 overall. My age-graded result was 04:42:45 (5:05:16 × 0.9262), which put me in 211th place for the Ironman 70.3 World Championship slot allocation. There were 60 slots available at this race (30 for men and 30 for women) and the last ones rolled down to 70th place for women and 96th for men. I still have a lot of work to do before I can qualify for Worlds, but I’m not giving up on that. I don’t care how long it takes, I will make it happen. And with that, my tenth Ironman 70.3 is in the books. Credit: FinisherPix Importantly, though, I did what I set out to do: I had a plan, executed it to the best of my ability, and I’m closing out my triathlon season on a high note. Mission accomplished: No regrets. *[RPE]: Rate of Perceived Exertion
www.giventotri.com
October 7, 2025 at 5:04 PM
Race Report: 2025 Ironman 70.3 Boise
A couple of years ago Kate and I spent a long weekend in Boise, Idaho. She came to get a new tattoo, and in the meantime I hung out and explored the city. Boise is a cool town and we had a great time, but I fell in love with the Boise River Greenbelt, a gorgeous tree-lined pathway running along the banks of the Boise River. I ended up running over 50 km that weekend alone. I’ve been itching to go back ever since. Kate and me in Boise in 2023. Maybe my shirt was an omen. When Ironman announced last year that Ironman 70.3 Boise would be coming back, I jumped at the chance; the idea of finishing a race on the Greenbelt seemed too good to pass up, and Boise is just a short six-hour drive from home. It’s a storied race, which ran from 2008 to 2015, and was held in early June. That made it a cold race—the swim is held at Lucky Peak Lake, which collects snowmelt from the surrounding mountains, so the water temperature is around 10ºC at that time of year. In 2012, cold and snow forced the bike leg to be shortened to just 24 km—it was so cold, some athletes wore their wetsuits on their bikes. Maybe the most interesting part of that previous iteration of this race was the noon start, something I’ve never done. It’d sure be nice to race after a full night’s sleep for once. This late-July revival of the race is a more standard fare, with a normal early-morning start and potentially high temperatures: The average high in July is 33.7ºC; temperatures above 38ºC are common. It didn’t matter, I signed up anyway. ### Arrival & Preparations I arrived in Boise on Thursday afternoon and checked into my hotel, conveniently located two blocks from the Ironman Village and T2 at Julia Davis Park. I headed over after unloading my gear to check in for the race and buy some of the usual knickknacks at the race expo. With that out of the way, I went out on a run on the Greenbelt to scope out the run course and see how I felt in the 34.4ºC heat. After getting destroyed by the heat at Ironman 70.3 St. George two months ago, I’ve put some effort into heat training to prepare for this race—to the best of my ability, since it rarely gets much warmer than 27ºC or so in Jackson Hole. I invested in a Core body temperature sensor to track my heat training, and it claimed I was 99% heat adapted, so I was curious to see if it made a difference in how it felt to run in Boise’s much hotter temperatures. It felt… great, actually. I ended up running a full lap of the run course at a relatively comfortable pace and the heat never felt oppressive. The fact that most of the run course is in the shade helped, but that run made me confident that my heat training had paid off. I also saw Paula Findlay and Eric Lagerstrom running along the Greenbelt a couple of times; I didn’t want to be too much of a weirdo so I just gave them a quick thumbs up and they waved back at me, which was cool. (They’re two of my favorite pro triathletes and their podcast is excellent; you should check it out.) Afterwards, I went back to my hotel room to get my gear bags ready for check-in on Friday, since this race has a split transition. If you’ve never done a split transition, here’s how it works at this race in particular: * When you check in for the race at the Ironman Village, you’ll get your race packet with your race bib, wristband, swim cap, stickers, and timing chip. You’ll also get three plastic bags: a clear one, labeled “morning clothes,” a blue one, labeled “bike gear bag,” and a red one, labeled “run gear bag.” These bags have a space to put one of the stickers with your bib number, and you should also write your bib number on them with a Sharpie in case the sticker falls off. * In the morning clothes bag, you’ll place anything you need to bring to the swim start, such as your goggles and swim cap, and it’s where you’ll put the clothes you’re wearing before heading to the swim. Don’t put anything that won’t fit in the bag, such as a bike pump—there’ll be plenty of those in transition, and they won’t accept your bag if it has stuff sticking out. * In the blue bike gear bag you’ll put your helmet, bike shoes, socks, bike computer, and anything else you’ll need in T1. * In the red run gear bag you’ll put your running shoes, socks, hat, running belt with bib attached, and anything else you’ll need in T2. * The day before the race, you’ll bring your bike to T1 at Barclay Bay in Lucky Peak State Park, about a 25-minute drive from downtown Boise. At this race, you _do not_ need to check your bike gear bag with your bike, you can bring it with you on race morning—they explained that there’s wildlife at Lucky Peak and they don’t want it rummaging through the bags if someone were to leave some food in them overnight. There’s limited parking there and it gets congested, so don’t leave this to the last minute. * You’ll also need to check in your run gear in T2 at Julia Davis Park. This one you _do_ need to check in the day before. You’ll simply walk to the transition area and tie your bag to your spot on the rack. Don’t leave any food in your bag overnight; you can bring it on race morning. * On race day, you’ll unpack your run gear bag in T2 and finish setting up your transition before getting on a shuttle to Lucky Peak State Park (you can’t drive there—there’s no parking on race day). When you get there, you can unpack your bike gear bag and set up your transition as usual: Attach your bike computer, set up your bottles, hang your helmet from your handlebars, clip your shoes to the pedals if you’re doing a flying mount, or just place them on the ground next to your bike (it’ll take less space since you won’t have running gear to worry about). Make sure to put your gear on top of the bag so it doesn’t fly away while you’re swimming—you’ll need it later. * Before heading to the swim, place your clothes, shoes, phone, keys, etc., in your morning clothes bag. You’ll hand the bag to one of the volunteers stationed for that purpose near the swim start. * After the swim, when you’re back in T1, take off your wetsuit, swim cap, and goggles, and stuff them all in your now-empty bike gear bag. You can just leave it on the ground under your spot on the rack; the volunteers will pick them all up and bring them back to Boise. * When you get to T2, rack your bike, and change into your running gear as normal. You don’t need to pack your bike gear into the now-empty run gear bag—you can simply place it on the ground next to your bike. * After the race, there will be an area set up near the finish line for you to pick up your morning clothes and bike gear bag, and then you’ll just need to collect your bike and run gear bag from your spot in T2. After the briefing, I did all of that. T2 was easy, since it was right there at Julia Davis Park. It’s a great transition area, with tons of space, lots of shade, and covered in grass, which makes it easy to run in bike shoes (although I really should learn how to take them off without unclipping them from the pedals and run barefoot). After walking back and forth a few times to memorize the location of my spot relative to the entrance and exit, I left to go check in my bike at Barclay Bay. I was less enthused by T1. It was set up in the small parking area at Barclay Bay and paved with a rough chip seal surface that looked like it’d be painful to run on barefoot after the swim (although the organizers had thoughtfully laid down rubber mats from the swim exit and up the boat ramp that led to the transition area). At the briefing they asked us to be quick due to the limited parking, so I didn’t spend too much time scoping things out and left after racking my bike. I was selfishly hoping one of the people next to me would DNS so I could have some extra space, but no dice. That evening, I double-checked the rest of my gear and hit the sack early, hoping to get a good night of sleep before the race. ### Race Day Yeah, that didn’t happen. I woke up at 1:00 AM and gave up on sleep a couple of hours later. I sure could have used that noon start—I felt tired, groggy, and run down. Not a great start to the day, but I hoped race adrenaline would get me through. I had my usual breakfast of a plain bagel with jam and a cup of coffee, and did some mobility work to kill some time before walking over to the Ironman Village to finish setting up my gear in T2 and hop on a shuttle to Lucky Peak. The weather on race day looked promising, with a forecast high of 33.3ºC—not as hot as I had expected for Boise in July. Someone at Slowtwitch warned me that conditions can be rough in the morning with the wind coming down the mountains, and the forecast said it’d be windy with 32 km/h gusts, but the water looked relatively calm. Even the air quality was good, which is rare for the Mountain West at this time of year, with wildfire season in full swing. If nothing else, it looked like a beautiful day for a race, and I resolved to make the best of it, despite not feeling 100%. T1 at 6:20 AM. After setting up my bike I headed to the swim start at Turner Gulch, a ten-minute walk away from Barclay Bay, and optimistically seeded myself in the 40–43 minute wave. I really liked the way the swim is set up at this race—from the road to the swim start you get a great view of the lake and the entire swim course as the pros start their races. The morning bag collection point is right before the chutes, so if you’re wearing a coat or shoes, you can keep them on until right before you get in the water, which is nice and convenient. Athletes going around the first turn buoy shortly after the start of the age group race. The race started for the pro men at 6:30 AM and for the pro women five minutes later; it didn’t take too long after that for me to get in the water. My race started at 7:09 AM. ### The Swim The biggest advantage of moving the race to July is that, at 19.6ºC, the water temperature was pretty much perfect and I felt great in my sleeveless wetsuit—it only took me a few strokes to get used to the temperature and get to work. The swim was a one-lap point-to-point counter-clockwise course from Turner Gulch back to T1 in Barclay Bay, with four turns in total: a right turn about a hundred meters out, before the outbound leg, followed by two left turns before the inbound leg, and one final right turn in the last couple hundred meters before heading toward the swim exit. The outbound leg was roughly aligned toward the sun, which had just risen above the mountains by the time I started, but despite the sunlight reflecting off the water, I didn’t have much trouble sighting the buoys. It was a little hectic and I often made contact with people, but nothing I haven’t experienced in previous races. I expected things to get easier on the inbound leg; since I’d have the sun behind me and it’d be easier to see the buoys, I’d be able to distance myself from other people. I was wrong. By the time I was on the inbound leg the wind had picked up and the water got choppier, with some big swells. I had the hardest time sighting the buoys, which should have stood out clearly against the hills in the background. Sometimes I’d see a buoy but then not see the next one at all; at one point I saw a buoy way off about a hundred meters to my left. I had _no idea_ where I was supposed to be going, so I had no choice but to follow other swimmers and hope they could sight better than me. At times I felt like I was swimming into a headwind and not moving at all, with only the buzz from my watch’s auto-lap function giving me any indication that I was making forward progress. It felt like an interminable slog. Things somehow got _worse_ after the last turn towards the swim exit. This turn funneled everyone into a narrow lane for the last couple hundred meters, and with everyone packed in there, the “washing machine” effect went into overdrive. I got the shit beat out of me there; I got grabbed, punched, slapped, kicked, swum over, you name it. I’ve never swallowed so much water during a swim before. Any semblance of proper swim form went out the window; I did what I could to get through it, but there were a couple of times where I got smacked hard enough to choke in the water and I had to stop for a second to recover. I really need to learn this style of aggressive, full-contact, no-holds-barred, no-fucks-given swimming some people seem to do. I’m way too defensive about it. After all that, I finished the swim in 48:09, with an official pace of 2:30/100m, technically my slowest 70.3 swim to date. However, according to my watch I swam 2.1 km, almost 200 m more than I should have, with a pace of 2:16/100m, so at least it wasn’t actually my slowest swim ever. I’m not sure where the extra distance came from, but this photo probably explains why I couldn’t see the buoys—the wind had moved them all over the place. > View this post on Instagram > > A post shared by IRONMAN Triathlon (@ironmantri) If there’s any consolation, it’s that the people I talked to at the food tent after the race all agreed this was a tough swim, so at least it wasn’t just me. It _was_ tough. ### T1 I felt bloated when I left the water and ran through transition, with a sharp pain on the side of my abdomen, which I’m pretty sure was caused by the water and air I ingested in that last stretch of the swim. It felt like the same issue I had at Ironman Coeur d’Alene two years ago, where I DNF’d, and at Ironman 70.3 St. George last year, where I barely finished. Well, fuck. There wasn’t much I could do about it except press on and hope it went away, so I got my bike gear on, sprayed some sunscreen on, packed my swim gear, and left T1 after 10:15. ### The Bike The bike course starts with a quick segment on top of Lucky Peak Dam, followed immediately by a fast, steep descent down the dam road, which they recommend taking with caution (and in fact, on race day I saw someone who had crashed badly at the very bottom). After that, the bike course goes through backroads in the farmlands outside of Boise. It’s moderately hilly, with only a handful of climbs and 568 m of elevation gain. The surface is mostly chip seal, but at least in good condition, without a lot of potholes or hazards that I could see. The best part of this course is that from the moment you make that left turn just south of the airport to the moment you get back on Gowen Road, the race is entirely on closed roads. That’s 56 km of racing without _a single_ car in sight—pure bliss. It’s worth mentioning that for most of the course you’re riding in the left lane, so the first and last aid stations are left-hand grabs, something that had never occurred to me to practice (and apparently not many people did—the road along the first aid station had more bananas on the tarmac than a Mario Kart track). It’s a good bike course overall, perhaps not as scenic as St. George or Coeur d’Alene, but enjoyable nonetheless. View this course in Garmin Connect or Strava. I left T1 and coasted down the dam road, using that time to assess how I felt, and whether or not I needed to adjust my race plan. I had set up a Power Guide on my Garmin with a target intensity of 80%, which Best Bike Split estimated would give me a 2:33:04 finish time. I planned to fuel that effort with two 24-ounce bottles of Maurten Drink Mix 320, for roughly 80 g/h of carbs, supplemented with plain water in my bike’s aero bottle for some extra hydration in case the day was hotter than expected, which I had the brilliant idea to freeze overnight (the bottle is black, and at St. George my water was unpleasantly hot halfway through the race). However, between my lack of sleep and now the abdominal pain, I didn’t think I had it in me to follow my pacing plan, so I mostly ignored it, paced by feel, and just enjoyed the ride. I enjoyed this dam segment. Credit: FinisherPix The pain didn’t get worse and I could hold my aero position comfortably, so I put in a solid effort nonetheless, especially on the climbs. The course was fairly crowded, but other than a handful of times where I was blocked by other riders, and a short segment on Gowen Road designated as single-file riding, I had plenty of space to pass folks. I did see something I had never seen before in the dozen races or so I’ve done: An age grouper in front of me got a blue card—a two-minute penalty—from a referee. I couldn’t tell if it was for drafting, blocking, or littering, but it’s good to know it _does_ happen sometimes. Gearwise, I stuck to the same setup I used last month in Coeur d’Alene, except for one change: I replaced the Bontrager Hilo Comp saddle that came with my bike with a brand new Wove V8 saddle, and it’s the most comfortable bike saddle I’ve used. I had zero discomfort, which helped me stay in aero longer than I would have otherwise. I kept my two bottles in my existing BTA setup, but one of my goals for this summer is to learn to do aerodynamic testing and see if that’s more or less aero than putting one of the bottles behind the saddle, and if any aero benefits are worth trading the convenience of having both bottles in front. The most glowing review I can give to this saddle is that I didn’t think about my ass even _once_ the entire ride. I enjoyed the climbs and put down some decent power in aero to pass people on the flats. The weather was pleasant—it didn’t get too warm, and the wind wasn’t too bad, although I could definitely feel a headwind on the westbound portions of the course. The only sketchy part of the course was the very last descent on Pleasant Valley Road on the way back to Boise, where I got maybe a little overconfident until a strong gust of wind almost knocked me off the bike. I white-knuckled it the rest of the way down, cursing loudly. The ride was otherwise uneventful, and locals were cool and supportive throughout the whole race—except the guy wearing a cowboy hat with a large knife hanging from his belt who gave me a big thumbs-down near the end of the bike leg. Somehow that hurt more than if he had given me the finger. Eastbound on Tenmile Creek Road. Credit: FinisherPix I finished the bike leg with an official time of 2:34:45, in 29th place in the M40–44 age group, and only about two minutes slower than Best Bike Split estimated, despite not following my pacing plan at all. Not bad. ### T2 I rolled into T2 just in time to hear Paula Findlay being announced as the winner of the women’s pro race, as I expected. Nice. I racked my bike, changed into my running gear, used the toilet, and ran out in 6:57. ### The Run By now the sharp pain on my side had become dull and diffuse, but more importantly, despite drinking most of my two bottles of Maurten, my stomach wasn’t sloshing, which meant it hadn’t shut down. I thought solid food would be easier on my stomach than gels, so I planned to rely on Maurten bars for the run, eating half a bar roughly every thirty minutes. That’s about half the calories I’d usually consume during a 70.3 run, but since I had fueled properly on the bike, it might be enough to get me to the finish line without either upsetting my stomach or bonking. I did notice that my trisuit was covered in salt; I’d definitely need to focus on hydration, grabbing water at every aid station and electrolytes as needed. The run course consists of two laps on the Boise River Greenbelt, starting and ending at Julia Davis Park. It’s pancake-flat, with a mere 26 m of elevation gain, and significant tree cover providing plenty of shade for most of it—if I had to guess, I’d say 60% of the course is in the shade. The course is _not_ closed to the public, since Boise residents use it to commute and recreate, but everyone, athletes and residents alike, were cool about it and happy to share the space (this also makes it exceptionally spectator-friendly). It’s a _phenomenal_ run course, and I have a feeling this race is going to end up on several of Ironman’s Athletes’ Choice Awards lists this year. View this course in Garmin Connect or Strava. The run went pretty well, all things considered. My pain eased, although it never went away—I think the bars helped. The heat maxed out at 34ºC towards the end, according to my watch, but it didn’t feel as sweltering as I expected. I didn’t dig particularly deep, but kept a steady pace that felt about RPE 7—not easy, but not too hard. The shade definitely helped, but it was interesting to compare how relatively comfortable I felt running in this heat compared to the pure misery of that run in St. George just two months ago. Almost at the finish line. Credit: FinisherPix I had a good time. I walked through every aid station for water, high-fived every spectator I could, waved at the people watching the race while floating down the river, and before I knew it I was back in Julia Davis Park for the final stretch to the finish line. I finished the run in 1:48:07, with a final pace of 5:01/km. My total time was 5:28:10—a personal record for the 70.3 distance, which I was pleasantly surprised by, considering I wasn’t feeling well from the start and didn’t go all out. I was 37th in the M40–44 age group, and 354th place overall. I wish I could have done this race at my best, but it certainly could have gone a lot worse—finishing with a PR is more than I could have asked for. I’ll take it. I don’t think I’ve ever been more encrusted in salt after a race. Credit: FinisherPix * * * After the race I was interested in seeing how I did in the new World Championship qualification system, which multiplies each athlete’s actual finish time by their age group’s “Ironman 70.3 Standard” to create normalized, comparable times across all ages and then ranks everyone together for the slot allocation and rolldown. In the age-graded results, I was 228th overall with an age-graded time of 5:03:56 (5:28:10 × 0.9262, the standard for the M40–44 age group). With only 35 World Championship slots for men, I didn’t stand a chance at getting one—it’s safe to say that with this new system Worlds is firmly out of reach for now, but no matter, it simply means I’ll need to work harder. I’m in this for the long run, anyway. *[DNS]: Did Not Start *[DNF]: Did Not Finish *[BTA]: Between the Aerobars *[RPE]: Rate of Perceived Exertion *[PR]: Personal Record
www.giventotri.com
August 8, 2025 at 3:22 PM
Ironman announces new performance-based qualification for Ironman and Ironman 70.3 World Championships
This new system, which takes effect with the 2026 qualification cycle starting this month, basically does away with the old roll-down system, in which unclaimed slots would roll down indefinitely within an age group. Ironman has a good explanation in their FAQ, but the short version is: * Each race is allocated a number of World Championship slots, as before. * Winners of each age group automatically get a World Championship slot. * If they decline it, the slot can only roll down to second or third place. * Any unclaimed slots go to a global “Performance Pool” for that race. * The finish times of the remaining athletes are normalized by multiplying them by some factor for each age group, so they can be ranked together. * This factor is derived for each age group from the top World Championship finish times over the past five years, and will be updated every year. * The remaining slots are offered to the top finishers in this age-graded normalized ranking, and roll down until they’re all claimed. * For Kona, there’s a single age-graded ranking including men and women; for 70.3 Worlds there are separate rankings for men and women, since they’re separate races. It sounds complicated, but the examples they have in the FAQ make it easier to understand: > Anne is 42, she finishes IRONMAN Kalmar in 9:19:51, giving her an age-graded finish time of 8:07:26, applying the Kona Standard of 0.8707 (9:19:51 × 0.8707 = 8:07:26). John is 43 and finishes IRONMAN Kalmar in 8:50:31, giving him an age-graded time of 8:33:42, applying the Kona Standard of 0.9683 (8:50:31 × 0.9683 = 8:33:42). > > Anne would rank above John in the age-graded rankings due to her age-graded time of 8:07:26 being faster than John’s age-graded finish time of 8:33:42. For me, this means any hopes I had of getting lucky with a deep roll down in my age group at a late-season race are probably dashed, but I like this change; it makes qualification fairer and more competitive. I’ll simply have to _git gud_ , or outlive everyone and qualify in the 90–94 age group. *[FAQ]: Frequently Asked Questions
www.giventotri.com
July 3, 2025 at 3:08 PM
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
www.giventotri.com
July 1, 2025 at 3:08 PM
Race Report: 2025 Grand Teton Half Marathon
Last year I surprised myself on the run at Ironman 70.3 Coeur d’Alene—I came out of T2 like a bat out of hell and it ended up being my fastest run split in a 70.3 to date. There were probably multiple reasons for that, including the shortened swim, but I think one factor was the Grand Teton Half Marathon, which I had raced two weeks prior. That was _also_ my fastest half marathon to date, and I suspect that strong run kicked my running fitness up a notch or two just in time for the race. This season, I’m putting that hypothesis to the test by racing not one, but _two_ half marathons before this year’s edition of Ironman 70.3 Coeur d’Alene. The first one was the Jackson Hole Half Marathon two weeks ago, so without further ado, here’s a quick race report about the Grand Teton Half Marathon, my last running race before heading back to Idaho later this month. * * * With over 2,000 participants, the Grand Teton Half Marathon is the biggest of the three local half marathons in Jackson Hole, and it’s become my favorite as well, with great organization, cool swag and medals, and a chill course with lovely views of the Tetons. This year’s course was exactly the same as last year: It starts at the Stilson Lot next to Rendezvous Park, heading west toward Wilson on the Jackson Hole Community Pathway for about a kilometer and a half before looping back towards R Park. After crossing the pedestrian bridge over the Snake River, it continues along Wyoming Highway 22, then turns onto Spring Gulch Road around halfway, finishing at the Jackson Hole Golf Club. The first half of the route is fairly flat and on the Community Pathway; the second half is at a slight grade and on the road, but with cones and ample separation from car traffic, it never feels even remotely dangerous. The total elevation gain for the course is about 98 m, most of it on the second half, on Spring Gulch Road, which has an average grade of about 0.5% according to this Strava segment I created. I know a lot of people travel for this race, so it’s also worth mentioning that the average elevation at this race is 1,905 m—if you’re planning to do it, make sure you know how to prepare for racing at altitude. View this course in Garmin Connect or Strava. The parking situation for this race was more complicated than in previous years due to the ongoing construction of the new Stilson Transit Center near the start line, so I asked Kate to drop me off instead of taking one of the shuttles provided by the race. It was a brisk but beautiful 2.8ºC morning, with clear blue skies that guaranteed gorgeous views of the mountains from Spring Gulch Road and at the finish line. I got there shortly before 6:00 AM and did a short warmup to shake off the cold before seeding myself near the front for the start. I didn’t have specific time goals for this race; last year I finished fourth in the male masters category with a time of 1:37:09, so finishing faster than that was more of a stretch goal than anything else, although I did hope to get on the podium again. The past two times I’ve done this race, I’ve started too fast and then blown up a little bit towards the end, so I wanted to try to pace more evenly and finish stronger. I also wanted to see if tweaking my nutrition would help—last month at the Jackson Hole Half Marathon I felt like I could have used one more gel, so my nutrition for this race was a Maurten Gel 160 before the race start, another one about thirty-five minutes in, and a Maurten Gel 100 Caf 100 about thirty minutes later, for a final caffeine boost. The aid stations, roughly every 5 km, had plenty of Honey Stinger gels and waffles, along with bananas and oranges, but as always, I prefer to use Maurten, since it’s what I’ve trained with and what they have at the Ironman aid stations. _Train like you race_ , as they say, although in this case maybe it’s the other way around. The race started at 6:30 AM on the spot, and even though my goal was to not start too hard, it quickly became obvious I didn’t have much of a choice—I just didn’t feel strong at all. Maybe it was poor sleep or accumulated fatigue from my previous workouts, but some days you just ain’t got it, and that’s the exact thought that crossed my mind almost as soon as I started: “Nope, I ain’t got it today.” Oh, well. Still, I did my best to hang on and managed to hold an uncomfortable pace of 4:30/km through the first half of the race, until the turn on Spring Gulch Road, where I expected to slow down a bit due to the slight grade. Right after the turn I started feeling some pain in my left calf, but I dug deep—I didn’t want to let my pace get slower than 5:00/km. It was a struggle and I got passed by a few people, but despite the niggling pain in my calf, my pace for the second half of the race was a steady 4:47/km. I think the second gel helped; at least I didn’t feel myself fading towards the end, like I did two weeks ago. Almost there. Credit: MarathonFoto I crossed the finish line in 1:37:49, just forty seconds slower than last year. I got third place in the male masters category and twenty-second overall, out of 2,166 finishers, so even though I was slower than last year, I moved up a spot on the podium. Considering I wasn’t firing on all cylinders, I’ll take that as a win. After sticking around for the awards ceremony and collecting my medal—in an all-Wyoming podium for my category, interestingly—I rewarded myself with breakfast and pastries from my favorite bakery in town, the biggest upside of racing at home. And with that, it’s almost time to start my taper for Ironman 70.3 Coeur d’Alene, where I’ll find out if doubling up on these half marathons was a brilliant strategy or a stupid, reckless idea. Stay tuned!
www.giventotri.com
June 21, 2025 at 3:03 PM
I needed a way to track my Endless Pool workouts, so I built one
I mentioned this briefly in my race report about this year’s Ironman 70.3 St. George, but for the past few weeks I’ve been swimming in an Endless Pool, since the Teton County Rec Center’s lap pool remains, alas, closed for the foreseeable future. It’s been an effective training tool, but one of the annoying things about it is that it’s hard to track my workouts—there are no “laps,” so all I can do is time-based sets, and even then, I have trouble keeping track in my head of how many sets I’ve done, at what pace, and for how long. So, I built myself a little tool to do this: I call it SwimSetter, and it’s a simple web app to keep track of my sets in the Endless Pool. Using it is easy: Just bring your phone to the pool in a waterproof case, leave it on the side, open the app, set a timer or a stopwatch on your watch, and then just swim. Whenever you stop for a rest, enter how long your last set lasted and at what pace it was, and repeat until you’re done with your workout. The app will add up your total time, distance, and average pace, which you can then enter into a workout log or a manual Strava activity or wherever you want. It’s a very simple tool that answers a very simple question for me: “Have I swam enough today?” But it might be useful to you too, so here it is.
www.giventotri.com
June 5, 2025 at 3:02 PM
Race Report: 2025 Jackson Hole Half Marathon
This will be a short one: I just raced this year’s edition of the Jackson Hole Half Marathon, the first of the three half marathons organized in Jackson Hole every year (the other two being the Grand Teton Half Marathon in June and the Hole Half in September). Of these three half marathons, this one is usually the smallest, with only 166 runners this year—less than a tenth of the size of the much-bigger Grand Teton Half Marathon. And yet, for some reason it feels like the most competitive of the three—I’ve podiumed at the Grand Teton Half Marathon every time I’ve done it, but have never come even remotely close at this race (I’m not sure why this is, but I suspect this one is simply composed mostly of locals who are acclimated to the altitude). In any case, this race always feels deceivingly challenging, although I planned to take it easy, and run it at a conservative pace in place of my weekly long run in my training plan. The route for this race starts just outside Teton Village and heads south on the Moose-Wilson Road towards Wilson. After crossing the pedestrian bridge over the Snake River, it continues on the community pathway along Wyoming Highway 22. Then, it takes the Tribal Trail Road, loops around Colter Elementary School, and continues on the pathway along Flat Creek and Russ Garaman Park (one of my favorite places to run in Jackson) before heading on Snow King Avenue towards the finish line at Phil Baux Park, at the base of the Snow King Mountain Resort. It’s a very pleasant route, mostly downhill until the last 4 km, with just 67 m of elevation gain. They also had aid stations stocked with water and Gatorade roughly every 5 km. You won’t get much of a view, though—you’re running away from the Tetons the entire time. View this course in Garmin Connect or Strava. Kate dropped me off at the start line in the Teton Village at around 6:40 AM, twenty minutes before the start of the race. It was a chilly 2.2ºC, but with much-welcome clear skies after a couple weeks of almost non-stop rain and storms, so I spent a few minutes warming up with some leg swings and light jogging, and ate a Maurten Gel 160 before getting in line for the start. It wasn’t very crowded, given the small size of the field, so I put myself near the front, even though, again, my plan was to take it easy and treat this as my long run for the week. That plan lasted approximately… three seconds after the race started. Maybe it was just the slight downhill grade of this portion of the race, or the rest day I took the day before, or maybe I was just being a competitive ass, but my legs felt _good_ , and I quickly found myself at the front of the race—as far as I could tell, there were only about five people in front of me. Well, maybe this would be the day I would finally podium on this race, so I said fuck it, and went for it. I went _hard_. My pace for the first 10 km or so was 4:24/km, slightly faster than my running threshold pace, according to Garmin Connect. I felt pretty great until then, but then quickly started to struggle—there are a couple of punchy climbs on the community pathway after crossing the WY-22 highway that knocked the wind out of me, and my pace started to slow down. I had a Maurten Gel 100 Caf 100 at around the halfway point of the race, hoping to get a little boost. I wish I had timed it better; by the 16 km mark I was suffering again, and I was all out of gels. I could feel myself fading in the slight grade of the last 4 km and got passed by two or three people, but I gave it everything I had left in the last kilometer and crossed the finish line with an official time of 1:36:43, and a pace of 4:35/km. It’s my fastest half marathon to date, but I was even more surprised when I looked at the results and found out that not only had I podiumed, I finished first in the M40–49 age group, and eighth overall. Not bad. Not bad at all. Yee-haw. Not gonna lie, this feels pretty good. In 2017, I ran the Army Ten-Miler in DC, one of my first races, and at the time, my longest one. It was awful—it took me 2:16 to finish, and I probably walked half of it. Today, I got a PR in the ten-mile distance of 1:11:48; it’s wild to me that I’ve shaved over an hour off of that time since then. I’m getting older now and I’ve had some setbacks with my running training this year, so it’s very heartening to think that… maybe my fastest days aren’t behind me just yet. *[DC]: District of Columbia *[PR]: personal record
www.giventotri.com
June 3, 2025 at 3:02 PM
Race Report: 2025 Ironman 70.3 St. George
I wish I had known at the time how good I had it the first time I raced in St. George. I struggled with the ice-cold swim and knee pain on the run, but the weather was absolutely perfect that day and I cruised to a sub-6 finish, in spite of the challenging course. It quickly became my favorite race. I got a taste of the _real_ St. George last year. I went with an aggressive goal of improving on that sub-6 result; I was confident I could achieve that despite the sweltering heat on race day, with just some minor tweaks to my pacing plan. I was wrong, _so_ wrong. The heat clobbered me on the bike and I completely fell apart on the run—it was my worst result in a 70.3 to date. Of course, I immediately signed up for this year’s edition, which as it turns out, will be the last one for now. So, one last dance in St. George. I hoped for cool weather again, but as race day approached it became clear that wasn’t in the cards—the weather forecast for race week saw steadily rising temperatures, with a blistering high of 34.4ºC on race day, even worse than last year. With that, my race goals went from “personal best” to “just finish,” with a stretch goal of “no regrets.” Read on for my last race report from the final edition of Ironman 70.3 St. George. ### Pre-race preparations I arrived in St. George the Thursday before the race, and stayed at the Best Western Coral Hills, just a couple blocks away from the Ironman Village. After checking into the hotel and dropping off my stuff, I walked over to check in for the race and do some shopping at the race expo. By the time I was done, it was still light out and fairly warm, at 29ºC, so I went back to my room to change into running clothes and do a quick thirty-minute shakedown run in the sun. That got my heat adaptation score in Garmin Connect to a whopping 16%, which made me wish I could have traveled to St. George a few days earlier to get a little bit more heat training. Race day promised to be even warmer; by now the high in the forecast had risen to 35ºC, but other than occasionally training indoors over the winter with base layers on, and spending some time in the sauna and hot tub at the gym, that one run was the full extent of my heat training, and it would have to do. This race does a split transition, with T1 in Sand Hollow State Park and T2 in downtown St. George, so as part of the check-in process I received morning clothes and gear bags, similar to a full-distance Ironman. I spent the next morning getting my bags ready, which I packed as such: #### Morning clothes bag * Two pairs of Roka R1 swim goggles (one as a spare, just in case) * Swim cap * Two bottles of Maurten Drink Mix 320 for the bike leg * An aero bottle with water for the bike leg * A bottle of water to rinse my feet in T1 * A small Pelican case to stash my phone and hotel room key * TriSlide spray * A Maurten Gel 100 to eat before the swim * Two Maurten Gel 160 to stash in my bike’s bento box * Garmin Edge 1050 bike computer * Polar H10 heart rate monitor * Timing chip * Headlamp #### Bike gear bag * Giro Aerohead helmet * Shimano S-Phyre SH-TR903 shoes * Socks * Rapha Pro Team gloves * A sports towel * A travel-size can of SPF 50 sunscreen #### Run gear bag * Race belt with my bib * Hat * Hoka Cielo X1 2.0 shoes * Roka Matador Air sunglasses * An extra pair of socks * A sports towel * A travel-size can of SPF 50 sunscreen Later in the afternoon, I walked over to the Ironman Village to listen to the pre-race briefing and drop off my run gear bag, and then drove to Sand Hollow State Park to check in my bike and gear bag in T1, same process as in previous years. As I drove there, my car’s thermometer said it was 36ºC outside; I wondered what it would be like to run in that heat. It was so hot in Sand Hollow, after I racked my bike I kneeled down to let some air out of the tires and burned myself on the pavement almost instantly. Ouch. My bike, racked in T1. It was tight there on race day. After scoping out the layout of the transition area and memorizing the location of my bike, I hung around for a few minutes talking to some folks and checking out the pros’ bikes—Sam Long’s bike looks incredible in person. I also took the opportunity to chat with the referees and ask them about the new World Triathlon hydration rules, since my front hydration setup had been rendered illegal. They confirmed that Ironman would adopt them and start enforcing them on May 25th, so I was in the clear for now, but I’ll have to come up with a solution before my next race. Afterwards, I picked up my timing chip before heading back to the hotel to have dinner, double-check the rest of my gear, prepare my bottles of Maurten, take a relaxing bath, and try to get a good night’s sleep. Thankfully, I slept like a rock. I woke up at 3:00 AM on race morning, had my usual breakfast of a plain bagel with jam and a cup of coffee, and killed some time before heading out to catch one of the shuttles to Sand Hollow. I arrived there shortly before 6:00 AM, and found transition far more crowded than in the past two years; the announcer said there were 2,400 age group athletes. I’ve never had trouble pumping up my tires before a race, but this time every single pump around the perimeter of the transition area had at least a dozen people in line—if an spectator hadn’t generously offered me his pump, I probably wouldn’t have had time to do it before transition closed. T1 at Sand Hollow State Park, 6:35 AM, 16.7ºC. After setting up my bike and putting on my wetsuit, I handed over my morning clothes bag to a volunteer and lined up with the 43–46 minute group in the staging area, which was packed so tightly I could barely move. It took me about an hour to get down to the water, and by then I was sweating profusely under my wetsuit, which made me _really_ look forward to a nice, cold swim for once. ### The swim I always come to this early-season race less prepared than I’d like for the swim. It’s just hard for me to swim consistently in the winter; the only lap pool in town, at the Teton County Rec Center, is about a thirty-minute drive away, its hours are limited, it closes for two weeks over spring break, and there’s always something else, like lifeguard shortages or construction or whatever. This year was no exception—a month before the race, the lap pool closed until further notice due to a mechanical failure, leaving me without a place to swim. I almost pulled out of the race altogether, but I found out that the Athletic Club, one of the fancy gyms in Jackson, has an Endless Pool, so for the past month I’ve been swimming there a few times a week. It’s expensive, but it may have been a blessing in disguise; the hours are more flexible, so I’ve been swimming more often and more consistently than if I had kept using the lap pool. I was curious if that additional volume and consistency would have an effect on my race day pace. It was time to find out. My race started at 7:48 AM, and the water felt great as soon as I dived in; if there’s one silver lining to this year’s hot weather it’s that the water at Sand Hollow had warmed up to a lovely 19.2ºC. I wore my Roka Maverick Pro II sleeveless wetsuit, but it only took me a few strokes to get used to the cold and get to work. Sighting on the outbound leg was as difficult as usual, with the buoys aligned with the rising sun, so for the most part I followed other swimmers and hoped they could see better than me, and with a race this crowded, there was no shortage of people to follow. The “washing machine” effect was non-stop from start to finish. I had a hard time swimming through the crowd, which slowed me down quite a bit—I need to get more comfortable swimming over people, but it is what it is. Things got a little easier after the first turn buoy; it was still crowded, but without the sun in my face, I had an easier time sighting the buoys, so I was able to distance myself a bit from other people. After passing the last buoy, I pointed myself towards the swim exit and let it rip for one last sprint. I got so into the zone that it took me a while to notice the washing machine effect had stopped; there was no one around me, except a volunteer in a kayak waving at me. That’s when I realized I had gone off course, and the last buoy I saw wasn’t actually the last one—there was one more, and I was about to pass it, illegally, on the wrong side. Oops. You can see my brief detour near the end there. After a quick course correction to pass that buoy on the correct side, I rejoined the crowd and got one last beatdown before sprinting for real towards the exit, finishing the swim in 40:36. That… didn’t seem right. I had to wait until after the race to look at the distance and the GPS track to make sure I hadn’t accidentally cut the course or something, because I couldn’t believe that time when I looked at my watch. Despite my issues sighting, the crowds, and going off course, this was still my fastest 70.3 swim ever—I shaved almost seven minutes from last year’s time. I don’t care how much it costs, I’m gonna keep using this Endless Pool. Holy shit. ### T1 After exiting the water, I got my wetsuit ripped off by the wetsuit strippers before jogging through transition. I wasn’t chasing a PR, so I took a few minutes to calmly use the porta-potty, get all my bike gear on, spray on a good layer of sunscreen, pack my swim gear into my bike bag, and leave. I spent 11:04 in T1. ### The bike I was worried about the bike leg coming into this race. A year ago I thought I had appropriately adjusted my plan to account for the heat, and I was wrong—I still went too hard, my digestion started to shut down, and with my fueling plan shot, I fell apart on the run. It was a miserable slog from start to finish and I ended up walking most of the way. I wanted to avoid that happening again at all costs, but with a high of 35ºC, I would need to go much, much slower. For 70.3 races, I usually target an intensity of 84% intensity knowing that in practice I’ll end up a little lower than that; last year I revised that down to 80% and it was still too much, so for this year I decided not to have a target at all and instead go by feel. I set up a power guide in my bike computer with a target intensity of 75% anyway, but not with the goal of following it, but to make sure I didn’t exceed that. I could always go harder on the run, but if I overcooked the bike again, I’d be fucked. For this race, I brought my Trek Speed Concept to St. George for the first time, after doing the previous races on my Specialized Aethos road bike. I considered bringing the Aethos again, along with my S-Works Evade 3 road helmet—the former because it’s great in the climbs, the latter because it’s cooler than my Giro Aerohead aero helmet—but in the end decided that if I was going to ride at a lower intensity, then I should make up for it by chasing every aero gain I could, no matter how marginal, and try to get a few minutes back. Looking at the forecast for the day, it looked like I’d be starting the run just as the temperature started to get above 32ºC, so those minutes could make a difference. For nutrition, I had two 24-ounce bottles with Maurten 320 drink mix between my aerobars, and 26 ounces of water in my bike’s downtube aero bottle, which I don’t particularly love, but I thought I’d need the extra hydration and didn’t want to waste time slowing down at the aid stations. I also had two Maurten Gel 160 in my bento box, just in case I accidentally dropped a bottle. View this course in Garmin Connect or Strava. The bike course was almost the same as in previous years, leaving Sand Hollow and following the local highways along the spectacular desert views of southern Utah, before getting back to St. George for the roughly 8 km climb through Snow Canyon State Park. This year the long out-and-back segment through Ivins before starting the Snow Canyon climb was removed; instead, the initial out-and-back on SR-7 after leaving Sand Hollow was made a little longer, and a short out-and-back was added at roughly the halfway point. It was otherwise the same; a very hilly course, with 1,090 m of elevation gain—I love hilly courses. For the most part it’s a safe course, with lots of road closures and tons of space between the athletes and car traffic, but there are a handful of narrow sections where it felt a little risky to pass folks, especially given how large the field was. Shortly after leaving Sand Hollow. Credit: FinisherPix Once I left Sand Hollow State Park and got on SR-7 for the first out-and-back, I realized my strategy of pacing on vibes was the right one—the bike course was so crowded, with people often riding three or four abreast, trying to follow any kind of pacing plan would have been next to impossible. My plan was to take it easy, so I took it easy, passing when I could, coasting when I couldn’t, doing my best to stay out of draft zones, and trying to stay in aero as much as possible. Passing was easier on the climbs, although I resisted the temptation to go too hard on them. Overall, it was a chill, uneventful ride. The pavement was smooth, with some of the roads freshly paved, and I didn’t really feel the heat until the tail end of the ride, especially during the climbs, where I was glad I had that extra water in the aero bottle to drink and pour on myself. I made a point to take in the views one last time, especially in Snow Canyon, where the landscape is nothing short of otherworldly. I was grateful to have one last chance to enjoy riding through that incredible landscape. Petrified Dunes, Snow Canyon State Park. The Snow Canyon climb is approximately 8 km long, with about 300 m of elevation gain and an average grade of 4%. By the time I got there, the temperature was well over 32ºC; in other circumstances I would have loved to send it all the way to the top, but I had paced at a very easy 65% intensity, I had no issues so far with my fueling or my digestion, and I wanted to keep it that way. It was sweltering, with not even a hint of a breeze, and I saw a lot more people struggling with the climb than in previous years, either walking their bikes, or just sitting on the side of the road. Despite my slower pacing, it only took me two minutes longer than last year to complete the climb, although I was overheated and drenched in sweat from head to toe by the time I got to the top. I stopped at the aid station there and drank an entire bottle of water while a volunteer squeezed another one all over me; I hoped that would be enough to cool me down on the roughly 16 km descent back into St. George and T2. The elevation profile for the bike course. The temperature at the end was 36ºC. I thought that’d be an easy ride down, but that descent was ass-puckering, to say the least. I’ve never had any trouble blasting down this descent on my road bike, but I’m still a chickenshit when it comes to descending on a tri bike. It just feels twitchy and wobbly; coming down this road on a narrow lane with car traffic on both sides and feeling like I was barely in control of my bike is one of the scariest things I’ve ever done. Despite that, I somehow rode down fifteen seconds faster than last year, the only Strava segment where I got a PR on this race. I made it down safely and finished the bike leg in 3:08:13, over ten minutes slower than last year, but… I don’t care. Could I have gone harder? Probably, but I felt good, I was properly fueled, my stomach was behaving, and I was ready to empty the tank on the run. I’ll take that as a win. ### T2 When I got to the dismount line in T2, I rolled up next to someone hunched over her bike, being helped by a couple spectators; I don’t know if she was suffering from heat exhaustion or something else, but she seemed in pretty bad shape. I flagged one of the volunteers nearby, hurried to rack my bike, and then ran across transition to the medical tent to let them know someone needed help. Once I saw her being tended to, I walked back to my spot and sat for a couple of minutes to catch my breath while I changed into running gear, reapplied sunscreen, and packed my bike gear into the bag. I didn’t have the presence of mind to make a note of her bib number, but I hope she’s okay. I spent 11:10 in T2. ### The run This was a motherfucker of a run. I don’t know how else to put it. The course was the same as last year: Two laps around downtown St. George with 279 m of elevation gain in total. It starts with a short, steep segment through Main Street, with an average grade of 4.5%, followed by a long segment along Diagonal Street, with a milder grade of 1.2%. Then, after crossing the pedestrian tunnel under Bluff Street, there’s a short loop on the other side before coming back for a hilly loop around Dixie Red Hills Golf Club, partly on grass. Finally, it heads back downtown on Diagonal Street to either start the second lap or turn towards the finish line. In short, the first half of each lap is mostly uphill, the second half is mostly downhill. View this course in Garmin Connect or Strava. The heat was already oppressive by the time I left T2, and with no shade and most of the run on hot pavement, it only got worse. I started the run feeling good, right until I hit the first uphill segment. I felt absolutely terrible running uphill, right off the bike, with the heat radiating off the pavement; my legs felt like they weighed a ton each. I was less than ten minutes into the run and I was already having serious doubts that I could even finish. I thought about walking the rest of the way, but that felt like giving up, and I knew how pissed I would be at myself later on if I didn’t give it everything I had. I resolved to keep running and walk only through the aid stations, which at Ironman races are roughly a mile apart. Just one mile between them. One mile is nothing. Barely a workout. I could easily run one mile. I simply needed to do it thirteen times in a row. No big deal. Easy. I pressed on. Although I was pacing entirely on feels, I never slowed down to a walk, except at the aid stations, so I could make the most of them. I had a cup of water at the start and end of each one, a Maurten Gel 100 roughly every thirty minutes, shoved ice down my trisuit until they ran out, and dunked my hat in the buckets full of ice water they had set up for that purpose, which felt glorious on my head. I also took every opportunity to let the volunteers with garden sprayers and the spectators with hoses and water guns douse me with water, and let the evaporative cooling do its thing. I didn’t have any cramping or other signs of electrolyte issues, but drank a few cups of Mortal Hydration along the way just in case. I pushed through that first half of the first lap, and by the second half, once I got back on the downhill portion of Diagonal Street, I felt renewed, like I got a second wind. Still, I kept up with my hydration and fuel plan, and kept taking advantage of every opportunity to cool down. That second wind evaporated the moment I started the second lap and started running up Diagonal Street again—the “second wind” was simply because I was going downhill. I told myself I only needed to run half the lap. Just half the lap. Just get through the golf course and it’d be all downhill from there. Just half the lap and I’d get another “second wind.” Just half the lap and the rest would be easy. Just one mile, then another, and then another. Three miles is nothing. Barely a workout. No big deal. Easy. I didn’t hear no bell. Credit: FinisherPix That half a lap was _horrendous_ , absolutely miserable. According to my watch, the temperature peaked at 38ºC during this time; I felt nauseous, overheated, and dehydrated. My heart rate monitor went on the fritz, with my heart rate jumping erratically all over the place—or at least I hoped the problem was my heart rate monitor. Most of the aid stations were out of ice by then, and no matter how much water I drank, how much water I dumped on myself, how much I got sprayed with water, how much I dunked my hat in the buckets, I’d be bone dry again a few minutes later. I wasn’t even sweaty, I was just covered in dry salt. The parts of the golf course that were on grass didn’t offer any relief either, it just felt like going from dry heat to humid heat; I swear I could feel the humidity wafting up from the grass. There was just no respite whatsoever from the heat. I’m not exaggerating when I say this was the hardest run I’ve ever done. It took every bit of willpower I had, but I didn’t stop. Once I got past the golf course and stepped off the grass for the final time, I felt like I had just crossed the finish line, even though I still had about three more miles to go. It was only then that I finally believed I could actually finish this thing. I had a Maurten Gel 100 Caf 100 at the next aid station, hoping the caffeine would give me a little oomph for that last stretch. I gave it everything I had left and finished strong, screaming and high-fiving spectators on the sidelines as I sprinted through the final chute. I crossed the finish line in 2:02:06, for a total time of 6:13:07. I finished in 100th place in the M40–44 age group, out of 195, and 975th place overall, out of 2,103. I was absolutely spent; my entire body, every joint, every muscle, hurt so badly. It’s over. It’s done. Credit: FinisherPix After collecting my medal and finisher’s hat, I grabbed some food at the Ironman Village, picked up my bike and gear bags, and hobbled back to the hotel for a much-needed soak in the bathtub. I slept twelve hours straight that night—I’ve never been more tired after a race. * * * This is bittersweet. I _loved_ racing in St. George, even though it kicked my ass every time. I would have happily done this race every year for the rest of my life if I could. What’s not to love? It’s _incredibly_ hard, you spend a day in one of the most beautiful landscapes in America, and St. George is a great town, full of amazing volunteers and neighbors cheering you on the whole way. I’m sad I won’t get to do this again, at least for a while, and that I won’t get another chance to try for that personal best I wanted. So it goes. That said, while this result wasn’t a personal best by any means, it feels just as satisfying, because it was _so_ hard-fought. I gave it everything I got, left nothing on the table, and never gave up. I couldn’t ask for a better way to close the books on this race. No regrets. Thank you, St. George. *[PR]: personal record
www.giventotri.com
May 26, 2025 at 2:59 PM
World Triathlon updates hydration rules again
They’re further revising the rule changes they announced a couple months ago with a new set of updates, effective as of April 15th. The rule interpretation document includes a number of changes, but most notably, all front and rear hydration now must fit within a certain space on the bike. For front hydration: > When measured from the lowest edge of the arm support (if none exists, the lowest edge of the athlete’s elbow in the rider’s intended aero position), all attached objects on the handlebars (bottles, holders, containers, etc.) must be within an area with the following dimensions: > > * a maximum of 250 mm in the direction of the saddle and > * a maximum of 200 mm in height and > * no further than the foremost point of the handlebars or clip-ons, and > * a maximum of 20 mm from the highest point of the front wheel. > And for rear hydration: > All attached holders, containers, bottle holders, etc. must fit completely into an imaginary frame no larger than 30x30cm. Bottles may protrude beyond this area. The volume of liquid hasn’t changed: Up to two liters in the front and back, and up to two bottles in the back. There’s one big exception, though—the rules now include built-in hydration systems, so if you are using one, you can only carry up to two liters _and_ you can’t carry bottles behind the saddle. It seems the intention is to put everyone on a level playing field by limiting hydration to a total of four liters. I expect Ironman to adopt these new rules shortly, just like they did last time. In the meantime, I need to go check my hydration setup, because I honestly have no idea if it’s legal anymore. Update: It’s not. Fuck.
www.giventotri.com
May 3, 2025 at 2:52 PM
Ironman adopts World Triathlon’s bike hydration rules
Well, that was fast. On Sunday I wondered if Ironman would adopt World Triathlon’s new rules limiting the amount of hydration that can be carried on the bike, and today I got my answer: _Yep_. In the 2025 Ironman competition rules, the section on bike equipment has been updated to be consistent with World Triathlon rules: > (i) Front Mounted Water Bottles and Hydration Systems mounted to components attached to the bike that rotate around the steering axis (e.g., cockpit extensions, top tube, headset, stem, head tube) must have a combined maximum volume capacity of no more than two (2) liters (this excludes water bottles and hydration systems located inside the frame triangle of a bicycle or inside the bicycle frame) (DSQ). > > (ii) Rear Mounted Water Bottles and Hydration Systems are limited in size, capacity, dimension and location as set forth below: > (i) Cannot contain more than two (2) water bottles* (DSQ); and > (ii) Must not exceed one (1) liter capacity per bottle* (DSQ). > *Excludes water bottles and hydration systems located inside the frame triangle of a bike or inside the bike frame. Here’s a full summary of the updated competition rules, which include a few other verbiage changes and updates for consistency with World Triathlon. Among other things, the penalties for blue card violations, such as drafting and littering, have been reduced to 3 minutes for full Ironmans and 2 minutes for 70.3s (down from 5 minutes for both). The rules also clarify that you can wear neoprene hats whenever wetsuits are allowed and that you can wear two swim caps (in both cases you still have to wear the race cap on top). Ironman also has a short FAQ that explains the changes very clearly. *[FAQ]: frequently asked questions
www.giventotri.com
March 5, 2025 at 2:43 PM
New World Triathlon bike hydration rules—will Ironman follow?
Last month, World Triathlon announced updates to the competition rules, and there’s been some conversation online about some of these changes, including relaxing the water quality standards for the swim and banning watches during the swim. The former is interesting after the water quality in the Seine caused the men’s triathlon to be postponed at the Olympics last year; the latter only applies to elite races in the standard (i.e. Olympic) distance or shorter, so I don’t expect Ironman to implement it. However, lost in the chatter was another update to the rules that wasn’t even mentioned in World Triathlon’s announcement, and limits how much hydration can be carried on the bike: > m.) Hydration Volume Limitation: Hydration volume (e.g. bottles or hydration systems) mounted to components that rotate around the steering axis (e.g. cockpit extensions, base bar) must have a combined maximum capacity of 2 litres; > > n.) Rear Mounted hydration systems, (excluding those mounted to the inside the frame triangle bike are limited in size, capacity, dimension and location as set forth below: > (i) cannot contain more than two water bottles; > (ii) must not exceed 1L capacity per bottle. In short, you can only carry a maximum of two liters between the aerobars, and up to two bottles, of no more than one liter each, behind the saddle. Ironman hasn’t released any updates to their rules this year, but it’s interesting that this rule would render 2024 Ironman World Championship second-place finisher Magnus Ditlev’s sick three-bottle BTS setup illegal, so I’m curious to see what they do. *[BTS]: behind the saddle
www.giventotri.com
March 5, 2025 at 2:43 PM
TrainerRoad Launches Zwift Integration: Here’s How It Works
I’ve been using TrainerRoad for all my cycling training, with great results, since even before I got into triathlons. I love the training plans and all the machine learning magic they apply to them, but doing long workouts indoors while looking at nothing more than a graph and some numbers is mentally challenging, to say the least. Or as a certain cyclist would say: “It builds character.” There are days when completing a two-hour (or more!) cycling workout indoors requires more mental endurance than I have available, especially in the winter, when I can’t ride outdoors to break the monotony. On those days, even a little bit of distraction helps. Zwift is a good one; I enjoy the visuals and collecting route badges and achievements while exploring Watopia definitely helps pass the time. Over the years I’ve tried the two common ways of using TrainerRoad with Zwift: Either by running them side by side, or by recreating the workouts manually and doing them in Zwift. Both methods work reasonably well, but they’re a bit of a hassle to set up and each comes with their own set of downsides. About a year ago, though, Zwift announced a new Training Connections API, which enables third-party training platforms to send cycling and running workouts over to Zwift, so that users can do them there. Since that announcement I’ve been waiting with bated breath for TrainerRoad to integrate with it, and it finally launched earlier this week. I was invited to try it out while it was in closed beta, so I’ve had the chance to do about a dozen TrainerRoad workouts in Zwift over the past few weeks; here are a few first impressions, which are overall very positive. If you’d like to try Zwift, sign up using this referral link and we’ll both get a free month. ### How it works Just to state the obvious: You’ll need to be a subscriber in both platforms to make this work (although it might work with a lapsed Zwift account if you stay under the monthly 25 km limit). If you are, setting this up is quite simple, all you need to do is go to the Connections page in the TrainerRoad website, hit the “Connect” button under Zwift, log into Zwift, and authorize the connection. Once this is done, TrainerRoad will push any workouts that you have scheduled for today and tomorrow into Zwift, and today’s workout will show up in the “For You” carousel in Zwift’s Home screen. If you don’t have an active training plan, TrainerRoad will push a recommended workout instead; this is based on TrainerRoad’s TrainNow feature, which uses machine learning to suggest a workout based on your recent training history. The syncing happens automatically: If you put a workout on your calendar, it’ll show up in Zwift almost instantly (or at least quickly enough that it’ll be in Zwift by the time you switch apps). Similarly, if you select an alternate workout, or accept plan adaptations suggested by TrainerRoad’s Adaptive Training system, those changes will be immediately reflected in Zwift. That does mean that if you need to manage your training plan, such as selecting alternates or moving workouts around, you’ll still need to do that on TrainerRoad before opening Zwift, but it all works seamlessly (and TrainerRoad is working to add an option to automatically accept adaptations and FTP adjustments). With your connection set up, sending TrainerRoad workouts in Zwift is pretty easy. If you have a a workout scheduled for today in your calendar… Today’s workout: “Bashful -1,” a sixty-minute VO2 max workout. …then simply open Zwift… …select it from either the Home or the Workouts screen, pick a route to do it in, and off you go. You’ll also get a TrainerRoad kit, which looks 🔥 with the Giro Vanquish helmet and the Fire Socks. Once you finish the workout, you’ll be presented with a post-workout survey to record your RPE on a scale of 1–10. This gets sent back to TrainerRoad and converted into their 1–5 scale, although you can always update the rating in TrainerRoad afterwards. Then, you can end and save your activity, or keep riding if you want. Once you save the activity, it’ll get synced back to TrainerRoad and any other services you have connected, such as Strava or Garmin Connect. This ended up mapping to “moderate” in TrainerRoad’s scale. What happens if you can’t complete the workout for some reason? For example, if it was too hard, or you ran out of time? Then you can go into TrainerRoad and answer the post-workout survey with the reason why. This “struggle survey” may pop up automatically, or if you select “I did not pass” from the regular post-workout survey. The reason you select may determine how TrainerRoad adapts upcoming workouts. For example, “time” may not trigger adaptations, but “fatigue” or “intensity” might. ### What works well I’ve been testing this integration quite a bit over the past few weeks and it all works pretty great, but there are a handful of things that have sold me on it, although not all of them are specific to TrainerRoad. In no particular order: #### The Companion app and controllers are game changers In TrainerRoad, you can use the on-screen controls to do things like pause the workout, adjust the intensity up and down, or toggle erg mode, but for me, that usually involves reaching over my handlebars or aerobars and tapping a small target on my iPad’s screen with sweaty fingers while I’m fighting for my life. In the past I’ve experimented with things like using a Stream Deck as a TrainerRoad controller, but using the Zwift Companion app on my phone (which I have attached to my Garmin mount using this MagSafe adapter) or the Zwift Click makes it a lot easier to control the workout. I mostly use them for shifting during free rides, but it’s pretty great to be able to adjust workout intensity right from my aerobars. #### I like the arches at the end of every interval I swear looking at the timer tick down in TrainerRoad during a hard interval only makes it slow down, so I like the way the end of intervals are presented in Zwift as arches that you ride through—somehow I can convince my legs that I can make the interval end sooner if I just pedal harder. I can’t explain why it works, but it does. Must go faster… must go faster… #### TrainerRoad workouts work great as pre-race warmups I don’t like spinning mindlessly in the pen before a race in Zwift. For one, it’s not enough of a warmup for me, but also it’s not recorded, so I can’t track its training load or anything. I’ve found that short TrainerRoad workouts like “Clyde” (a twenty-minute threshold workout) work great as a warmup, but in the past I’ve had to time them properly to make sure I have enough time to finish it, save it, switch over to Zwift, pair my sensors, and join the event. This integration makes warmups seamless: Now I can simply schedule my warmup in my TrainerRoad calendar, do it in Zwift, and hit the “Join Event” button to teleport to the starting pen whenever I’m ready. The workout gets saved and sent to TrainerRoad automatically, separately from the event I’m doing. I really didn’t have to do this right after that VO2 max workout, but I needed the screenshot. Let’s just say that I was well and thoroughly warmed up for the Tour de Zwift Stage 6. #### Precise power targets Until now, workout targets in Zwift were rounded to the nearest 5 W, so if for example an interval called for 248 W, it’d show up as 250 W on the screen. This may not sound like a big deal, but for people with low FTPs, that rounding may be impactful. In any case, if a workout calls for 248 W, dammit, I want to do 248 W. This is a change that has been requested in the Zwift Forums for a few years now, so I’m impressed TrainerRoad convinced Zwift to do it. #### Pausing a workout doesn’t stop the recording I don’t like to pause in the middle of a workout, but sometimes I can’t avoid it (for example, if I get paged at work). If the pause is particularly long, I like to spin for a few minutes before restarting the workout so I can get my heart rate back up, but on TrainerRoad, none of this is recorded while the workout is paused. In Zwift, pausing the workout simply puts you in free ride mode and continues the recording, which helps me track my training load and fatigue more accurately. Once I’m ready, I can restart the workout right from where I left off. #### The workout data is out of the way This is a matter of personal preference, but I do like that all the information about the workout, like upcoming intervals and remaining time, is at the edges of the screen, so I can keep them out of sight if I want to, simply by focusing on my avatar and the scenery. The list of intervals on the left side of the screen has been somewhat divisive in the TrainerRoad Forum because it’s so hard to parse, but I actually _like_ that it’s hard to parse. Sometimes I don’t want to know how much of the workout I have left and it’s much harder to ignore the timers and blue bars on TrainerRoad since they’re front and center. #### You can turn off workout instructions I _really_ don’t like the way Zwift displays workout instructions smack dab in the center of the screen. It’s very obnoxious and distracting, and it’s one of the reasons why I don’t like to do Zwift’s built-in workouts, since there’s no way to turn them off in the settings. However, if you turn off workout instructions in TrainerRoad’s settings, they won’t sync over, so they don’t appear in Zwift. Wonderful. #### All Zwift activities get synced back to TrainerRoad While TrainerRoad will only push scheduled cycling workouts to Zwift, once the connection is enabled _every_ activity completed in Zwift, including runs, will be synced back to TrainerRoad. This is a good thing for a couple of reasons: First, it means that all your Zwift activities, including workouts (whether or not they come from TrainerRoad), races, group rides, and free rides, will be analyzed by TrainerRoad and taken into consideration for AI FTP detection and Red Light Green Light fatigue detection; and second, because this removes Strava as a dependency to get all these activities into TrainerRoad, so there’s one less reason to keep it around after their recent policy changes. ### What could be better All that said, there are a few things that I would love to see changed, most of them on Zwift’s side. Again, in no particular order: #### Scheduled running workouts don’t sync TrainerRoad has full triathlon plans that include runs and swims, so I’d love to see the runs sync over to Zwift so I can do them on my treadmill. I don’t expect this to happen anytime soon—those runs are RPE-based, so there’s no target pace to sync over, and I imagine it’d be a big project for TrainerRoad to start tracking or calculating running pace zones (AI FTP but for running would be incredible, though). At least completed Zwift runs _do_ sync back to TrainerRoad, so there’s that. For now I’ll just continue to recreate these workouts manually in Intervals.icu to sync them to Zwift. I’ve also been told that Zwift integration is coming soon to Runna, which would be even better, even though it’d mean paying for yet another service. #### The Kickr Climb doesn’t work during workouts I bought a Kickr Climb last year and have enjoyed using it during Zwift races and events; I love big climbs, so I like the immersion it adds to my rides. I also like the way it works in TrainerRoad—obviously there’s no terrain to simulate there, so it simply sets the grade based on the percentage of FTP of each interval. I’ve found that the small changes in position from the bike tilt can make a big difference in comfort and engagement during long indoor workouts, so I was disappointed to find out the Climb doesn’t work at all in Zwift during workouts, despite it having been requested for years in the Zwift Forums. I would love if the Kickr Climb continued to follow the terrain in Zwift even in erg mode. In other words, if I’m doing an interval at 200 W and hit a 15% hill, then I want to continue to do 200 W but with the bike tilted 15%. #### There’s no way to rewind a workout or repeat an interval While Zwift makes it easy to skip the current interval if you need to bail out, there’s no way to rewind the workout to repeat an interval. This is something I do in TrainerRoad sometimes—if I have to pause my workout for whatever reason, I try to do so during a recovery interval, but if I _have_ to do it in the middle of a work interval, I like to go back and repeat it. And yep, this is another feature request that goes back years and years, with multiple threads about it on the Zwift Forums. #### FTP changes don’t sync between platforms TrainerRoad workouts done in Zwift are based on the FTP set in TrainerRoad, but TrainerRoad can’t actually update the FTP saved in my Zwift profile, or vice versa. This is mostly a cosmetic issue; having a different FTP in Zwift only affects the power zones in the various graphs, but I still wish I could keep my FTP synced in both platforms whenever one of them detects a change, if nothing else so I don’t have to remember to do it manually. #### Erg mode in Zwift is slower to respond Say what you will about TrainerRoad, but they have erg mode down to a science. Zwift responds slower to changes in power, and it’s very noticeable, particularly in VO2 max workouts where the difference in power between the work and recovery intervals is usually large. Whereas the power ramps up very quickly in TrainerRoad, I’ve seen it take almost ten seconds in Zwift, and you’ll likely see the “More power!” prompt quite often. It hasn’t really detracted from any of my workouts, but it can be impactful in workouts with short, intense intervals. (On the other hand, a lot of people would argue that you shouldn’t do VO2 max intervals in erg mode, and at least the Companion app makes it easy to turn it off when necessary.) * * * Despite these few nitpicks, I think doing TrainerRoad workouts in Zwift is a game changer. It removes most of the friction needed to set it up and I get the best of both worlds: TrainerRoad’s excellent, ML-driven adaptive training plans, with the visuals and gamification of Zwift. It could simply be the novelty of it, but it has made a noticeable difference in my ability to power through long workouts indoors. The VO2 max workout I used for the screenshots in this post is a good example: It wasn’t particularly tough, just a 3.7 in TrainerRoad’s difficulty scale, but even then I think I would have struggled mentally to complete it in TrainerRoad. My winter blues are pretty rough this year, so I’ll take all the help I can get. Will I switch completely away from TrainerRoad? Probably not—there’s still a time and place for it, since I’m sure there’ll be times where I’ll want to do something other than Zwift during a workout. But for days when I just need a little visual stimulus, this integration works as well as I could have hoped, and then some—TrainerRoad went above and beyond, even successfully cajoling Zwift into addressing some long-standing feature requests. Not bad at all. *[RPE]: Rate of Perceived Exertion *[ML]: machine learning
www.giventotri.com
February 24, 2025 at 2:42 PM