<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://perfectionkills.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://perfectionkills.com/" rel="alternate" type="text/html" /><updated>2026-10-08T00:52:06+00:00</updated><id>https://perfectionkills.com/feed.xml</id><title type="html">Perfection Kills</title><subtitle>Engineering and Fitness Musings by kangax</subtitle><author><name>kangax</name></author><entry><title type="html">A year with WurQ</title><link href="https://perfectionkills.com/a-year-with-wurq/" rel="alternate" type="text/html" title="A year with WurQ" /><published>2026-10-07T00:00:00+00:00</published><updated>2026-10-07T00:00:00+00:00</updated><id>https://perfectionkills.com/a-year-with-wurq</id><content type="html" xml:base="https://perfectionkills.com/a-year-with-wurq/"><![CDATA[<h2>A year with WurQ</h2>

<figure class="post-hero post-hero--wurq"><img src="/images/a-year-with-wurq/01.jpeg" alt="Illustration of a CrossFitter jumping between plyo boxes marked with sensor, battery, phone, sync, upload, and wait symbols toward a chart on an easel." loading="eager" width="1456" height="977"></figure>

<p>I’ve been trying <a href="https://www.wurq.io/">WurQ</a> on and off for a year. I got into their beta last September, and in October two little sensors showed up: one for my wrist, one for my chest. You start a session in the app, train as usual, and it figures out which movements you did, counts the reps, and shows you where you rested and where your pace dropped. Today it’s $15 a month with the hardware included.</p>

<p>For CrossFit this is a big deal. My Apple Watch sees a WOD as heart rate and calories. WurQ sees thrusters and pull-ups. In June, CrossFit made it their <a href="https://www.crossfit.com/essentials/tracking-the-fittest-on-earth-crossfit-and-wurq-launch-groundbreaking-wearable-platform">official performance analytics partner</a>.</p>

<p>So I want this to work. I also build <a href="https://przilla.app/">PRzilla</a>, a CrossFit training app, which means I spend my days on the same problem from the other side. Take what follows as notes from a paying customer who’s rooting for them.</p>

<p>After a year, my take is that it’s a good idea that isn’t ready for daily training. Too many things have to go right before and after class, and it still asks the sensors to guess the workout the whiteboard already knows.</p>

<h3>The buy-in</h3>

<p>In CrossFit, a buy-in is the work you have to get through before the real workout starts. WurQ has one, and you do it every class:</p>

<ol><li><p><strong>One more device.</strong> That’s a lot to ask when most of us already wear an Apple Watch or a <a href="https://whoop.com/">Whoop</a>.</p></li><li><p><strong>Two straps.</strong> Say you get it anyway. You now have to wear both sensors, wrist and chest, every time.</p></li><li><p><strong>Two batteries.</strong> Each sensor has its own, and they aren’t rechargeable: a dead one has to be replaced. They tend to run out at the worst moment, which is when you walk into the gym.</p></li><li><p><strong>A connection that holds.</strong> If both batteries are alive, sometimes the connection isn’t, and you find that out just as the class is about to start the WOD.</p></li><li><p><strong>A phone, found before 3-2-1-go.</strong> You have to remember to start it. WurQ records the metcon, not the whole class: the strength and skill work isn’t tracked at all. I can’t just hit start when I walk in, so I have to go find my phone right before we begin. More than once I forgot, with both straps already on.</p></li></ol>

<p>None of these is a dealbreaker on its own, but any one of them is enough to leave you with no data that day.</p>

<p>WurQ announced Gen 2 in June: rechargeable sensors, a charging case, better connectivity, and an upgrade for early members at the cost of shipping. They said it would ship in September; mine hasn’t shipped yet. It should fix the batteries and perhaps the connection. The rest of the buy-in stays.</p>

<h3>The buy-out</h3>

<p>CrossFit has a buy-out too: the work you still owe after the main part is done. So does WurQ:</p>

<ol><li><p><strong>A sync from the sensors to the phone.</strong> You press stop, and the data first has to get from the sensors to your phone. That step is slow, and the phone has to stay next to the sensors while it runs. If you’re wiping down the floor or talking to a coach, the phone has to come with you in a pocket. Otherwise you sit there holding it until it’s done.</p></li><li><p><strong>An upload to the server.</strong> After that the phone sends everything to the server, which takes a while on a weak connection.</p></li><li><p><strong>A wait.</strong> The server processes it. Only then do you see your workout.</p></li><li><p><strong>The weights, typed in by hand.</strong> After all that, WurQ still doesn’t know the weights, and it needs them to estimate my power output. A motion sensor knows I did a clean. It doesn’t know what was on the bar, or whether I did the workout as prescribed, so I type that in.</p></li><li><p><strong>One more log.</strong> WurQ doesn’t send the workout anywhere else, so it goes in a second time, into the app where I track everything else. That makes one more place where my workout lives.</p></li></ol>

<p>Steps 4 and 5 are the odd part. To me, the appeal of a sensor is that I put it on and stop worrying about logging every set and rep. WurQ’s <a href="https://www.wurq.io/pages/product-details">product page</a> makes the same promise: “Say goodbye to manually logging your WOD!” So far it’s a half-kept one: I’m still logging.</p>

<h3>It guesses what I could just tell it</h3>

<p>Most of what we do in class isn’t a named benchmark. It’s whatever the coach wrote on the whiteboard that morning. About 80% of the time I start a “freestyle” workout and let WurQ work out what I did from how I moved.</p>

<p>Here’s one from last week’s drop-in at <a href="https://www.crossfit7x7.com/">CrossFit 7x7</a>:</p>

<blockquote><p><strong>“Whet”</strong><br>2 rounds for time:<br>100m farmer carry<br>10 SA DB squat cleans (R)<br>10 SA DB OH walking lunges (R)<br>10 SA DB devil presses (R)<br>5 bar muscle-ups<br>50 cal row<br>5 bar muscle-ups<br>10 SA DB devil presses (L)<br>10 SA DB OH walking lunges (L)<br>10 SA DB squat cleans (L)<br>100m farmer carry</p></blockquote>

<p>First, WurQ asks what kind of workout it was: rounds for time, or a chipper? This one is two rounds for time, and each round is a chipper. I have to translate my workout into their categories before I can log it, and more than once that made me stop and think. That’s not what I want to be doing after a workout.</p>

<p>There’s also what it can’t see. WurQ got the right-arm half of this workout correct. For the left-arm half it saw lunges and something like a burpee. There’s no sensor on my left wrist, so it had no way of knowing I was cleaning a dumbbell.</p>

<figure><img src="/images/a-year-with-wurq/02.png" alt="WurQ Coach explaining that range-of-motion scores for single-arm movements come from the wrist wearing the sensor." loading="lazy" width="450" height="978"><figcaption>WurQ Coach on the one-wrist limit: it could assess only the reps captured by the sensor-side wrist.</figcaption></figure>

<p>CrossFit is extremely varied, and I know from building in this space how hard it is to model. I run into <a href="/your-crossfit-app-doesnt-know-what-you-did/">the same problems</a>. But inferring a whole workout from movement patterns alone makes the problem harder than it needs to be.</p>

<p>None of this needed guessing. The workout was on the whiteboard. I could have just typed it in, the way we do in PRzilla: <a href="https://przilla.app/changelog/2026-04-09-quick-add-deep-links">type or paste the workout</a>, and it becomes structured movements, sets and reps.</p>

<p>When something goes wrong, support has asked me for the “ground truth”: what the workout actually was. That’s the one thing I’d rather give them up front.</p>

<p>So flip it around. Ask me what I did, or pull it from my gym’s whiteboard, and then lay the sensor data on top.<sup id="footnote-anchor-1"><a href="#footnote-1">1</a></sup> Let me say “I did this one Rx” and skip the weight grid. The app already has programs where the workout is known in advance: WurQ’s own challenges, and <a href="https://www.hwpotraining.com/programs/hwpo-flagship">HWPO’s Flagship 2.0</a> if you have an access code. I want that for the workout I’m actually doing today.</p>

<p>With the workout known, the app no longer has to guess the movement label from scratch. The sensor can tell me what no whiteboard can: how fast the reps were, where I rested, when I slowed down. When the workout says “10 SA DB squat cleans (L)”, it could show those cleans as prescribed and mark the left-arm reps unverified, rather than calling them burpees.</p>

<p>The whiteboard knows the workout. The sensor should tell me how I did it.</p>

<h3>What they got right</h3>

<p>The rep tracking is useful when I want to see where I slowed down during a workout or compare two attempts at the same WOD. That’s something my watch can’t tell me.</p>

<p>Entering weights in WurQ is nicely done: type one, and apply it to every set of that movement. I liked it enough to borrow it for PRzilla.</p>

<p>The AI breakdown is the best thing in the app. It reads my sessions and gives me an explanation I can actually use, like what happened to my movement later in a workout. That’s more useful to me than looking at work-volume charts and efficiency percentages on the home screen.</p>

<h3>Would I recommend it?</h3>

<p>Not in its current form. It isn’t ready for most people yet. It reminds me of a first muscle-up: you get over the rings, chicken wing and all, and it counts. It’s just not pretty yet.</p>

<p>Where I’d still use it is a specific test: an <a href="https://games.crossfit.com/open">Open workout</a>, or a benchmark where I really want to understand my performance. For day-to-day training it’s too much work for what I get back.</p>

<p>What I’d love to see is WurQ built into daily training: it knows my programming, logs everything automatically, asks me only the questions that matter, and gives me the insights without my having to dig for them.</p>

<p>WurQ is almost a GPS for my body: it knows my movements and my range of motion. Once the basics work, I’d love to import that data into PRzilla or any other app where people keep their training, the way I can <a href="https://przilla.app/changelog/2026-07-10-health-integrations">import a run from my watch</a>.</p>

<p>The idea is right. CrossFit should have a sensor that knows a thruster when it sees one. I’m still rooting for Gen 2.</p>

<div class="footnote" id="footnote-1"><sup>1</sup><p>Other teams are trying different approaches. <a href="https://apps.apple.com/us/app/morph-by-odyssey-labs/id6769819320">Morph</a> captures workout video at participating gyms. <a href="https://wodmotions.com/">WODMotions</a> uses a sensor for athlete testing rather than logging each daily WOD. I haven’t used either.</p></div>

