Background
Ironman 70.3 Boulder was somehow my twentieth Ironman-branded event since my first back in 2019. That’s an utterly absurd number to comprehend. One is an accomplishment, two proves it wasn’t a fluke, but after that? The people who keep racing are after something more.
There are a lot of reasons I have been sucked into this sport, but the biggest one has nothing to do with swimming, biking, or running. Triathlon has completely rewired how I deal with life’s challenges.
Before triathlon, my ability to deal with adversity in life was nonexistent. Whenever something bad would happen, I’d just completely shut down, give up, and declare things fucked.
“This job is fucked.”
“This relationship with this person is fucked.”
“This codebase is fucked.”
It doesn’t matter what it is. Once something goes wrong, it’s over, and there’s nothing I can do to fix it.
This is such a toxic mindset. Giving up at the first sign of adversity often lets things snowball into something worse. Not only that, it gives you permission to quit. The truly insidious part is that it actually feels good and liberating in the moment. “The world is out to get me, so I'm at least going to call it out on its bullshit!” And then I'd say I'm not looking for pity … when I'm doing nothing but looking for pity.
Unfortunately, I started doing this way back in my childhood. Every now and then I’d try to change, but never made much progress … until I got peer-pressured into my first triathlon.
The great and awful thing about this sport is that things go wrong all the time! No training plan is perfect. No race day is executed as planned. Perfection is a myth. My first triathlon coach and friend from high school, Susie, told me that I should expect at least three things to go wrong every race. No matter how much I prepare, things are going to go wrong, and the difference between finishing and quitting is how I respond to that adversity.
It’s carried over into my life. After twenty of these, I see triathlon’s impact everywhere. Katy and I have been through a terrifying health experience that ultimately turned out OK because I didn’t panic. I work in a far more pressure-filled job than I did before triathlon. I’ve had the courage to both shed toxic people from my life and repair relationships that I might have given up on before.
Coming into Ironman 70.3 Boulder, all of this is what was on my mind. I wanted to celebrate my twentieth as much as I wanted to race it. I am so grateful to be such a different person than before. But I suppose it’s fitting that in all my years of doing this sport, I’ve never had a race that had more adversity and more moments where I caught myself wanting to say “this race is fucked” and giving up on the day.
Race Morning
Race day in Boulder has some logistical hurdles that other races don’t have. We can’t drive right up to the race site at the Boulder reservoir. Everyone has to park at a nearby industrial park and ride a shuttle over to the race.
But all of that went as smoothly as I could have hoped! All World Athlete status had landed me bib 59, which placed me right next to the exit of transition. Not only that, a couple of athletes in my row didn’t show up. So the rest of us even had extra room in transition to set up our gear.

We couldn’t have asked for better weather for a June race. The water temperature was a little cool, but by the time we got to the run, the air temperature was only in the mid-70s.
While I still have daily physical therapy, this would be the first race with no restrictions from my plantar plate tear in my left foot last fall.
As we lined up to start the swim, I felt like things couldn’t be going better. Adversity was the last thing on my mind.
Then I jumped into the water.
Swim
- Time 57:59
- Distance 1.2 miles
- Pace 2:27/100 yd
- AG 95/99
- Men 1000/1099
- Overall 1416/1559
- Weather: Sunny and breezy
- Water Conditions: Choppier than expected!
- Water Temperature: 69°F
- Air Temperature: 55°F
- Current: No
- Wetsuit: Yes