<p class="source-note"><em>Originally published on <a href="https://kangax.substack.com/p/a-year-with-wurq">Substack</a> on October 7, 2026.</em></p>]]></content><author><name>kangax</name></author><category term="fitness" /><summary type="html"><![CDATA[Five hurdles before the WOD, five more after, and I’m still logging.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://perfectionkills.com/images/a-year-with-wurq/01.jpeg" /><media:content medium="image" url="https://perfectionkills.com/images/a-year-with-wurq/01.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Tetris, not U-turns</title><link href="https://perfectionkills.com/tetris-not-u-turns/" rel="alternate" type="text/html" title="Tetris, not U-turns" /><published>2026-10-03T00:00:00+00:00</published><updated>2026-10-03T00:00:00+00:00</updated><id>https://perfectionkills.com/tetris-not-u-turns</id><content type="html" xml:base="https://perfectionkills.com/tetris-not-u-turns/"><![CDATA[<h2>Tetris, not U-turns</h2>

<figure class="post-hero"><img src="/images/tetris-not-u-turns/01.png" alt="A Tetris-style stack of PRzilla features, with Programming marked as the next piece." loading="eager" width="548" height="612"></figure>

<p>My training partner Bella logs every score now. She’s chasing someone called “Anonymous squirrel” on a leaderboard in <a href="https://przilla.app/">PRzilla</a>, the CrossFit app I’ve been building for the last 18 months.</p>

<p>I didn’t plan that. I didn’t plan most of what PRzilla does today. It started with one training question, and once I answered it, the next one showed up on its own.</p>

<p>I always thought a pivot meant a U-turn, a full reversal of direction. But these 18 months feel more like Tetris: you only ever see the next piece, and where it fits depends on what’s already there. The pieces are user needs, my own or someone else’s.</p>

<h3>What’s a good time?</h3>

<p>In spring 2025, PRzilla was a simple app: a list of classic CrossFit workouts where I could log my scores, modeled after <a href="https://wodwell.com">WODwell</a>. But a score on its own doesn’t tell you much, so I wanted to answer a question: “What’s a good time on a specific CrossFit workout?” WODwell showed levels for the famous ones, like Fran, but not for most workouts. I spent a few months playing around with AI to grade all of them. It was a lot less capable back then, so it needed a lot of prompting and experimentation, but by May, 907 workouts had levels from beginner to elite, and I was pretty satisfied with <a href="/using-ai-to-accurately-predict-crossfit/">how accurate many of them were</a>.</p>

<p>That answer changed what my old scores meant. Every result I’d ever logged now had a level next to it.</p>

<figure><img src="/images/tetris-not-u-turns/02.png" alt="Every WOD gets a curve from L1 to L10. Here are Grace and Murph." loading="lazy" width="600" height="626"><figcaption>Every WOD gets a curve from L1 to L10. Here are Grace and Murph.</figcaption></figure>

<h3>Where do I stand?</h3>

<p>Now I could see my approximate fitness level and how it changed over time. It was great, but conditioning was only one part of my fitness, so I brought in the other pillars I’d been tracking: strength and skills. Most of that history lived in <a href="https://www.sugarwod.com/">SugarWOD</a> exports and old spreadsheets, so I built a pipeline that turned years of messy notes into structured data. I then spent a lot of time—perhaps a bit too much—figuring out the best UI for <a href="/my-fitness-from-spreadsheet-to-an-app/">“My Fitness”</a>, which replaced a decade of spreadsheets. This was October 2025.</p>

<p>But My Fitness was only as good as the data in it, and most of my day-to-day training still lived in other apps.</p>

<figure><img src="/images/tetris-not-u-turns/03.png" alt="My Fitness, and my fitness level going back to 2015." loading="lazy" width="600" height="626"><figcaption>My Fitness, and my fitness level going back to 2015.</figcaption></figure>

<h3>What did I do today?</h3>

<p>Even though PRzilla was already a few months old, I was still using <a href="https://www.strong.app/">Strong</a> app to log my strength training and my practice (= open gym) CrossFit sessions. PRzilla could log a WOD score, but not a custom workout or a practice session. And almost nothing did both: CrossFit apps are built around the class WOD, Strong and <a href="https://www.hevyapp.com/">Hevy</a> don’t understand WODs, and <a href="https://beyondthewhiteboard.com/">BTWB</a>, the closest, felt like an airplane cockpit. I wanted a Monday like 10x3 ring muscle-ups, a 5k row and a 15min AMRAP to live in one session. And so I started building <a href="/crossfit-tracking-app-but-youre-in-control/">a workout tracker</a>: first on the web, finished in December 2025, then native, in the App Store by February 2026.</p>

<p>The web version didn’t last. Within months I’d stopped updating it, because native had taken over. But having the tracker on my phone felt like entering a new era: for the first time, I could completely ditch my Strong app, and one app knew everything I did in the gym.</p>

<figure><img src="/images/tetris-not-u-turns/04.png" alt="The training log and one logged WOD, May 2026." loading="lazy" width="600" height="626"><figcaption>The training log and one logged WOD, May 2026.</figcaption></figure>

<h3>Should I go hard today?</h3>

<p>Knowing what I did was half of it. The other half was what to do with it: push today, or back off? With my whole training history in one place, an AI coach could finally read it. By March, PRzilla had one.</p>

<p>The coach only knew what I did, though, not how I’d recovered. I was using <a href="https://whoop.com/">Whoop</a> at that point and also had an Apple Watch. Whoop was great for recovery and habit tracking, and honestly, I loved its UI — a lot of PRzilla is modeled after it. But its workout tracker was limited, and I knew it could never be the one place for all my training. So naturally I brought recovery into PRzilla, and at that point I was able to stop using Whoop.</p>

<p>Now the coach has both halves. Every morning it reads my recent sessions and my recovery, and tells me whether to push or back off. One week my HRV dropped 15ms after back-to-back heavy sessions. Without that data I would have pushed through another hard day; instead I dialed back to skill work and was fully recovered by Thursday. As a coach myself, I’d put its advice at 80–90% of what a human coach would recommend. <a href="/crossfit-training-in-the-age-of-ai/">I wrote about this</a> in May 2026.</p>

<p>The one thing the coach didn’t know was the workout my gym had planned.</p>

<figure><img src="/images/tetris-not-u-turns/05.png" alt="The morning note, and the recovery reading behind it. June 2026." loading="lazy" width="600" height="584"><figcaption>The morning note, and the recovery reading behind it. June 2026.</figcaption></figure>

<h3>What’s on the whiteboard?</h3>

<p>I resisted this one. The whiteboard is a core part of SugarWOD and <a href="https://www.pushpress.com/">PushPress</a>: it’s how programming from somewhere else reaches you. I didn’t want to rebuild it, and honestly, I was proud of my own answer: snap a photo of any whiteboard and PRzilla turns it into a workout you can log.</p>

<p>Then a user on Reddit asked whether PRzilla could pull in <a href="https://pushjerk.com/">PushJerk</a>’s programming. I added it in May as an experiment. When I added my own gym, <a href="https://www.murderofcrowsbrooklyn.com/">Murder of Crows</a>, I realized I actually enjoyed using it myself. Within ten days it shipped as <a href="https://przilla.app/changelog/2026-05-29-crossfitcom-whiteboard">a Whiteboard tab</a> with <a href="https://www.crossfit.com/">CrossFit.com</a> and PushJerk.</p>

<p>Now PRzilla knew the workout before I did it.</p>

<p>Fast forward to the end of September: the coach started reading the whiteboard too. You <a href="https://przilla.app/changelog/2026-09-26-follow-a-track-and-athlete-profiles">follow a track</a>, and it plans around that track’s workouts. Mine is Murder of Crows: I don’t do it every day, but it’s my default. Now the coach actually looks up what’s planned, tells me, and suggests whether to scale it down, scale it up, or skip it, depending on my goal. I haven’t been this happy with a feature in a long time. Again, another piece just fitting in.</p>

<figure><img src="/images/tetris-not-u-turns/06.png" alt="PushJerk on the Whiteboard in May, and the coach’s note about the track’s workout in September." loading="lazy" width="600" height="626"><figcaption>PushJerk on the Whiteboard in May, and the coach’s note about the track’s workout in September.</figcaption></figure>

<h3>What’s on the clock?</h3>

<p>This next piece took me by surprise, but is obvious in hindsight. Some of my early users started asking for a workout timer. I realized that the last time I did a 40min EMOM workout at home, I used the <a href="https://smartwod.app/">SmartWOD Timer</a> app, out of habit. I could easily add one to PRzilla. After some UI polish, we got stopwatch, AMRAP, EMOM, and interval timers. Then the requests got specific. One user, Mirko, wanted the timer to name each interval, call out stations in an EMOM, and chain custom sections. The first two shipped in July. The third is still on my list.</p>

<p>The more important realization: mid-workout, what you need most is to see the structure of the workout — where you are and what’s coming. This is why we write things on a little whiteboard: to mark reps and sets as we do them, or note our time and splits. A standalone timer doesn’t know your workout. PRzilla did: every WOD in it was already broken down into movements and rounds. So the real challenge was building <a href="https://przilla.app/changelog/2026-09-12-the-timer-shows-the-workout">a WOD-aware timer</a>, which shipped in September. Start Helen, and the run, swings and pull-ups are listed under the clock, round by round.</p>

<figure><img src="/images/tetris-not-u-turns/07.png" alt="Helen at the start of round two, and Fight Gone Bad counting wall balls." loading="lazy" width="600" height="626"><figcaption>Helen at the start of round two, and Fight Gone Bad counting wall balls.</figcaption></figure>

<h3>Who else is out there?</h3>

<p>As we’re entering October, the latest piece is social, and it’s an interesting one. I resisted social too, and for the same reason: I didn’t want to build another SugarWOD or PushPress. Those apps are great at community but they suck at logging. And if you can’t log your training, you have nothing solid to build on: no analysis, no scaling recommendations, no program adjustments.</p>

<p>Today the logging is solid. Any WOD you can dream of, a heavy complex, the run your Apple Watch picked up, even the occasional squash game: it all goes in, and <a href="/your-crossfit-app-doesnt-know-what-you-did/">it’s accurate</a>. But logging is a solo sport.</p>

<p>So social wasn’t a new idea. It only became worth building in the context of PRzilla. Friends started joining friends, and they wanted to see each other’s scores and PR’s. And there were finally enough of us for leaderboards to mean something: when we switched them on, Murph, Cindy and other popular workouts suddenly showed 20+ results each. That’s when social landed on top of the core: global <a href="https://przilla.app/changelog/2026-09-05-search-your-training-history">leaderboards</a> and <a href="https://przilla.app/changelog/2026-09-26-follow-a-track-and-athlete-profiles">athlete profiles</a> that show your fitness level, estimated lifts, best benchmarks and skills, all built from what you’ve logged. A profile is only interesting if there’s something true to show. Mine has 2,222 sessions behind it.</p>

<p>Which brings me back to Bella. What I didn’t anticipate is what a leaderboard would do for logging: she’s chasing the squirrel on the Fittest board, so she logs every score. The newest piece is making the ones under it stronger.</p>

<figure><img src="/images/tetris-not-u-turns/08.png" alt="The Fittest board in September, with Bella at #3 chasing the squirrel. Next to it, my profile." loading="lazy" width="600" height="626"><figcaption>The Fittest board in September, with Bella at #3 chasing the squirrel. Next to it, my profile.</figcaption></figure>

<h3>What’s next?</h3>

<p>Looking at the stack now, it’s funny what’s missing. There are four things I could have built first but didn’t: the whiteboard, social, gym management, and programming. That’s where SugarWOD, <a href="https://www.wodify.com/">Wodify</a> and PushPress start, because they start with the gym. I started with one athlete’s question.</p>

<p>The whiteboard and social are here now, and both turned out to need everything under them. Next come adding friends and perhaps a feed. Gym management I’ve always resisted — reservations, billing, invoices, churn… Again, I think PushPress does it pretty well, as per many owners I spoke to. Building it would be the real U-turn: PRzilla would become an app for the gym instead of the athlete.</p>

<p>Programming is the big next piece. The Whiteboard brings in programming someone else wrote. What’s missing is writing it: the part where you have a calendar and you add workouts onto it. It’s a big project, and it only makes sense now. Your training log is the past and your programming is the future. As a coach, I need to know what you’re capable of before I can design a program for you, and now PRzilla knows. Goal tracking is on the roadmap too.</p>

<p>After that, I don’t know. You only ever see the next piece, and judging by the last few, the one after it will probably come from one of you. If there’s something you need, <a href="mailto:hello@przilla.app">drop me a note</a> or <a href="https://przilla.app/roadmap">add it to the roadmap</a>. And if you haven’t tried PRzilla yet, it’s on <a href="https://apps.apple.com/app/id6758307458">iOS</a> and <a href="https://play.google.com/store/apps/details?id=app.przilla.przilla&amp;hl=en_US">Android</a>.</p>

<p class="source-note"><em>Originally published on <a href="https://kangax.substack.com/p/tetris-not-u-turns">Substack</a> on October 3, 2026.</em></p>]]></content><author><name>kangax</name></author><category term="przilla" /><summary type="html"><![CDATA[18 months of building PRzilla, one piece at a time]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://perfectionkills.com/images/tetris-not-u-turns/cover.png" /><media:content medium="image" url="https://perfectionkills.com/images/tetris-not-u-turns/cover.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The Great Experiment</title><link href="https://perfectionkills.com/the-great-experiment/" rel="alternate" type="text/html" title="The Great Experiment" /><published>2026-08-09T00:00:00+00:00</published><updated>2026-08-09T00:00:00+00:00</updated><id>https://perfectionkills.com/the-great-experiment</id><content type="html" xml:base="https://perfectionkills.com/the-great-experiment/"><![CDATA[<h2>The Great Experiment</h2>

<p>I had two and a <em>quarter</em> drinks in the last thirty days. </p>

<p>Before that, my normal month was around forty, and a bad one was closer to eighty. Ten on a weekend was easy, especially when you're up till 4am and in a good company, plus a glass or two here and there during the week — it adds up fast when you're not counting. I know the numbers now because I vibe-coded a little app to count them.</p>

<p>There was no rehab, no rock bottom, no announcement with a sunset photo. This writeup is mostly my attempt at untangling what happened, why the mindset shift, and how I got here.</p>

<h3>The equilibrium</h3>

<p>For twenty-smth years drinking wasn't a problem — it was a choice. At least that was the story I told myself. The more honest version is that there were two of me. The weekend Juriy wanted to dress up, go out, be seen, and descend into the madness with friends (that's genuinely what I called it, "descending into the madness together", and I meant it as a compliment). The Monday Juriy wanted to be great at training. <a href="/on-crossfit-open/">CrossFit was becoming an increasingly important part of my life</a>.</p>

<p>I spent years in talk therapy circling this exact tension and eventually filed it under "unsolvable, this is just my life". I wanted both. And to be clear — I wasn't confused about any of it. I knew the physiology: the sleep disruption, the recovery cost, all of it. But knowledge doesn't change anything when both sides of the scale weigh the same. I wasn't stuck because I lacked information. I was stuck because I was at <em>equilibrium</em>. </p>

<h3>The shackles joke</h3>

<p>I was the fittest guy among my friends, often top three on the gym leaderboard, and I had a running joke with a close friend: imagine how good I'd be without these weights on my ankles (referring to drinking).</p>

<p>My AI coach, annoyingly, pointed out what that joke actually was — a brag. As long as the shackles stayed on, the imagined version of me stayed safely imaginary and could never be tested. The chains weren't holding me back from finding out how good I could be. They were protecting me from finding out.</p>

<h3>The wake up call</h3>

<p>Then I signed up for HYROX NYC on a whim and it absolutely crushed me. My goal was 1:20-ish and I finished in 1:45. The fittest guy among his friends turned out to be bottom of the barrel among the fit fam at large. I knew very well that people who did better than me had one thing in common: they had better calendars. A race is built on a hundreds of hours of boring Friday-nights. My gym leaderboard was a small pond that gave me an illusion of fitness.</p>

<p><a href="/thoughts-on-first-xenom-in-dallas/">XENOM Dallas confirmed it a few weeks later</a>. Different format, same story: somewhat good on the strength events, exposed everywhere the engine mattered. The sample size was getting bigger and so was the elephant in the room.</p>

<h3>How we got here</h3>

<p>It wasn't just fitness stuff. Looking back I can see how things were already shifting for a while.</p>

<h4>Asia, the accidental experiment</h4>

<p>Every winter I'd escape to Asia (Chiang Mai, Da Nang) for a month or two. Officially for the weather; actually to escape New York's gravity — the party scene, the late nights, the whole Saturday machine. Yes, I was literally scheduling my sobriety so I can prioritize training.</p>

<p>Here's what's interesting: I still drank in Vietnam. One or two cocktails with lunch or dinner, most days, so the monthly total was probably not far off a New York month. But there were no binges. And my recovery scores went from red to yellow, training compounded week over week, and <a href="/overnight-success/#exhibit-b">I hit the best CrossFit Open of my life</a>. Same volume of alcohol, completely different delivery. The binge was the poison, and I had the data to prove it. I knew this well and was already planning South America for next February as the next engineered escape. Apparently I could only access the healthy version of my life by leaving my actual life.</p>

<h4>Vipassana</h4>

<p>Somewhere in there, <a href="/vipassana-through-the-modern-lens/">meditation</a> started shaking the foundation. I got better at watching the cravings as sensation and story — the being-looked-at loop, the dressing-up loop — and some of that magic disappeared and the stories revealed themselves as just that. Not all of it, but some.</p>

<h4>Aging</h4>

<p>Underneath everything, the physics changed. At 28 a bender cost me Sunday. At 40 it cost Sunday, Monday, and—annoyingly—most of the Tuesday. Same purchase, but the <em>invoice</em> kept growing. I'd love to claim pure spiritual growth here, but a big part of this is just a guy facing the inevitable truth about life.</p>

<h4>Community</h4>

<p>Then HYROX and XENOM showed me a room full of people who were intense, competitive, even vain — and none of it ran through Saturday night. Before that, not-partying looked to me like absence, the gray life of someone who gave up fun. Seeing <em>thousands</em> of people actually living it reframed the whole thing as a different kind of vivid. I guess I needed to see and feel this side of life for something inside of me to start shifting.</p>

<h3>Why do we drink?</h3>

<p>I never said "I quit" — that always felt too final, too binary. You declare zero-forever, then have half a drink at some wedding, and boom — complete failure, might as well keep going. I've seen that loop. So I just... kept the door open.</p>

<p>Then—two weeks into fully sober—during the World Cup I ordered an IPA at a bar, because I missed the taste. I drank a quarter of it and discovered, in real time, that the taste was the only thing I missed. I no longer wanted to be drunk. I left the rest on the bar and felt completely done — no regret, no negotiation.</p>

<p>Drinking is many things: flavor, ritual, occasion, intoxication, identity, a fix for a social anxiety — turns out I still cared about taste but intoxication? Not so much. The anxiety bit is definitely still there and is something to work on.</p>

<h3>Why not just moderate?</h3>

<p>This is the question everyone asks, and I asked it myself for years. Why not be a reasonable person — skip the binges, keep 1-2 cocktails at dinner?</p>

<p>Honestly, I'm still processing this part. The dinner glass was real — it tasted good, it felt good, it was part of a ritual so deep I didn't even know what it was for. It made conversations easier. None of that was delusion.</p>

<p>But here's what I noticed after the shift: most of what I liked was the ritual, not the alcohol. Sitting down, ordering something, the evening becoming an occasion — turns out a Topo Chico in a nice glass does like 80% of that job. The social part is the one real loss, I won't pretend otherwise. Without a drink it takes me longer to warm up at a dinner table, and some nights I feel that.</p>

<p>And the buzz itself? I just stopped enjoying it. That's the part I can't fully explain yet. But once being tipsy stopped feeling good, the cocktail had no job left to do. There was never a moderation battle to win — the thing I would've been moderating just wasn't there anymore.</p>

<h3>It's not dead, it's observed</h3>

<p>I gotta be honest, the drinking identity is still very much alive in me. Hence why this is a <em>great experiment</em>, not a eulogy.</p>

<p>I pass a bar, see people laughing over drinks, and there's an immediate flicker of memories and associations — twenty-smth years of mostly good times. Incredible times, in fact. I see an ad for a gorgeous Junmai Daiginjo and I can almost taste that delicate sweetness and flavor, plus all the labor and dedication that went into it. I'm not burying any of that and I don't want it to die. It sits there, I observe it, and some days I miss it the way you miss anything that was huge and formative and mostly fun.</p>

<p>The current policy is that taste stays and state goes. A few sips of serious red wine at a good Italian restaurant, handled the way you'd handle something potent — conscious, rare, deliberate. Not an every-weekend default. And you <em>never</em> need a 2nd drink.</p>

<h3>The Perks</h3>

<p>The body stuff, real quick, because this post isn't really about it: sleep got better fast, training feels easier, I'm more hydrated.</p>

<p>My watch tells the whole story in three colors. New York weekends were red. Da Nang was yellow — two cocktails a night kept it yellow, I just mistook yellow for green because I'd been living in red. Now I'm mostly green, and when it breaks (late dinner, short night) the reason is actual information instead of the same old suspect. </p>

<p>Removing alcohol didn't make me perfect; it removed the loudest variable so I could finally see the quiet ones. This alone is huge: I no longer wonder if upset stomach or bad sleep or shortness of breath or smth else is due to the booze. I can now tackle other life factors separately.</p>

<p>And then there's the money. Cocktails in New York run twenty-plus dollars now, and at my old pace the drinks total at dinner often exceeded the food one. </p>

<h3>Meeting your partner</h3>

<p>This is the part I didn't see coming. My partner doesn't drink — never has, she's allergic — and for years I'd pitch her on what she was missing. I'd explain that drinking with someone is descending into the madness together, both of you consciously boarding the same delusion, and that it's a real meeting point. I still think that's true, by the way. I won't pretend drunk connection is fake.</p>

<p>But it meant that at dinner, two drinks in, I was joking <em>at</em> her from a plane she couldn't board. I kept inviting her down into my madness, and it never occurred to me that the actual move was to come up to her sobriety.</p>

<p>Now we sit at the same table on the same frequency. The connection isn't one big descent anymore — it's dozens of small moments per dinner that used to get blurred over. I'm more present with her than I've ever been, and that alone might be worth the whole thing.</p>

<h3>Fuck fitness</h3>

<p>Fitness triggered all of this, it motivated me. But let's forget fitness for a second because there's something bigger here.</p>

<p>For twenty-smth years I told myself I was choosing fun, but you can't really choose when you can't say no. My Monday was powerless to my Saturday. My whole training life orbited around alcohol's aftermath, and I called that balance.</p>

<p>What I got back isn't a better 5K time, it's <em>choice</em>. I can enter any room, any wedding, any Saturday on any setting I want, including the old one. The door is still open. I just don't walk through it, and not wanting to is the actual superpower here.</p>

<p>I'm forty years old and I have never once seen my real ceiling. It feels like discovering an overclock setting on a GPU card I've been running under-clocked for years. Finding out is the whole point now.</p>

<h3>Worth trying?</h3>

<p>Look, I'm not recruiting. The other side can honestly be boring AF at first, while you learn how to "walk again". But if you've been drinking for years and never once stopped, I think the experiment is worth running. Thirty days, no "quitting" or anything, just to see what it feels like. You might meet a version of yourself you've never hung out with sober. You might even like them.</p>]]></content><author><name>kangax</name></author><category term="essay" /><category term="fitness" /><summary type="html"><![CDATA[Two and a quarter drinks in thirty days, down from about forty a month. No rehab, no rock bottom. How the equilibrium between drinking and training broke.]]></summary></entry><entry><title type="html">How do you rank in your CrossFit box?</title><link href="https://perfectionkills.com/how-do-you-rank-in-your-crossfit-box/" rel="alternate" type="text/html" title="How do you rank in your CrossFit box?" /><published>2026-07-28T00:00:00+00:00</published><updated>2026-07-28T00:00:00+00:00</updated><id>https://perfectionkills.com/how-do-you-rank-in-your-crossfit-box</id><content type="html" xml:base="https://perfectionkills.com/how-do-you-rank-in-your-crossfit-box/"><![CDATA[<h2>How do you rank in your CrossFit box?</h2>

<p>I've always wanted to know where I stand at my gym — not just today, on one or two workouts, but over <em>years</em>.</p>

<p><a href="/your-crossfit-app-doesnt-know-what-you-did/">As you might know</a>, I've been on a mission to create the best CrossFit app. This made me research a lot of the existing ones: SugarWOD, PushPress, and Wodify all show a <em>daily</em> leaderboard<sup id="footnote-anchor-1"><a href="#footnote-1">1</a></sup>. You do Fran, you see how you placed against whoever also did Fran that day. Fun for about ten seconds. Well, some of us are <s>nuts</s> competitive. We want rankings that represent overall fitness, which means aggregating many scores.</p>

<p>I decided to find out.</p>

<h3>Getting the data</h3>

<p>My first idea was gloriously dumb: point Claude at the SugarWOD app on my phone and have it scroll through leaderboards, screenshotting ranks one by one. Slow, fragile, but that's ok because an agent can chew through it in the background.</p>

<p>Opus surprised me with a better idea. SugarWOD's own web app talks to an internal API. Using my authenticated SugarWOD session, I could retrieve the gym results already available to me as a member. No screenshots and <em>much</em> faster. Claude knew this because I've experimented with some of the SugarWOD API to create a <a href="https://apps.apple.com/app/id6758307458">whiteboard in PRzilla</a>.</p>

<p>So I pulled all of our gym's (<a href="https://www.murderofcrowsbrooklyn.com/">Murder of Crows</a>) data. Men, women, RX, scaled. Every recorded score from November 14, 2017—the month my gym started logging—through July 20, 2026. 103 active months. Roughly 640 athletes. 117,236 individual scores. An absolute goldmine of performance data and athlete rankings.</p>

<figure><img width="1456" height="777" loading="lazy" src="/images/how-do-you-rank-in-your-crossfit-box/01.png" alt="Gym results plotted over time" /></figure>

<p>I thought I was building a chart for an afternoon. A week of ruthless iteration later—questioning every number, removing more than I added, and simplifying it again and again—I had a clear view of nearly nine years of athlete progress.</p>

<p>You can play around with an anonymized version at <a href="https://przilla.app/moc">https://przilla.app/moc</a>. The public board uses stable aliases, while gym members have a private link that shows real names.</p>

<p>Click any dot to see the workouts behind that month.</p>

<figure><img width="1600" height="1093" loading="lazy" src="/images/how-do-you-rank-in-your-crossfit-box/02.png" alt="Workout results behind a selected month on the chart" /></figure>

<h3>The Rx and Scaled problem</h3>