Even with a rolling start of four athletes every few seconds, the first hundred yards or so of any race are often crowded and chaotic before everyone settles into their swim. The first picture in Ironman's post about the race shows the swim start.
It’s not uncommon to bump into another athlete here, or have somebody accidentally hit you with their stroke. I’ve even been punched in the face before. It happens.
Unfortunately, today was different. In that chaotic start, my injured left foot was struck by another athlete’s arm during their swim stroke. It wasn’t that low throbbing pain when something bangs into you. This felt sharp, like I’d reinjured it badly. Not only that, I couldn’t really kick with my left foot without making it hurt that much more.
I swam over to a nearby rescue squad boat and told the paramedics that I didn’t need any kind of medical attention. I just needed to climb aboard to sit for a moment and hope this pain in my foot would subside.
I caught myself being tempted by old habits.
“If I can’t kick, I can’t swim. If I can't swim, my race is over.”
“This race is fucked.”
How frustrating to come out here early to acclimate to the altitude, travel through airports with my bike, pay for a rental car, pay for an Airbnb…all for what would literally be less than 3 minutes of actual racing. Woe is me and what a pity party I can throw over this.
Did things feel hopeless at that moment? Absolutely. I had zero belief I could swim the remaining mile with my foot in this kind of pain. The old me would have felt comfortable saying there was no solution, my race is fucked, and asked the rescue squad to take me to shore.
As an aside, there is zero shame in failing to complete a triathlon. I don’t have a DNF (did not finish) on my profile yet, but I know my day is coming. The longer you race, the more inevitable a DNF becomes. As I sat on the boat wondering if this moment had finally arrived, I didn’t fear a DNF. But I wasn’t going to give in to what felt inevitable quite yet.
I hopped back in the water. Before I quit, I needed to try swimming again. If freestyle hurt, what about switching to breaststroke? Or what about backstroke?
Do I think I can finish this swim? Absolutely not. But I know I can make it to the next rescue squad a bit farther down the course. If things were truly as fucked as they felt, they could take me to shore.
That’s how this whole swim went. I went boat to boat along the course feeling simultaneously hopeless but stubborn. I was grateful for all these volunteers and rescue folks. They were quite busy, beyond just me! Many athletes were really struggling with the water conditions. The wind picked up right as the race began. I had never swum in choppier waters. There were whitecaps and waves out there. And this was in a reservoir!
65 athletes who started the swim ended up leaving in rescue boats. That’s a lot more than normal! But it was not 66.

This was the slowest swim of any 70.3 I’ve ever done. I was frustrated and frazzled as I got to shore. I’d spent more than 10 minutes of my swim time NOT swimming while I sat in a rescue boat or floating beside a paddleboard.
My age group ranking was 95 out of 99. I was so upset. This race was fucked, but I hadn’t given up.
Transition 1
- Time 4:24
- AG 19/99
- Men 180/1099
- Overall 250/1559
I was so frazzled and mentally exhausted from everything that had happened with the swim. I accidentally put my helmet on backwards. I forgot to strap down the velcro on my right shoe. Eventually I got everything right and set out on the bike.
Bike
- Time 2:37:17
- Distance 56 miles
- Pace 21.7 mph
- AG 23/99
- Men 183/1099
- Overall 193/1559
- Weather: Sunny
- Temperature: 65°F
- Course Conditions: Paved roads in good condition
- Terrain: Rollers and false flats, but not as hilly as you might expect for Boulder
- Elevation Gain: 2711 feet

The first hour of the bike went smoothly. My foot still really hurt, but the pedaling motion didn’t aggravate anything. I was trying so hard to forget about the swim, focus on the bike, and appreciate how gorgeous this course was. The mountain views were stunning.

Around mile 20, my chain dropped. It’s not the end of the world. But it sure was frustrating to hop off the bike, grab the chain, reattach it, and pedal on.
On the side of the road, I was simultaneously fixing my bike while ignoring that voice in the back of my mind that was screaming.
“This race is fucked!”
Around mile 40, the brake on my front wheel started rubbing on the rim. Good grief. Not a critical problem, nothing I couldn’t fix on the side of the road in a few minutes, but just ugh. I’d never had a race like this where so many things went wrong.
“This race really is fucked. The universe is out to ruin your day, so just accept it and give up.”
But I kept going! After two separate bike mechanicals, the rest of the ride was uneventful and I made it back to transition.
My isolated bike rankings shocked me. In spite of wasting about seven minutes tending to my bike on the side of the road, I finished 22/99 in my age group and 193/1559 overall.
Transition 2
- Time 3:47
- AG 37/99
- Men 325/1099
- Overall 438/1559
As I put my running shoes on, I was relieved that my foot hurt a lot less than it did a couple of hours ago. I was just 13.1 miles away from finishing this slog of a day.
Run
- Time 1:59:56
- Distance 13.1 miles
- Pace 9:09/mi
- AG 34/99
- Men 356/1099
- Overall 440/1559
- Weather: Sunny
- Temperature: 70°F
- Course Conditions: Mostly gravel
- Terrain: Rolling hills throughout
- Elevation Gain: 420 feet