<p>At first I split everyone cleanly: Rx on one board, Scaled on another. Seemed fair. Then I noticed what that hides. If one athlete does a workout Rx while twelve others scale it, the Rx board calls that athlete first out of one—a meaningless win. And no combined board gives them credit for attempting the prescribed version.</p>

<figure><img width="1206" height="2622" loading="lazy" src="/images/how-do-you-rank-in-your-crossfit-box/03.png" style="width:274px" alt="Rx and scaled leaderboard comparison" /></figure>

<p>So I added a third view, "Overall." For this experiment, I used a simple, transparent Open-style rule: every Rx result ranks above every Scaled result; within each group, results are sorted by score.</p>

<p>Here's why it matters. Say five people go Rx and you land third. Ten more go Scaled, below all the Rx. On the old Rx-only board you're third of five — middle of the pack. In Overall you're third of <em>fifteen</em>, ahead of everyone who scaled. You go from roughly the 50th percentile to the top 20%.</p>

<p>Another fascinating problem: ~66% of the conditioning scores in my gym's history are scaled—39,556 of 59,743. You might scale Fran to 65 pounds and banded pull-ups while I use 95 pounds and jumping pull-ups, yet both results appear simply as "Scaled, 4:12"—despite representing very different workouts.</p>

<p>Most apps don't truly know how you scaled. SugarWOD saves a score and a note like "65#"; <a href="https://przilla.app/">PRzilla</a> records the movements and loads, so it knows you did jumping pull-ups and 65-pound thrusters. That gives us better inputs—65 pounds is 68% of Fran's prescribed thruster load—but it still cannot fairly compare different substitutions, loads, and finish times. This historical dataset does not contain enough detail to reconstruct them.</p>

<p>What about 80% of the prescribed load at 5:05 versus 60% at 4:05? One person did the harder version; the other was a minute faster. Is 20% more weight worth a minute? It depends on the workout and the athlete. Scaling also isn't linear: the difficulty gap between a 95 lb and 135 lb thruster isn't the same as that between 135 lb and 175 lb, despite the identical 40 lb difference. Performance can drop sharply as the load approaches an athlete's limit.</p>

<h3>Why percent beats rank</h3>

<p>Rank hides field size. Third of four means beating one person; third of forty means beating thirty-seven—about the 95th percentile. Percentile puts both results on the same scale, letting us compare performance across days, months, and years.</p>

<h3>Does doing more WODs hurt you?</h3>

<p>Once every result was normalized and every scored day got one vote, Derrick remained first in almost every version. Across the monthly athlete records, WOD count and Avg had a correlation of −0.05—no meaningful linear relationship.</p>

<p>Avg is still too trusting. An 80% Avg from 20 recorded days may reflect a lucky stretch; a 75% Avg across 200 days includes great, ordinary, and bad ones. Adjusted accounts for this by adding 30 imaginary middle-of-the-board days to everyone. Those days pull a short history toward the middle but barely affect a long one. Avg stays visible; Adjusted determines the ranking.</p>

<figure><img width="1248" height="322" loading="lazy" src="/images/how-do-you-rank-in-your-crossfit-box/04.webp" alt="Leaderboard example accounting for number of recorded days" /></figure>

<p>Over the same 24 months, Jesse averaged 80.6% and Juan 80.9%. After adjustment, Jesse leads 75.7% to 74.6%. Jesse had 177 scored days across 23 qualifying months and 283 scorecards; Juan had 134 days across 20 months and 205 scorecards. The adjustment uses scored days—not raw scorecard totals—because each day gets one vote.</p>

<p>In Overall, Strength and Conditioning are adjusted separately, then blended 50/50.</p>

<p>Consistency only determines who appears: Drop-ins need results in 20% of selected months, Regulars 50%, and Veterans 70%. It does not change anyone's score. Adjusted still sees only what someone recorded—which brings me to the uncomfortable part.</p>

<h3>Self-selection bias</h3>

<p>I cherry-pick. Not always on purpose, but I do it.</p>

<p>I'll happily throw down on a workout full of ring muscle-ups, handstand push-ups, and snatches — my stuff. And I will find a reason to skip the day it's thrusters, air bike for max cals, or sit-ups. (I hope I'm not the only one with Air Bike feelings). So my percentile is, let's be honest, a little inflated by <em>which</em> workouts I choose to enter.</p>

<p>Adjusted can account for how much history you have, but not what you chose to skip. Someone who logs every ugly WOD is measured more honestly than someone who curates. The number is real; it just isn't the whole truth.</p>

<h3>King of the hill</h3>

<p>I also added longer lenses—3 years, 5 years, and "All time"—to find the true king of the hill across nearly nine years of gym history.</p>

<p>Longer windows also reveal absurd lifetime volume. David has 1,312 conditioning scorecards; Mike has 1,336; I have 313. Across Strength and Conditioning, their totals rise to 2,124 and 2,238 recorded results, versus my 517. Standing next to that, my carefully curated percentile feels a little less heroic :)</p>

<p>When you zoom out to 3 years, 5 years, or All time, monthly noise gets distracting. So the trend adapts to the selected range: it smooths over 7 months in the 3-year view, 11 months in the 5-year view, and 13 months in All time. Here you can see David's impressive rise from roughly 60% to 85% on the conditioning chart from 2017 to 2020, then holding near 80% for roughly the next six years.</p>

<figure><img width="1600" height="623" loading="lazy" src="/images/how-do-you-rank-in-your-crossfit-box/05.png" alt="Long-term gym ranking view" /></figure>

<h3>Is the whole gym improving?</h3>

<p>An 80th-percentile trend means you kept outperforming roughly 80% of the field; it does not measure fitness directly. Your times and weights can improve while your percentile stays flat if the gym improves too. And because participants change each month, it is never exactly the same field.</p>

<p>Age adds another twist. Performance often becomes harder to maintain as we get older, though the timing and rate differ for everyone. Holding the same absolute output from 35 to 40 can itself be meaningful progress against the expected curve. Staying flat relative to a younger or improving field may be impressive too—but percentile alone cannot prove it. For that, I would need repeated benchmarks or age-adjusted scoring.</p>

<h3>The other half: absolute progress</h3>

<p>Percentile tells me whether I'm climbing within the room. But the same workout data can reveal something more personal: whether my lifts are getting heavier, my benchmark times are getting faster, and my overall fitness is improving. That's the next gym chart I'm exploring.</p>

<p>As an athlete, you can also use <a href="https://apps.apple.com/app/id6758307458">PRzilla</a> :) and this was my intention with creating it in the first place: log a score, and it's automatically parsed, tracked, and turned into a picture of your <em>absolute</em> WOD performance over time:</p>

<figure><img width="1206" height="2622" loading="lazy" src="/images/how-do-you-rank-in-your-crossfit-box/06.png" style="width:293px" alt="PRzilla view of an athlete’s absolute progress" /></figure>

<p>If you run a gym and want this for your box, <a href="mailto:hello@przilla.app">email me</a>.</p>

<div class="footnote" id="footnote-1"><sup>1</sup>
<p>btwb gets closest, with all-time leaderboards per workout and a 'Fitness Level' percentile you can chart over time — but that percentile is against the whole btwb community, not your gym's room, and it's an aggregate fitness score, not your standing on the workouts you actually did.</p>
</div>]]></content><author><name>kangax</name></author><category term="fitness" /><category term="przilla" /><summary type="html"><![CDATA[Daily leaderboards tell you almost nothing. Pulling years of gym results out of SugarWOD to work out where I actually rank in my CrossFit box.]]></summary></entry><entry><title type="html">Thoughts on first XENOM in Dallas</title><link href="https://perfectionkills.com/thoughts-on-first-xenom-in-dallas/" rel="alternate" type="text/html" title="Thoughts on first XENOM in Dallas" /><published>2026-07-01T00:00:00+00:00</published><updated>2026-07-01T00:00:00+00:00</updated><id>https://perfectionkills.com/thoughts-on-first-xenom-in-dallas</id><content type="html" xml:base="https://perfectionkills.com/thoughts-on-first-xenom-in-dallas/"><![CDATA[<h2>Thoughts on first XENOM in Dallas</h2>

<p>I just wrapped up competing at a CrossFit event in Dallas — <a href="https://xenom.global/">XENOM</a>, the first of its kind. I've never competed in a big CF event like this, largely because most of them require you to be… well, pretty advanced. CrossFit Games, Wodapalooza, Rogue Invitational: all targeting top 0.01% of the CrossFitters. </p>

<p>The world needed something a lot more accessible. Like HYROX, but for CrossFit and XENOM feels like it's filling that gap. Announced right after Open this year—where I did pretty well—it caught me at the time when I wished for another challenge. And so I signed up. I also thought it would be a nice way to promote <a href="https://przilla.app/about">PRzilla</a>.<sup id="footnote-anchor-1"><a href="#footnote-1">1</a></sup></p>

<p>Overall, I had a blast. The event felt smooth and all athletes I spoke to (in my heat) enjoyed it.</p>

<h3>The good parts</h3>

<p>XENOM must have borrowed comp logistics from HYROX which was great since HYROX has done it hundreds of times now: spectator ring was interweaved with comp areas which made for fun vibes as folks would cheer us up while we were dying on the floor.</p>

<p>It was incredibly cool to compete with pros in the exact same arena! Emily Rolfe, Abi Domit, Jack Farlow, Colten Mertens and Chris Ibarra, Dan Bailey would warm up next to you on a bike or throw a barbell around in a warmup section. And you could spectate all of them from few feet away standing at the same stations where you just competed 20min ago.</p>

<p>That was my favorite part and it was very motivating for my own training.</p>

<p>Overall events felt like they covered fitness pretty well. Most movements made an appearance except dubs. I heard WODPrep folks explain that gymnastic movements like RMUs in one of the workouts rewarded points equal to a squat clean at 130kg. So you can get ahead by being better at those types of events; something to be aware of.</p>

<h3>The not-too-bad parts</h3>

<p>Some small hiccups: long check-in line on 1st day and no athlete briefing before competition, instead they were briefing us before every event and the music and announcers were so loud that it was hard to hear the rules. You could talk to your judge at the station, though, and ask any questions so this ended up being a non-issue.</p>

<p>EPI score is a bit... confusing, but I now have a specific number (<a href="https://www.xenom.global/leaderboard/dallas-june-2026/XEN-2026-02647">4481</a>) that I can work on improving. And I can see which workouts I did well on (rhino dl, snatch) and which need improvement (BB cycling and air bike). The issue is that with something like Rhino DL, I have no way of testing it in training or even knowing why my "1581" power output resulted in certain EPI points.</p>

<p>5 workouts per day for 2 days is a lot. It's Wednesday now and I'm still feeling it so a weekend like this is a challenge on its own. Expect to do slightly worse than in training, although competition vibes are a special kind of magic and I PB'd both my snatch and clean, so... you never know :)</p>

<p>Below are some lessons for myself from all the events:</p>

<h3>Day 1</h3>

<ol>
<li><p><strong>1RM snatch</strong><br>Hit 85kg which is 187.5lb. Previous best was 185lb so a tiny PR. Failed 90kg. I should really clean up my snatch and get that 90kg or more I've been eyeing for <strong>years</strong>.</p></li>
<li><p><strong>Wall walks and Rope Climbs</strong><br>I consider myself good at wall walks but overall fatigue built up and I only got 1 out of 5 rope climbs. A bit better than in training but not much. Would have loved to get all 5. Thick rope tripped me up as I couldn't slide down as well. The issue wasn't rope though but just accumulating fatigue at the end of those 10 wall walks. Protip: wear underpants next time so as not to scrape the skin.</p></li>
<li><p><strong>Air Bike</strong><br>Got only 25 cals. Need to work on this as it ended up being one of my weakest performances. Apparently max power output is a trained skill so TBD on how much I can improve here.</p></li>
<li><p><strong>Barbell Cycling<br></strong>Essentially a DT + 3 thrusters each round.<strong> </strong>Pure anaerobic power test and a carnage unless you've built this skill and capacity. </p></li>
<li><p><strong>2k ski erg + 3k run<br></strong>I finished ski in 8:15 so a bit slower than my desired 8min mark, but the run felt good and I finished in 23:38 which is faster than 25:00 I got in training.</p></li>
</ol>

<p>Lessons learned:</p>

<ul>
<li><p>Get better at air bike (under fatigue), incorporate max effort sprints into training.</p></li>
<li><p>Not all rope climbs are created equal. Do more rope climbs in general. I only started practicing them a month ago so there's a lot of room for growth.</p></li>
<li><p>Get better at BB cycling (this is consistent with my poor DT and Fran scores).</p></li>
</ul>

<h3>Day 2</h3>

<ol start="6">
<li><p><strong>T2B + DB snatches → BMU → RMU</strong><br>This one surprised me as I only got 3 RMUs after 10 BMUs. I would have expected to get 10. Granted, I haven't practiced this specific sequence AND i was coming off of a shoulder injury (AC joint strain) so I'm happy I got any RMU's under fatigue at all.</p></li>
<li><p><strong>Rhino Deadlift</strong><br>My back was beat up from previous day and I was worried that I'd pull it. Did the best I could. Not my fave.</p></li>
<li><p><strong>Burpees → Air Bike → Ski Erg → Burpees</strong><br>All of my least favorite movements in one beautiful nauseating package. Went in trying not to think too much about it. Did better than in training! And still finished 2nd to last in my heat :D</p></li>
<li><p><strong>Clean ladder</strong><br>It's not a good sign when workout calls for AMRAP at 130kg and your max clean is at 95kg :) I knew this was going to be my worst event so I went into it calm and composed, got 10x80kg, 8x90kg, and then even managed to power clean 100kg for a PR. Still, most guys in my heat were doing 110 for reps.</p></li>
<li><p><strong>HSPU + C2B + DB lunges</strong><br>Probably the easiest event for me as I love HSPU's and am good at them. I thought my 9.5 rounds were a good result — and I was top 3 in my heat — but then I saw some folks getting well into 15 rounds… again, you can never be too good at gymnastics.</p></li>
</ol>

<p>Lessons learned:</p>

<ul>
<li><p>Need to work on my aerobic base: it would <em>also</em> help with burpee workout</p></li>
<li><p>Cleans are my kryptonite. </p></li>
<li><p>If you think you're good at gymnastics, there's always room for more/better gymnastics.</p></li>
</ul>

<h3>Final thoughts</h3>

<p>I loved how XENOM made it very clear what I'm good and what I'm bad at. This is something Open can never do: testing overall fitness in just 3 workouts.</p>

<p><a href="https://www.xenom.global/leaderboard?event=dallas-june-2026&amp;type=individual&amp;sex=M&amp;division=RX&amp;age=40-44">I placed 9th in my (40-44) age category</a>. </p>

<p>The scarcity narrative is that I'm only "average", 9th out of 16th men. And this field is only going to get more competitive. The gratitude mindset is that I was able to compete at "Rx" and finished all the workouts. Just 3 months ago I wouldn't be able to do even 3 rope climbs. Just a year ago I wouldn't be able to do even 3 RMU's. 2 years ago I wouldn't be able to get through 10 BMUs. 3 years ago I'm not sure I would have gotten that 100kg clean.<br><br>I'm certain that with a dedicated 3-6 months of hard work, I can get to 5000 EPI which would put me on a podium (top 3). <br><br>LFG.</p>

<div class="footnote" id="footnote-1"><sup>1</sup>
<p>Although it ended up being difficult to talk to people about an app during competition. The upside is that I ended up fixing a bunch of XENOM-related issues in the app.</p>
</div>

<p class="source-note"><em>Originally published on <a href="https://kangax.substack.com/p/thoughts-on-first-xenom-in-dallas">Substack</a> on July 1, 2026.</em></p>]]></content><author><name>kangax</name></author><category term="fitness" /><summary type="html"><![CDATA[Competing at XENOM in Dallas, a new CrossFit competition aimed at regular athletes instead of the top 0.01%. What the format got right, and what it did not.]]></summary></entry><entry><title type="html">Your CrossFit App Doesn’t Know What You Did</title><link href="https://perfectionkills.com/your-crossfit-app-doesnt-know-what-you-did/" rel="alternate" type="text/html" title="Your CrossFit App Doesn’t Know What You Did" /><published>2026-05-09T00:00:00+00:00</published><updated>2026-05-09T00:00:00+00:00</updated><id>https://perfectionkills.com/your-crossfit-app-doesnt-know-what-you-did</id><content type="html" xml:base="https://perfectionkills.com/your-crossfit-app-doesnt-know-what-you-did/"><![CDATA[<h2>Your CrossFit App Doesn't Know What You Did</h2>

<p>CrossFit apps are good at storing WOD scores, but are terrible at knowing the work you've actually done. Here's a WOD from <a href="https://www.murderofcrowsbrooklyn.com/">my box</a>:</p>

<figure><img width="1206" height="715" loading="lazy" src="/images/your-crossfit-app-doesnt-know-what-you-did/01.jpg" style="width:453px" alt="CrossFit workout results screen" /></figure>

<p>Out of 20 results, only 1 person did it RX:</p>

<figure><img width="1206" height="2622" loading="lazy" src="/images/your-crossfit-app-doesnt-know-what-you-did/02.png" style="width:292px" alt="Workout leaderboard with one Rx result among twenty" /></figure>

<h2>Stored, not understood</h2>

<p>In SugarWOD the only way to mark WOD as scaled is via notes. Notice how everyone wrote 155#, 145 lb, 165lb, @165, etc.</p>

<p>Ok, so what's the problem?</p>

<p>Well, the reality is that I've done 10 sets of 2 power cleans + 1 power jerk @165lb. My training log in SugarWOD, however, has no idea that this is what I've done. If I go into "History" for this WOD and click on Apr 24 I see "170" which makes me think that maybe that's the previous weight I did. But no, it brings me to a WOD where I did "1 above knee squat snatch @170lb" not "2 Power Clean + 1 Split Jerk" or even just "Power Clean + Split Jerk" or even just a standalone "Power Clean" / "Split Jerk":</p>

<figure><img width="1269" height="1239" loading="lazy" src="/images/your-crossfit-app-doesnt-know-what-you-did/03.png" alt="Workout record without the completed power cleans and jerks" /></figure>

<p>It's entirely wrong and confusing. And if I go into my barbell lift history, this weight I just lifted is neither under Power Clean, nor under Clean and Jerk, nor under Split Jerk:</p>

<figure><img width="1448" height="1086" loading="lazy" src="/images/your-crossfit-app-doesnt-know-what-you-did/04.png" alt="Barbell lift history missing work performed in a WOD" /></figure>

<p>The two lonely logs for Power Clean are from Mar 2024. That's… 2 years ago. SugarWOD <strong>has no idea about countless times I've done power clean</strong> in a WOD like today.</p>

<p>My barbell PR history in an app simply can't be trusted.</p>

<p>Ok, that's SugarWOD. What about others? Of ~25 apps, only <a href="https://beyondthewhiteboard.com/">BTWB</a> and <a href="https://about.wodup.com/">WodUp</a> treat scaled work as structured data — and both punt on the hard part. BTWB excludes scaled metcons from its fitness rating. WodUp tags them four ways but disqualifies any scaled benchmark from PR tracking. Everyone else — Wodify, SugarWOD, Mayhem, CompTrain, TrainHeroic, Hevy, Strong, the long tail — collapses your work into Rx/Scaled + a score + a notes field.</p>

<h2>We were already half-right</h2>

<p>In <a href="https://apps.apple.com/app/id6758307458">PRzilla</a>, we already tracked all movements correctly when logged individually or as part of a WOD. Here's a workout with Power Clean that I did in Apr 2025 which SugarWOD never showed. It's displayed in the history, alongside individual lifts:</p>

<figure><img width="1600" height="1739" loading="lazy" src="/images/your-crossfit-app-doesnt-know-what-you-did/05.png" alt="PRzilla movement history before the workout detail update" /></figure>

<p>Scaled WODs like this Holleyman were part of the history too, but we didn't actually know how you scaled them outside of the notes. It would just display as "(scaled)" and not be part of any metrics:</p>

<figure><img width="1600" height="1739" loading="lazy" src="/images/your-crossfit-app-doesnt-know-what-you-did/06.png" alt="Scaled Holleyman workout entry" /></figure>

<h3>As fast as a notes field</h3>

<p>I always knew this is one of the most important things to have in a CrossFit app worth its salt; after many weeks of work, it's finally here.</p>

<p>You can now specify exactly the <strong>work you've done</strong> when logging any WOD in PRzilla. WOD's are just prescriptions. Every WOD is decomposed into movement blocks. And it's those movement blocks that define your history, stats, charts, etc. in our system.</p>

<p>But here's a harsh truth: the last thing athletes want to do when logging WODs is to spend few minutes tinkering with movements, sets, reps, and weights. Sweaty hands. Still breathing hard. 99% of us write "165#" and move on. That's why it was very important for me to remove as much friction when logging scaled WODs as possible.</p>

<p>Let's go back to the Clean &amp; Jerk WOD. The moment I add it, PRzilla parses it into Power Clean, Split Jerk, and Air Bike; it creates all 10 sets of each, prefills first with 2 reps, second with 1 rep, and adds RX weight to both.</p>

<p>Because I scaled to 165lb, all I need to do is type "165" in Power Clean's topmost weight cell and click "Apply to all sets below". It takes me the same amount of time as writing "165#".</p>

<figure><img width="1600" height="1739" loading="lazy" src="/images/your-crossfit-app-doesnt-know-what-you-did/07.png" alt="PRzilla field for entering a scaled Power Clean weight" /></figure>

<p>If I scaled that WOD to just power clean I can remove Split Jerk movement from the session by clicking "Delete". It's actually faster than typing "Did not do Split Jerk" in the notes. And I can replace power clean with dumbbell clean just as quickly as typing "Scaled to db cleans".</p>

<p>We now have the power of a full-blown workout editor <strong>within the context of one WOD</strong>. And we have <strong>minimal friction</strong>.</p>

<h2>From score to signal</h2>

<p>When looking at your workout session (left pic), you now see the things you've actually done and not just what was prescribed. A lot more useful metric that goes in line with the rest of the movements in a workout session. After all, we show <code>3 x 2 @ 275lb</code> on Front Squats and not just <em>"Find 2RM in 15min"</em>:</p>

<figure><img width="1600" height="1739" loading="lazy" src="/images/your-crossfit-app-doesnt-know-what-you-did/08.png" alt="Workout session and movement history showing completed work" /></figure>

<p>The Holleyman (right pic) is now displaying <code>30 x 1 @155lb</code> because we have your actual weight as part of the WOD movements (=work performed). Seeing all the weights in a history list like this feels like a basic right in a CrossFit-aware workout tracker :)</p>

<h3>You can't program what you can't see</h3>

<p>Ok, charts and history lists are nice and all but… does this all <em>really</em> matter? I think so. <strong>Accurate training data is the foundation of your fitness training</strong>. We need to know where you stand in order to design a path forward.</p>

<p>If you scaled Holleyman to 185lb (and finished all 30 rounds), now we know these things:</p>

<ol>

<li><p><strong>1RM</strong> — this tells us that your max is at least 185lb without explicitly testing it.<br>1RM is essential for daily programming.</p></li>

<li><p><strong>Volume</strong> — you've done 185x30=5550lb of Power Clean in that session.<br>When we know your volume, we know the intensity of a given workout relative to your usual effort. If you've only ever done 1000lb of power cleans in a WOD, doing a WOD with 5000lb will wreck you for days. We can mark such WOD as high-volume for <em>your</em> level. A high-volume day can then either be scaled correctly or programmed in a way that doesn't interfere with other workouts in a week.</p></li>

<li><p><strong>Progress</strong> — Holleyman @155lb in 20min vs. Holleyman @185lb in 20min is the kind of progress you can see if we track scaled work. That's density: more work done in the same amount of time. It's important to know if you're trending up, down or plateauing.</p></li>

<li><p><strong>Programming</strong> — passing your results to AI coach makes for highly relevant advice. If it knows you did 30 rounds of power cleans @185lb, it can use that to create a workout that's within your reach. It can tell you to scale up or down next time according to this weight. It can even flag less obvious things like weak squat clean in relation to power clean.</p></li>

</ol>