The run started off well enough. But a few minutes before I approached the aid station around mile 2, it became abundantly clear I was going to need to make an urgent porta-potty stop. In all the years I’ve been doing this, it’s only the second time I’ve had GI issues during a race.
“This race is SO fucked.”
It was hot and smelly in there. But it also offered some privacy. I’m not going to lie to y’all. I threw a full-on temper tantrum while taking care of that urgent business. I pounded my fist into the wall a couple of times in frustration. I went on a Clark W. Griswold type of rant where I was just screaming a long line of profanity.

I do wonder how it appeared from the outside. These porta-potties are right along the course next to an aid station. I’m a little embarrassed to realize now that a few volunteers and athletes probably heard all this cussing and pounding echoing out from the porta-potty.
As I began to run again, there was no discipline, focus, or 7:15/mile pace like I had in North Carolina. An angry ~9:00/mile pace was all I could muster. Not only that, my gels and salt that were in my pocket had fallen out, probably in the porta-potty.
“This race really is fucked.”

The only thing that got me to the finish line was pure stubbornness. I’ve never been more miserable and unhappy during a triathlon.
Post-Race
- Overall Time 5:43:23
- AWA Points 1753
- Age Graded Time 5:18:02
- Age Graded Rank 272/1099
- AG 33/99
- Men 319/1099
- Overall 390/1559
Between everything that went wrong, I spent a little more than 20 minutes of my race not racing. Susie always told me to expect three things to go wrong. I lost count at five.
I’ve never run down that Ironman red carpet with less joy.

I could sort of recognize it was an achievement to finish with so many things that had gone so wrong. But when I saw Katy, I told her I didn’t want to discuss the race at all. Not now. Not ever. This was my worst race since 2022.
And yet.
Later that evening at awards, I found myself holding a World Championship qualifier certificate and a coin. I’m heading to Nice, France this fall!

Final Thoughts
A few days later, I’m still badly struggling with how to feel about this!
Let’s directly address the elephant in the room. This performance, this ranking, this finisher time? This got me to Worlds? I’m under no illusion about what happened here. We’re coming to the end of the qualification period for France. Those 30 slots rolled farther down the rankings than they normally would. I shouldn’t have this slot.
This is such a paradox! My worst race in years yields the exact result I failed to achieve in the races I performed my best.
Qualifying for Kona or a 70.3 World Championship can be a chaotic lottery that doesn’t care about personal bests and is often wildly unfair. This process has been brutal for me over the past two seasons.
In Louisville, I missed qualifying by just six minutes. In Des Moines, it was by only two minutes and one athlete. I legit cried.
In St. George, I was on the wrong side of age group math. I needed to finish sub-5:20 and turned in a 5:38 that day. But had my age been 30-34 or 40-44? I would have more than comfortably qualified with more than 45 minutes (!!!) to spare.
In Wilmington, I set a PR and finished sub-5 in what was my best race ever, but was 17 minutes too slow to qualify.
As a result, I have started going into the award ceremonies feeling callous, wondering what new painful way this isn’t going to happen for me again.
Endurance sports don’t hand out refunds or offer pity for the days you perform your best, but still go home empty-handed. But the flip side: it also means there’s no reason to hand back the prize on the day you get lucky and are clearly undeserving.
My worst race in years finally balanced the scales for two seasons of my best ones. The slot was luck, but the stubbornness was mine. I kept swimming to that next boat, and no matter how fucked things felt, I never gave in to that toxic mindset from my past. And now I'm headed to my second World Championship.