<p>A coach who doesn't know what you lifted can't tell you what to lift tomorrow. Neither can your app. PRzilla is my attempt to fix that — <a href="https://apps.apple.com/app/id6758307458">give it a try</a>.</p>]]></content><author><name>kangax</name></author><category term="przilla" /><summary type="html"><![CDATA[Your CrossFit App Doesn't Know What You Did]]></summary></entry><entry><title type="html">CrossFit training in the age of AI</title><link href="https://perfectionkills.com/crossfit-training-in-the-age-of-ai/" rel="alternate" type="text/html" title="CrossFit training in the age of AI" /><published>2026-05-02T00:00:00+00:00</published><updated>2026-05-02T00:00:00+00:00</updated><id>https://perfectionkills.com/crossfit-training-in-the-age-of-ai</id><content type="html" xml:base="https://perfectionkills.com/crossfit-training-in-the-age-of-ai/"><![CDATA[<h2>CrossFit training in the age of AI</h2>

<p>If you've been following this blog, you know I've <a href="https://kangax.substack.com/p/building-an-app-with-cline-claude">spent the past year</a> building PRzilla — from <a href="/using-ai-to-accurately-predict-crossfit/">AI-powered WOD benchmarks</a> to <a href="/my-fitness-from-spreadsheet-to-an-app/">My Fitness visualizations that replaced a decade of spreadsheets</a> to a <a href="/crossfit-tracking-app-but-youre-in-control/">full workout tracker</a>. If you're new here, the short version: I left my tech career to build the CrossFit training app I always wanted, and it turned into something much bigger than I expected.</p>

<figure><img width="1600" height="852" loading="lazy" src="/images/crossfit-training-in-the-age-of-ai/01.png" alt="Four PRzilla app screens showing whiteboard scan, WOD analysis, AI coach, and workout search" /></figure>

<p>The native app is live — <a href="https://apps.apple.com/app/id6758307458">iOS</a> and <a href="https://play.google.com/store/apps/details?id=app.przilla.przilla&hl=en_US">Android</a>, 11 consecutive weekly releases and counting — and what started as a workout tracker has become an AI training companion that sits on top of your data, reads your recovery metrics, and coaches you like someone who actually knows your training history.</p>

<p>Here's how I got there.</p>

<h3>Why not SugarWOD or Strong or Strava?</h3>

<p>As I <a href="/crossfit-tracking-app-but-youre-in-control/">mentioned earlier</a>, most training apps I've used are either geared towards traditional strength training (Strong/Hevy) or are Crossfit-class-centric and suck at logging any other activity (SugarWOD/Wodify/PushPress) or are too specialized and have poor workout trackers (Strava focuses on running/biking and Whoop focuses on recovery; strength logging is poor).</p>

<p>If I <strong>joined my gym class</strong> on Monday, I want to log whatever WOD was on a whiteboard / in SugarWOD. If on Tuesday I do an <strong>open gym</strong> instead to work on my ring muscle up practice, I want to log 3-3-3-2-2-2-2 and let it be part of my metrics. Maybe I also do an hour on a rower <strong>to work on zone 2</strong>. Or maybe I <strong>went for a run</strong> with a friend who's preparing for Hyrox or a Brooklyn half. I want to log those too. And then perhaps on Friday I'm traveling to SF and will <strong>drop into another box</strong>. The box is on a completely different programming track and often different platform like Wodify or PushPress. I want to <strong>log whatever WOD I end up doing at that gym</strong>. And even if I <em>only</em> ever do my gym programming via SugarWOD, what happens when I <strong>move to another area</strong> and join another box that uses different software—I'd like to keep all my history and lifts.</p>

<p>PRzilla solves all of this. Here's what that looks like in practice:</p>

<ol>
<li><p>No longer tied to a single CrossFit box and their platform</p></li>
<li><p>You can log anything you want</p></li>
<li><p>You own your data</p></li>
</ol>

<h3>Camera advantage</h3>

<p>One feature I'm especially excited about is that you can snap a photo of your gym's whiteboard and the app breaks the entire training day into structured movements and WODs — matching canonical benchmarks when it recognizes them or creating a custom one when it doesn't. WODs automatically get analyzed for performance level bell curve so you can immediately see where you stand.</p>

<p>Here I snapped SugarWOD's whiteboard and it turned it into back squat and shoulder press as single movements (which I could then log as many sets/reps of) and it created a WOD with running and Fran-like couplet, giving me a time to shoot for:</p>

<figure><img width="1600" height="1159" loading="lazy" src="/images/crossfit-training-in-the-age-of-ai/02.png" alt="Whiteboard photo converted into back squat and shoulder press entries" /></figure>

<p>I spent months building and refining this sophisticated workout tracker that can handle any workout. Even though I made it easy to log things, I eventually realized that training log itself is <em>not</em> the end goal. There are two more legs of a tripod that truly elevate training experience to the next level.</p>

<h3>Recovery as the middle lever</h3>

<p>Your training log is the <strong>past</strong>. Your <a href="https://www.reddit.com/r/crossfit/comments/1l1hbej/so_many_online_crossfit_programs_which_ones_are/">programming</a> is the <strong>future</strong>.</p>

<p>They're intimately related to each other: as a coach, I need to know what you're capable of doing in order to design a program to get you from point A (your past) to point B (your goal). Your training log is a snapshot of your abilities, strengths and weaknesses. An advanced lifter that needs to work on their positions in a snatch to bring it from 1.25x to 1.5xBW has very different movements prescribed than someone who just started training and are working on their 5x5 Back Squat progression.</p>

<p>However, Training Data <em>↔</em> Programming don't exist in a vacuum; the subject in the middle—you—responds to demands placed on them (=programming) positively or negatively. One way to measure how they respond to them is via your <strong>recovery metrics</strong>: <a href="https://my.clevelandclinic.org/health/symptoms/21773-heart-rate-variability-hrv">HRV</a>, <a href="https://www.polar.com/en/guide/resting-heart-rate">RHR</a>, Sleep hours/quality. Waking up with low HRV <em>could</em> be related to a hard session yesterday (it tells us that it might have been too intense for you). And it should <em>adjust</em> your programming accordingly (multiple hard sessions lead to overtraining).</p>

<p>And so I've added Apple Health integration:</p>

<figure><img width="1206" height="2622" loading="lazy" src="/images/crossfit-training-in-the-age-of-ai/03.png" style="width:266px" alt="Health metrics screen showing recovery data such as HRV and resting heart rate" /></figure>

<p>The feature is in beta but the idea is that you can now see your "readiness" day-by-day. Last week I saw my HRV drop 15ms after back-to-back heavy sessions — a clear signal I was accumulating more fatigue than I was recovering from. Without this data, I would have pushed through another hard day. With it, I dialed back to skill work and was fully recovered by Thursday.</p>

<h3>AI as an orchestrator</h3>

<p>A good coach would start by looking at your training history, create a program to get you from point A (your past) to point B (your goal), then adjust it in real time based on how you respond to it (your recovery metrics).</p>

<figure><img width="865" height="382" loading="lazy" src="/images/crossfit-training-in-the-age-of-ai/04.png" style="width:516px" alt="AI coach programming flow" /></figure>

<p>Given AI capabilities in 2026, it can do all of the above. It just needs to have access to your health and training data. It can serve as an orchestrator in the middle, carefully analyzing your past (<strong>recent training</strong>), ingesting what's present (<strong>morning readiness</strong>) and adjusting your future (<strong>today or tomorrow's workout</strong>).</p>

<p>Meet your <strong>personal coach</strong>; they know you better than a coach in your gym.</p>

<p>The coach has access to your full training history, remembers past conversations, and can search the web for workout details you mention. You don't re-explain yourself every session — it already knows your recent lifts, your weak points, and your goals.</p>

<figure><img width="1600" height="1739" loading="lazy" src="/images/crossfit-training-in-the-age-of-ai/05.png" alt="PRzilla coach conversation using training history" /></figure>

<p>As you can see, I've been using it for my own training. My honest take, as a coach myself, is that I'm genuinely surprised at how relevant the answers are. I would say they're at ~80-90% of what a human coach would recommend; not perfect and sometimes sloppy, but very useful as a brainstorming partner if you're a high level athlete, and are very illuminating if you're a beginner.</p>

<p>Some things you can ask:</p>

<ul>
<li>"How has my squat been progressing?"</li>
<li>"How should I approach this workout?" (attach a WOD from our catalog or a picture)</li>
<li>"What movements have I not done much lately that decay the fastest?"</li>
<li>"Help me structure this week as a best prep for QuarterFinals next week; recall that I do a long engine team WOD every Saturday"</li>
</ul>

<p>I wanted to create a workout tracker that can handle serious training demands. I ended up with a real-time AI companion at your fingertips that can guide you like a real coach.</p>

<h3>My fitness</h3>

<figure><img width="1600" height="1085" loading="lazy" src="/images/crossfit-training-in-the-age-of-ai/06.png" style="width:726px" alt="PRzilla Movement Ownership screen" /></figure>

<p>There's one more piece I haven't talked about yet. All of this data — your training history, your recovery trends, your AI coaching conversations — paints a picture of who you are as an athlete. Your fitness level across workouts. Your strength relative to established standards. How much you've actually practiced each skill over your lifetime. I've been calling this '<a href="/my-fitness-from-spreadsheet-to-an-app/">My Fitness</a>' — a gamified snapshot of your athletic identity that evolves as you train. Think of it as <a href="https://www.whoop.com/us/en/thelocker/healthspan/">Whoop's 'real age'</a> but for functional fitness: one page that shows you exactly where you stand and what to work on next. You've seen it on the web and it's coming to the native app soon.</p>]]></content><author><name>kangax</name></author><category term="fitness" /><category term="przilla" /><summary type="html"><![CDATA[CrossFit training in the age of AI]]></summary></entry><entry><title type="html">Overnight success</title><link href="https://perfectionkills.com/overnight-success/" rel="alternate" type="text/html" title="Overnight success" /><published>2026-03-24T00:00:00+00:00</published><updated>2026-03-24T00:00:00+00:00</updated><id>https://perfectionkills.com/overnight-success</id><content type="html" xml:base="https://perfectionkills.com/overnight-success/"><![CDATA[<h2>Overnight success</h2>

<h3>Exhibit A</h3>

<p>"Omg, look at this beautiful design", Cat said. "Finally, someone made a beautiful period tracking app".</p>

<p>I was looking at a stylish "28" logo and UI with a color palette that could easily win Apple's app of the year.</p>

<p>It had not just tracking, but symptom logging, workouts with videos, diet suggestions and recipes; a whole ecosystem, aka <a href="https://healthmatters.nyp.org/cycle-syncing-how-to-understand-your-menstrual-cycle-to-reduce-period-symptoms/">cycle-syncing</a>.</p>

<p>Her and I have been half-jokingly talking about creating a cycle app that doesn't suck. The app we were looking at surely looked like one: it had a ton of functionality including much-desired partner integration, the UX made sense, and a gorgeous design tied it all together.</p>

<p>"Wow, someone finally vibe-coded what we've envisioned", I thought.</p>

<p>I fired up deep research. Few minutes later it printed out something that I didn't quite expect: "Started in 2019... two founders who were working in brand..." Before my surprise could wear off, it was replaced with a familiar thought: "Overnight success doesn't exist." I've seen this so many times yet I'd still fall victim to thinking that someone <em>just</em> came up with something brilliant over a hackathon weekend.</p>

<h3 id="exhibit-b">Exhibit B</h3>

<p>"Dude, you gotta teach me how to be so good at ring muscle-ups", Dee told me as I finished my 15th rep on <a href="https://games.crossfit.com/workouts/open/2026/2?division=1">Open 26.2</a>. Dee was a level 2 CrossFit coach at the box I was visiting in Vietnam. The 2nd workout this year ended with a brutal set of 20 ring muscle-ups after about 12min of other shoulder-intense movements and high-skill gymnastics. Even doing 1 muscle-up was a worthy achievement and put you straight into 75th percentile.</p>

<p>My score put me in 90th. Out of 20 RX participants in our gym, only 2 others did better. It seemed I immediately gained respect among everyone as half of the box watched me perform perfect reps as the timer ticked down.</p>

<p>The next day I came across a <a href="https://www.reddit.com/r/crossfit/comments/1rkqrel/261_was_my_worst_workout_in_3_years_and_im_not/">ton</a> of <a href="https://www.reddit.com/r/crossfit/comments/1rgoj71/btwb_scores_261/">Reddit</a> <a href="https://www.reddit.com/r/crossfit/comments/1rnghm0/open_frustrations_and_overall_how_to_get_better/">posts</a> <a href="https://www.reddit.com/r/crossfit/comments/1rp3wsl/man_the_open_is_humbling/">on Open performance</a> frustrations. Folks were devastated with their scores.</p>

<p>This reminded me of my own feelings few years ago: I was doing powerlifting and bodybuilding-style training for many years. I thought I was strong and jacked and fit and all the things. Then I joined a CrossFit class and finished one of the last. In the years that followed I'd routinely perform way below what "good" meant by CrossFit standards. I was humbled again and again.</p>

<p>Don't just take my word for it, here are my Open results to prove it:</p>

<figure><img width="1600" height="1434" loading="lazy" src="/images/overnight-success/01.jpg" alt="Author’s CrossFit Open results over several years" /></figure>

<p>What people don't see leading up to those flawless ring muscle-ups are all the times someone practices them consistently, for weeks, months, or years. What they don't see is the slow growth from bottom 5% to top 17% over 6 years. No overnight success here either.</p>

<h3>Exhibit C</h3>

<p>When I started building PRzilla last year, I surveyed over a dozen of CrossFit boxes and their coaches. I wanted to see what they like/dislike about their existing platforms like Wodify or SugarWOD. One theme was common—some gyms recently switched to PushPress, a "new kid" on the block—and they were all quite happy with it. It provided a no-nonsense, all-in-one class management solution as well as social features for members. I remember checking it out couple years ago when I dropped into a box in Bangkok: clean, simple UI, modern features like a social feed. It looked a lot like what I would build.</p>

<p>Fast forward few months and I'm chatting with Dan Uyemura. "PushPress is 12 years old, yet I still come across affiliates who have never heard of it", Dan tells me. I want to say I'm in disbelief but, of course, I'm not. I know better. "We were at 0 profit first few years and I almost quit. And now it feels like we're only getting started."</p>

<p>As I'm <a href="https://kangax.substack.com/p/building-an-app-with-cline-claude">nearing a year of working on my vision</a>, it's easy to want to be so much further. More daily visitors, more registrations, more app installs, more features. Every day you see incredible products that were bootstrapped in "just few months", or vibe-coded in a weekend while talking to Claude on the phone from the subway.</p>

<p>Every day I see 2-3 apps that claim to do the same thing as what I'm building. Shouldn't I be further? Shouldn't I be better?</p>

<p>And so I remind myself: there's no overnight success. The grind continues. Step by step. <a href="https://jamesclear.com/continuous-improvement">1% better every day</a>.</p>]]></content><author><name>kangax</name></author><category term="essay" /><summary type="html"><![CDATA[Overnight success]]></summary></entry><entry><title type="html">What’s my XENOM score?</title><link href="https://perfectionkills.com/whats-my-xenom-score/" rel="alternate" type="text/html" title="What’s my XENOM score?" /><published>2026-03-23T00:00:00+00:00</published><updated>2026-03-23T00:00:00+00:00</updated><id>https://perfectionkills.com/whats-my-xenom-score</id><content type="html" xml:base="https://perfectionkills.com/whats-my-xenom-score/"><![CDATA[<h2>What's my XENOM score?</h2>

<p>TLDR: <a href="https://przilla.app/xenom-score">xenom calculator is here</a></p>

<p>The other day I came across <a href="https://www.xenom.global/">XENOM</a> — a newly-founded global CrossFit competition with a known and fixed set of workouts. Think CrossFit Games but standardized to a consistent two-day event similar to <a href="https://hyrox.com/">HYROX</a>. You get a score on each of the 10 workouts and <a href="https://www.xenom.global/scoring">your final result is the sum total</a>.</p>

<p>This got me thinking: can we determine athlete's performance on this kind of event?</p>

<p>In HYROX world, people ask the same question: <a href="https://www.google.com/search?q=hyrox+calculator">what's my estimated HYROX time</a> if I've never run the race? Why do we care? Well, if we know user's estimated time we know their starting level, their weakest splits, best division to compete under, and—most importantly—what improvement is realistic and <strong>what exact program to follow</strong> to get better for the upcoming race. Just like to run a marathon your training would look very different if you're at 8min/mile with 10 miles weekly average or 5min/mile with 50miles/week.</p>

<p>I've been working on <a href="/using-ai-to-accurately-predict-crossfit/">CrossFit benchmarking with AI</a> for a long time. But the XENOM problem is different: instead of figuring out time/reps on a given workout, race estimate is asking us to map athlete performance onto a score on a <em>different</em> workout.</p>

<h3>HYROX vs XENOM</h3>

<p>So how do HYROX calculators do this? Because HYROX is a sequence of single movements, its math is a lot simpler. Take your 1km running time × 8, add time of each of the stations (rowing, wall balls, etc.), and add fatigue multipliers for each.</p>

<p>XENOM estimate is asking: how well would I do on 4 attempts of max snatch in 9min, on a wall walk + rope climb ladder, on a 12min WOD ending with max rep muscle-ups, on a 3km run into 2k ski, and so on.</p>

<p>Obviously the best way — outside of doing an entire mock race — would be to just attempt each of those workouts and plug in your results<sup id="footnote-anchor-1"><a href="#footnote-1">1</a></sup>. But in the age of modern AI and having access to your training data (like we do in <a href="https://apps.apple.com/app/id6758307458">PRzilla</a>), we should certainly be able to figure this out without actual attempts.</p>

<p>1RM snatch (<a href="https://przilla.app/wod/xenom-001">XENOM 001</a>) is easy: just plug your best max lift. Recent snatch matters more than your all-time-best from 5 years ago.</p>

<p>What about more complex workouts?</p>

<h3>Think like a coach</h3>

<p>Putting my coach hat on, to determine the score on <a href="https://przilla.app/wod/xenom-002">XENOM 002</a> which is an ascending ladder of 2 wall walks + 1 rope climb, 4 wall walks + 2 rope climbs, etc. for 8min, I could start by checking user's recent wall walk performance. Ok, they've done 5x5 wall walks a month ago and 3 rope climbs a couple months ago. They're capable of getting to 2+1, 4+2 and can likely get to 6+3 as well and perhaps even 8+4. I'm able to predict this because 5x5 tells me that 5 is not their true max (1RM) but likely 7-8 is.</p>

<h3>Muscular endurance</h3>

<p>Here's the thing: max consecutive reps are not a perfect predictor to what an athlete is able to do. Some aren't able to piece 10 wall walks in a row but they can bang out 30-45 via 10-15 sets of 3 with short rest. That's a first wrench in our calculations. I might see that you've only ever done 3 consecutive wall walks, but I don't know what your <em>muscular endurance</em> on them is. A classic example is <a href="https://przilla.app/wod/cindy">Cindy</a> — if you did 20 rounds RX I can say with high confidence that your muscular endurance is quite strong; you're able to continuously perform 5/10/15 of pull-ups/push-ups/squats for 20 minutes. Same thing with wall walks: being able to do 10 in a row is an indicator of your continuous-set endurance and proficiency in the movement... but an even better predictor could be looking at a <a href="https://przilla.app/?search=%22wall+walk%22">WOD that includes plenty of wall walks</a> like Open 21.1, 22.1, 23.3, etc.</p>

<h3>Similar movements</h3>

<p>As a coach, I can also look at your handstand push-up performance, either as a max-rep number or in a WOD that includes them (e.g. <a href="https://przilla.app/wod/diane">Diane</a>). How about handstand walk. You can do 50ft? Your handstand endurance is generally "strong" and so your wall walk performance should be at least L5. But here's a curve ball: can you extrapolate handstand walk performance from a handstand push-up? The stabilizing muscle stamina has some overlap but you can certainly get good at handstands without ever being able to do a handstand push-up; the latter requires strength and stability throughout the entire range of motion.</p>

<h3>WOD logging is complicated</h3>

<p>Even if we have your training data, CrossFit-style workouts make our calculation hard because <strong>you log a score, you don't log how you performed the movements</strong>.</p>

<p>In a WOD that calls for 3 rounds of 20 C2B, did you do them as 5 sets of 4 because the mastery isn't quite there (e.g. ~L3 perf) or did you bang out sets of 20 (e.g. ~L8 perf) because you <em>own</em> them? We can somewhat extrapolate it from the total time: an athlete that's able to do easy 20 is likely to finish workout faster than the one breaking in 4 sets, but it's not a direct indicator of your movement performance.</p>

<p>Thankfully, when logging untimed practice (standalone movements) in PRzilla, you log them as <strong>sets and reps</strong>. This makes it easier for us to determine your max reps without a standalone test. Just like logging 3x10 bench press @185lb tells us your estimated 1RM.</p>

<figure><img width="1170" height="2532" loading="lazy" src="/images/whats-my-xenom-score/01.png" style="width:352px" alt="PRzilla workout detail screen with recorded movement components" /></figure>

<p>There is a good opportunity for disruption here: specify sets/reps when logging WODs for that ultimate analytics.</p>

<h3>Movement relevance</h3>

<p>Another curveball: let's say you log 10 rounds on a WOD that's a 12min AMRAP of 5 deadlifts and 5 wall walks. This is a good indicator of your capacity but did you do 10 rounds because of deadlift strength or wall walk strength, and which percentage of each contributed to the final score? It could be 80%/20%—you're a powerlifter with 500lb deadlift who's never done handstand work; or 20%/80% — you're a gymnast who's never done deadlifts. We should be looking at a broader set of workouts: if you consistently do well on those with handstand movements, we can assume with more certainty that you're good at them.</p>

<h3>Submaximal strength</h3>

<p>While we know that absolute strength corresponds to being able to do more work at a given weight, can we really be sure that a person with 255lb clean will do better on <a href="https://przilla.app/wod/grace">Grace</a> than a person with 205lb clean? I've seen guys in the gym who never go above 185lb but they can cycle 135lb forever, and do it fast. On the other hand, my clean is closer to 225 but my HR is through the roof after 15 singles with 135lb. In other words, you don't need to push the ceiling in order to get good at sub maximal weight endurance<sup id="footnote-anchor-2"><a href="#footnote-2">2</a></sup>.</p>

<p>This is why looking at a user's <a href="https://przilla.app/wod/dt">DT</a> and Grace scores is as important as looking at their Clean 1RM; it shows their performance in <a href="https://przilla.app/?tags=Barbell+Cycling">barbell cycling</a>, submaximal strength and endurance rather than their absolute max.</p>

<h3>Ideal benchmarks</h3>

<p>Why is Grace such a great benchmark? Because it asks you to perform X reps in one movement in shortest time. This is similar to a famous <a href="https://przilla.app/wod/30-muscle-ups">30 muscle-ups for time</a>. If we invert this into <strong>max reps in X time</strong>, you have tests like <a href="https://przilla.app/wod/handstand-push-ups-2-min-max-reps">Handstand Push-ups: Max reps in 2 min</a>. Going back to wall walks, if we know max reps athlete can complete in 2 min, that'd be one of the best <em>proxy</em> benchmarks for events like 002.</p>

<h3>HYROX PFT</h3>

<p>An interesting proxy that exists in HYROX world is their <a href="https://hyroxhk.com/physical-fitness-test/">Physical Fitness Test</a>: run 1000m, do 50 burpee broad jumps, 100 stationary lunges, 1000m row, 30 hand-release push-ups, and 100 wall balls.</p>

<p>15–25 min is PRO, 25–35 minutes is Open, 30–40 min is Doubles, 35–45 min is Relay.</p>

<p>Notice anything? PFT is similar to Grace or 30RMU's: it's a chipper of all of the HYROX movements where you perform X reps on each as quickly as you can. This is a direct indicator of strength/endurance/capacity on each of them, making your level approximation quite accurate.</p>

<h3>XENOM PFT</h3>

<p>So should XENOM have its own PFT? HYROX's works because it IS the race, just miniaturized. Same movements, scaled volume, done. Clean and obvious.</p>

<p>XENOM can't do that. Ten events, <strong>nineteen movements</strong> across three completely different fitness domains — a miniature version is just a giant chipper. Technically, it would be something like <a href="https://przilla.app/wod/king-kong">King Kong</a> or <a href="https://przilla.app/wod/fight-gone-bad">Fight Gone Bad</a>. Practically, you'd be testing too many things in a way that's not really representative of individual events: stimulus of a ladder is very different than a stimulus of max-weight attempts or a long endurance grinder.</p>

<p>We <em>could</em> come up with something like this: accessible to a majority of CrossFitters (no muscle-ups, no heavy snatch, no max-cal bike) but it would only be a faint projection of your overall performance.</p>

<p>For time:</p>

<p>1,000m Run<br>
15 Thrusters (60/42kg)<br>
15 Toes-to-Bar<br>
1,000m Echo Ski<br>
10 Cleans (80/55kg)<br>
10 Handstand Push-Ups</p>

<p>Elite: &lt;15 min, RX: 15–22 min, Compete: 22–32 min</p>

<h3>XENOM calculator</h3>

<p>In the meantime, I whipped up <a href="https://przilla.app/xenom-score">XENOM calculator in PRzilla</a>.</p>

<p>Calculator is <strong>smart</strong>. It uses WOD scores that serve as best proxies for an event — DT, Fran, Amanda, 5k run, etc. If there are no benchmarks it analyzes your training data for relevant signals. It decays benchmarks at different rates based on scientific research: strength reduces slowly, endurance diminishes fast, and acquired skills mostly persist.</p>

<p>Here it's showing that I'll probably land right at that fabulous 50th percentile :) You can override each score if you performed that specific workout or feel like our projection is incorrect.</p>

<figure><img width="1512" height="1472" loading="lazy" src="/images/whats-my-xenom-score/02.png" alt="XENOM score calculator showing an estimated percentile" /></figure>

<p>If you're logged in, it uses your existing WOD scores under the hood. If you don't have account, just plug your WOD scores manually and it'll use the exact same smart calculations. The more scores you give the more accurate final prediction is.</p>

<figure><img width="1504" height="1456" loading="lazy" src="/images/whats-my-xenom-score/03.png" alt="XENOM score calculator using existing workout results" /></figure>

<p>I'll be refining this calculator as we learn more about benchmarks. I'd like to add a division estimate to help folks decide what track to compete under.</p>

<h3>AI Coach</h3>

<p>Next version: I'd like to try feeding this through LLM asking it to reason as a coach. Coach doesn't just run formulas — they read between the lines. They notice you've been logging at 70% for two months, that your shoulder-heavy movements have quietly disappeared from your logs, that your snatch PR is from 2022 but you've been crushing Isabel lately. That kind of contextual reasoning is hard to encode in rules.</p>

<p><a href="mailto:hello@przilla.app">Drop me a note</a> if you have thoughts on this or just found it useful.</p>

<div class="footnote" id="footnote-1"><sup>1</sup>
<p>Many HYROX calculators do a very simple math where they ask you to put time of each station.</p>
</div>

<div class="footnote" id="footnote-2"><sup>2</sup>
<p>For more on strength and submaximal strength, see coach Shawn's recent <a href="https://railroadcrossfit.com/what-is-strength-and-who-is-strong/">excellent writeup on this</a>.</p>
</div>]]></content><author><name>kangax</name></author><category term="fitness" /><summary type="html"><![CDATA[XENOM scores athletes across 10 fixed workouts. Estimating your total before you ever compete, the way HYROX athletes estimate a race they have never run.]]></summary></entry><entry><title type="html">Reflections on training, 2025 → ‘26</title><link href="https://perfectionkills.com/reflections-on-training-2025-26/" rel="alternate" type="text/html" title="Reflections on training, 2025 → ‘26" /><published>2026-01-24T00:00:00+00:00</published><updated>2026-01-24T00:00:00+00:00</updated><id>https://perfectionkills.com/reflections-on-training-2025-26</id><content type="html" xml:base="https://perfectionkills.com/reflections-on-training-2025-26/"><![CDATA[<h2>Reflections on training, 2025 → '26</h2>

<h3>Looking back</h3>

<p>A big shift last year has been towards <strong>skill learning</strong> and widening <strong>movement repertoire</strong>. Now that I'm 40, I can't quite recover as fast after going hard on WODs. I've also grown weary of constantly chasing higher strength numbers: squat, deadlift, clean. Most of those have plateaued years ago and now need a dedicated multi-month cycle to make meaningful progress<sup id="footnote-anchor-1"><a href="#footnote-1">1</a></sup>. And so I found that learning new movements and practicing existing ones is one way to improve fitness while giving body a break. It's also fun and rewarding as you see your quantity and quality go up.</p>

<h3>Testing ↔ Training ↔ Recovery</h3>

<p>I'm now increasingly seeing my time in the gym as existing in one of 3 buckets.</p>

<p>I'm <strong>testing</strong> if I perform a for-score workout and push myself to my max or near-max. This is the most fun one, of course; it's rewarding to end up in top 3 on a leaderboard. But it also comes with the highest cost. For muscular stamina workouts like Cindy or Eva, you're very sore for the next few days due to the density of work (volume/time). For near-max lifts, your CNS is fried and joints take a beating.</p>

<p>I'm <strong>training</strong> if I perform a prescribed body of work at a specific, usually RPE5-8 intensity. Training could be timed but often isn't. 40min EMOM with ~30sec rest each min is a good example. So is doing 10 sets of 3 snatches at ~75% with 1-2min rest. These are usually less fun, but they need to constitute most of the time.</p>

<p>I'm <strong>recovering</strong> if I consciously limit my work to a very low intensity and/or perform low-impact movements. This is where Zone 2 training comes in, such as spending 45-90min on a bike or a rower at ~130bpm (for my age). I managed to make these type of days less boring by throwing skill learning into the mix; I would do some handstand walks every 250-500m on a rower, or do 1-2 ring muscle-ups. Anything that's ~20% of your capacity and ideally bodyweight-only.</p>

<p>Ideal week then looks like 1-2 days of testing, 3-4 days of training, and 1-2 days of recovery. This looks easy on paper but tends to be a very delicate balancing act and is quite difficult to get <em>perfectly</em> right.</p>

<p>The moment I push my testing a bit too much, I get injured. If I don't include recovery, I stop progressing or quickly overtrain. Another takeaway: just because I can ace that workout and beat my (or other) scores, doesn't mean I should.</p>

<h3>Old dog, new tricks</h3>

<p>Last year I've probably spent 30% on each of the following:</p>

<ul>
<li><p>High level gymnastic skills — <strong>Ring Muscle Ups</strong> and <strong>Handstand Walk</strong></p></li>
<li><p>Zone 2 training</p></li>
<li><p>Longer/endurance-heavy WODs</p></li>
</ul>

<p>RMU's and HSW were the last two pieces of the CrossFit puzzle. It was what I needed to be able to RX 99% of WODs in a typical class.</p>

<p>I went from being able to do 2-3 muscle-ups to hitting 10 in a row, being able to do 4-5 on any given day, and under fatigue during WODs. I even accidentally progressed to 2-3 strict ones! Handstand walks were also something I struggled to not fall just a few feet in, and now I can almost always go 50ft, confidently. The power of practice truly can not be underestimated: all I did was show up and practice every week, sometimes once, sometimes twice. In that regard, the year has been a success.</p>

<p>The other part was focusing on improving my endurance: weekly zone 2 training and grinding out &gt;30min WODs. The year ended on a good note as I finally completed Eva RX at 44:04. Earlier in 2025, I've done it with 24kg bell in 40min. Even if I didn't improve in my fitness, it feels like my mental fortitude has gotten better with these grueling long workouts<sup id="footnote-anchor-2"><a href="#footnote-2">2</a></sup>; I've learned to suffer for longer and under more fatigue.</p>

<p>It's hard to tell if my Zone 2 training is having an actual impact on VO2 max but it certainly feels like I can sustain on med/long-duration WODs better. Running also feels the best it ever has.</p>

<h3>Advanced lifter curse</h3>

<p>I walked into our box yesterday and saw a "Q1 2026 Goals" board. Someone wanted to hit a 210kg squat. Below were: "3 muscle-ups", "15ft handstand walk" and a "kipping pull-up". Last year I wrote "10 RMU" and "50ft handstand walk". Few years ago I would have written 365lb (2xBW) squat or 185lb (1xBW) shoulder press; now all conquered.</p>

<p>I starred at the board, unsure about my next goal.</p>

<p>I've hit most of the things written on it and much more. It wasn't about feeling superior; I was reminded of how far I've come and how many are still on their way to reach goals that I've conquered long ago.</p>

<p>Do I really need to work towards hitting 15 consecutive RMUs? Or 2x50ft handstand walks, which would be a natural progression. I've hit the point of <strong>diminishing returns</strong>. Being able to walk over obstacles is a semifinals territory and isn't something I'd ever need in a regular class. To play devil's advocate, hitting strict ring muscle-up isn't something you'd need in a class either! Yet I wanted to be able to do it as a pure form of incredible upper body strength and control.</p>

<p>As I'm nearing 15 years into my fitness journey, all of this feels like an "advanced lifter" curse. When you've reached 90% performance on most things, the remaining 10% start to take a lot more time and the progress slows down to a crawl.</p>

<figure><img width="1600" height="745" loading="lazy" src="/images/reflections-on-training-2025-26/01.png" alt="Spreadsheet of CrossFit movement standards by level" /></figure>

<p>One option is to keep pushing towards Level 3 and 4 on this CrossFit standards sheet I've been using for the last few years. But while most of the Level 3 are achievable with a few month of dedicated practice, I find that many of the Level 4 would take years.</p>

<p>Genetics aside, the reason I hit 2.5xBW deadlift was because I powerlifted for a few years. Similarly, the only way to run 5min mile is to be… a runner. To go from my current 6:30 best (and now, likely, closer to 7:15), I'd need to start running 2-3 times a week, build capacity over a year, slowly improve speed, slowly adopt my body to volume, train the body to go that fast for that "long". You don't just run 5 min mile. You only do that if <strong>you're a runner</strong>. And so the question then becomes: do I want to put all my eggs in one basket? How would running 2-3 times a week affect my strength, my muscular endurance, my gymnastic proficiency, and other aspects of fitness?</p>

<h3>Maintenance and aging</h3>

<p>Biological age matters more than chronological one<sup id="footnote-anchor-3"><a href="#footnote-3">3</a></sup>, but it's hard not to think about turning 40. Relatively, my body has less work capacity than an average 30 yo athlete of the same "level". CrossFit Open also acknowledges it, putting me in a 40-45 bracket. Should the goal this year (and going forward) then just be to <strong>maintain existing fitness</strong> and avoid major regressions?</p>

<p>I'm already doing that intuitively. I'd make sure to squat heavy at least every other week: I'm way below my all-time-best 365lb but even hitting 300lb right now feels like a good baseline and puts me in the top 5 in the class. I might not be able to do 100 dubs like I did at one point, but comfortably banging out 30-50 goes a long way in any workout.</p>

<p>I realized that reaching a certain goal serves as an <strong>overextension that builds a ceiling</strong>. Hitting 10 RMU's last year was a nice goal but the ultimate "friend we've made along the way" was the fact that 3-5 started feeling like nothing. To go back to running analogy, training for a 5 min mile would create a baseline where running 7min mile feels like a child's play. I'd just need to keep that baseline by running once or twice weekly.</p>

<h3>CrossFit Open</h3>

<p>I ended up putting "Open 2026, <strong>do better than last year</strong>" on the whiteboard. It's a fun short-term goal that would certainly push my engine further, but I'm very much aware that Open can be easily gamed and is just a subset of overall fitness and what CrossFit wants you to achieve. Next two months I'll be focusing on frequent practice of top 5 open movements that are skill-sensitive: dubs, thrusters, muscle-ups, c2b, and rowing. I will also double-down on nausea-like WODs that Open is famous for.</p>

<h3>Engine</h3>

<p>I think if I were to pick one goal this year, it would be to continue building the engine (= endurance). I've built strength over many years and I've always been good at gymnastics (thanks to yoga since early age). Endurance is still lacking so I need to keep hammering &gt;20 min WODs, more running, more hero ones.</p>

<h3>Self-regulation</h3>

<p>Earlier last year I did Vipassana and it was pretty life-changing. I've noticed a lot more calm during intense workouts where the feeling of "dying" (zone 4-5) still feels awful but at least it doesn't provoke as much of a panic state as it would before. I'm able to sustain in red for longer.</p>

<p>One of the intentions for this year is to maintain my meditation practice as it helps in both, "life" and when on the training floor.</p>

<div class="footnote" id="footnote-1"><sup>1</sup><p>Although I did finally hit 185lb (1xBW) snatch this year!</p></div>
<div class="footnote" id="footnote-2"><sup>2</sup><p>Another one I'm particularly proud of was 8 rounds of: 5 RMU, 7 DL (225/155), 5 Toes Through Rings, 7 Double KB Snatches (53/35), 5 HSP which I RX'd in 33:13</p></div>
<div class="footnote" id="footnote-3"><sup>3</sup><p>Whoop says I'm 4 years younger and Function Health says I'm only 30yo</p></div>]]></content><author><name>kangax</name></author><category term="fitness" /><summary type="html"><![CDATA[Reflections on training, 2025 → '26]]></summary></entry></feed>