<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title><![CDATA[Jeff Chen]]></title>
        <description><![CDATA[Jeff Chen]]></description>
        <link>https://jeffchen.dev</link>
        <generator>RSS for Node</generator>
        <lastBuildDate>Mon, 09 Feb 2026 17:49:27 GMT</lastBuildDate>
        <item>
            <title><![CDATA[2020 Track Season in Review]]></title>
            <description><![CDATA[2020's been a bad year in a lot of ways. I've been fortunate that I've been able to keep training throughout the year. Despite having no official track meets to attend and despite dealing with a couple injuries, I closed my 2020 track season faster and stronger than I've ever been before! Not only have my weight room numbers skyrocketed, I set PRs in every distance (60m-400m) I compete in!

In this post, I walk through my training, recovery, and competition in 2020, and gather learnings for next year.]]></description>
            <link>https://jeffchen.dev/posts/2020-Track-Season-Retro</link>
            <guid isPermaLink="false">/posts/2020-Track-Season-Retro</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Wed, 11 Nov 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2021 Goals]]></title>
            <description><![CDATA[New years are a time for both reflection and looking forward. I've never been good about resolutions—I'd inevitably forget or de-prioritize my resolutions as the year progressed. This was because I'd set my resolutions based on whatever whim I was pursuing at the time.

This year, for the first time, I followed a structured goal-setting process: I started with a set of 25 goals and whittled them down to a single goal across each of four axes of my life. Those domains are fitness, finance, mental, and social.

I designed each goal to be specific, realistic, and falsifiable. Each one also encompasses several goals from my original list as milestones or as indirect results of the root goal.

First up: my fitness goal for 2021!]]></description>
            <link>https://jeffchen.dev/posts/2021-Goals</link>
            <guid isPermaLink="false">/posts/2021-Goals</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 08 Jan 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2021 Predictions Review]]></title>
            <description><![CDATA[Now that it's 2022, I've scored my 2021 predictions. To get slightly bigger samples, I inverted the prediction and predicted probability of <50% predictions—e.g. "Democrats win both Georgia seats: 25%" became "Democrats do not win both Georgia seats: 75%" for scoring purposes.]]></description>
            <link>https://jeffchen.dev/posts/2021-Predictions-Review</link>
            <guid isPermaLink="false">/posts/2021-Predictions-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Tue, 04 Jan 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2021 Predictions]]></title>
            <description><![CDATA[Rules: unless otherwise specified, these predictions are for what will be true on 1/1/2022. I've redacted some predictions about my personal life and friends. Next year, I'll publish and score my results.]]></description>
            <link>https://jeffchen.dev/posts/2021-Predictions</link>
            <guid isPermaLink="false">/posts/2021-Predictions</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 27 Dec 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2021 Track Season Retrospective]]></title>
            <description><![CDATA[Another year, another track season. This was my 12th competitive season, and my second training by myself. The 2020 and 2021 seasons melted together for me—with COVID and without meets, I didn't take any time off in between. After my extended taper and after some time away from the track, I'm realizing just how beat down my body had been.

My last race of the season resulted in both a PR and injury—a mixed but mostly positive result. "Mixed but mostly positive" is an apt description for my entire season. Like I did last year, I'll reflect on the past season, both successes and failures, and apply my learnings to next season.]]></description>
            <link>https://jeffchen.dev/posts/2021-Track-Season-Retrospective</link>
            <guid isPermaLink="false">/posts/2021-Track-Season-Retrospective</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 07 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2022 Track Season Retrospective]]></title>
            <description><![CDATA[Track has been the most constant part of my life these past few years—through job changes, moves, and a global pandemic, I've hit the track and competed. This year, my preseason started all the way back in September of last year, and I didn't run my last race until the last day of July.

And I had a great season! I shaved two tenths off my wind-legal 100m (10.92->10.71) and more than a half second off my 200 (22.10->21.55)—these results, especially the 200, are well beyond my expectations for the year. I also managed to stay healthy during the competitive season (with one minor hamstring injury in October) for the first time in about a decade.]]></description>
            <link>https://jeffchen.dev/posts/2022-Track-Season-Retrospective</link>
            <guid isPermaLink="false">/posts/2022-Track-Season-Retrospective</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Wed, 17 Aug 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[2022]]></title>
            <description><![CDATA[At some point in our lives, as the story goes, the years start to blur together. As we get more settled in the rhythm of life, as our milestone events recede behind us, the distinction between any two years becomes less and less clear. And one day, we blink, and realize we've spent decades on cruise control.

I'm staving off this future as long as I can—and I did so successfully in 2022. Here's some of my highlights of the year:]]></description>
            <link>https://jeffchen.dev/posts/2022</link>
            <guid isPermaLink="false">/posts/2022</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Tue, 14 Feb 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[63 Tips for Better Workplace Communication for Software Engineers]]></title>
            <description><![CDATA[In college, I assumed that success in software engineering came from technical skills—that superstar programmers were those that could write the fastest/best/most code. But after entering the industry, I realized that smart software engineers are a dime a dozen. What sets engineers apart isn't technical ability but communication skills.

Communication is important because software engineers operate within a team and business. You can't just build what's beautiful; you need to build what's right for your company. If your project is falling behind schedule, you need to be able to communicate what's blocking you to potentially non-technical teammates. And of course, you need to establish rapport with your coworkers.

No set of tips can make somebody a good communicator—it's a skill that requires dedicated practice. I'm hoping, however, that the tips I've included below can help. I've collected them in my years as a software engineer and engineering manager. They're generally organized by communication medium. Some of these tips apply to organizations and others to individuals, though most apply to both.

First up, some general communication tips:]]></description>
            <link>https://jeffchen.dev/posts/63-Tips-For-Better-Workplace-Communication-For-Software-Engineers</link>
            <guid isPermaLink="false">/posts/63-Tips-For-Better-Workplace-Communication-For-Software-Engineers</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 15 Jan 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[A Taxonomy of Software Engineering Taxonomies]]></title>
            <description><![CDATA[Laddered

Engineering ability can be boiled down into a single "level". Levels are often based on both current ability and track record, and build on each other--a L4 engineer is expected to fulfill not only L4 expectations, but also those of L1-3. Levels are often used by management for titling and compensation bands. Levels can be either discrete or continuous, though in either case, despite the window dressing, they are often somewhat arbitrary.]]></description>
            <link>https://jeffchen.dev/posts/A-Taxonomy-of-Software-Engineering-Taxonomies</link>
            <guid isPermaLink="false">/posts/A-Taxonomy-of-Software-Engineering-Taxonomies</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 22 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[A Week of Self-coached Sprint Training]]></title>
            <description><![CDATA[I’ve been self-coached for a few years now; a couple spent just weight lifting, and the last two seriously competing in open & masters track meets. I’ve learned a lot, and continue to tweak my program based on how my body feels and my reading. A couple points about my training history and goals before digging in:

I’ve been sprinting competitively for over 15 years now, with a couple 1-2 year breaks along the way. There’s a lot of miles on these legs!

I have a long history of hamstring issues. The worst of them left me with permanent scar tissue, so I’m always careful to warm up and cool down appropriately. I’ll also shut down workouts early if I’m not feeling right.

I primarily compete in the 100m and 200m, though I’ll run 60s indoor and the occasional 400 if somebody dares me.

I’m no speed demon: my personal best, set this year, is 10.73. Last time I checked, that might just barely squeak in at the bottom of the top 1000 Americans.

With that, here’s a look at my training log from a recent week:]]></description>
            <link>https://jeffchen.dev/posts/A-Week-Of-Self-Coached-Training</link>
            <guid isPermaLink="false">/posts/A-Week-Of-Self-Coached-Training</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 10 Apr 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Activation Energy and Productivity]]></title>
            <description><![CDATA[I have lots of life goals, both short-term and long: I’d like to work on my side projects, become a better writer, read great books, run faster, get stronger... Yet I’ve always struggled to avoid the siren call of social media, video games, and other empty calorie activities.]]></description>
            <link>https://jeffchen.dev/posts/Activation-Energy-And-Productivity</link>
            <guid isPermaLink="false">/posts/Activation-Energy-And-Productivity</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 14 Nov 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[The Everyman's Superspike: Adidas Prime SP2]]></title>
            <description><![CDATA[This year, Adidas entered the superspike game with their Prime SP2. Their athletes found immediate success with the new spike, most notably 2022 world champions Noah Lyles and Shaunae Miller-Uibo. I recently managed to get my hands on a pair of SP2s and put them to the test.]]></description>
            <link>https://jeffchen.dev/posts/Adidas-Prime-SP2-Review-Everymans-Superspike</link>
            <guid isPermaLink="false">/posts/Adidas-Prime-SP2-Review-Everymans-Superspike</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 07 Oct 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Alpha GPC for Athletes: More Than You Wanted to Know]]></title>
            <description><![CDATA[Intro: what it is, what it purports to do]]></description>
            <link>https://jeffchen.dev/posts/Alpha-GPC-For-Athletes-More-Than-You-Wanted-To-Know</link>
            <guid isPermaLink="false">/posts/Alpha-GPC-For-Athletes-More-Than-You-Wanted-To-Know</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Mon, 20 Feb 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[April 2021 Review]]></title>
            <description><![CDATA[I'm writing this from Denver—I'm moving to Atlanta! We're driving across the country with a car full of stuff. Packing and moving has reminded me just how much stuff I've accumulated. Even after a few car loads of donations, we're still bringing a lot!

Goal Tracking

🟢 Get 1% faster. I ran a 200m time trial early in the month at 22.02. This is a little slower than I've run previously, but it was into a nasty headwind. I also managed a PR in the 30m fly at 2.92.

🟢 50% less discretionary spending. My spending in April has trended up, especially in the last couple of weeks, where I've been eating out with friends and on the road. That said, my total discretionary spending has still been 62% lower than my 2020 average spend!

🔴One hour of solitary free time a day. I'm not doing well.

🟢 Twice-weekly live conversations with friends. I managed another green month!]]></description>
            <link>https://jeffchen.dev/posts/April-2021-Review</link>
            <guid isPermaLink="false">/posts/April-2021-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 30 Apr 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Atlanta: First Impressions]]></title>
            <description><![CDATA[I moved to Atlanta two months ago; here are some disorganized impressions of Atlanta and the Southeast:]]></description>
            <link>https://jeffchen.dev/posts/Atlanta-First-Impressions</link>
            <guid isPermaLink="false">/posts/Atlanta-First-Impressions</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 27 Jun 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Monthly Review - August 2020]]></title>
            <description><![CDATA[This month, I've been really focused on work - we have a big launch coming very soon, so I've spent more hours than normal coordinating & building things for that.

To close my track "season", I was able to run time trials in the 100/200/400 with lifetime PRs in all of them!]]></description>
            <link>https://jeffchen.dev/posts/August-2020-Review</link>
            <guid isPermaLink="false">/posts/August-2020-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Mon, 31 Aug 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[August 2021 Review]]></title>
            <description><![CDATA[My time in Montana is coming to an end—I'll be spending the next few days camping in Glacier National Park, then heading back down to Atlanta. This past summer really was something special—Livingston and the whole state just have great vibes.

Goal Tracking

🟢 Get 1% faster. Not much to say here—I hit this goal and it's the offseason! Since preseason is coming up again, I'll probably change this goal next month.

🔴 50% less discretionary spending. I spent just 1.8% less this month than my 2020 average. In retrospect, expecting to hit this goal while in Montana was probably foolish—I've been way more lax about eating out and paying for experiences than normal.

🔴 One hour of solitary free time a day. Still not tracking this—clearly I'm not prioritizing this goal. A good lesson for next time.

🟡 Twice-weekly live conversations with friends. Managed this all but one week this month.]]></description>
            <link>https://jeffchen.dev/posts/August-2021-Review</link>
            <guid isPermaLink="false">/posts/August-2021-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Tue, 31 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Automatically Fixing Relative Imports with ESLint]]></title>
            <description><![CDATA[I was recently working in a fairly new React/TypeScript codebase that was growing quickly. Because of its rapid growth, it used the default of relative paths for all local imports. This was becoming a problem for developer experience: relative paths make it harder to reorganize files in a codebase, since the developer making that change will also need to update all of that file's imports.

Absolute imports were the answer—I needed to both set up TypeScript to support them and transform all of the project's relative imports into absolute ones.]]></description>
            <link>https://jeffchen.dev/posts/Automatically-Fixing-Relative-Imports-with-ESLint</link>
            <guid isPermaLink="false">/posts/Automatically-Fixing-Relative-Imports-with-ESLint</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 10 Oct 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Bay Area Open Tracks]]></title>
            <description><![CDATA[Last updated 12/1/2020

It's getting harder to find tracks to run on in the Bay Area. Here's a list of what's open (and what's not):]]></description>
            <link>https://jeffchen.dev/posts/Bay-Area-Open-Tracks</link>
            <guid isPermaLink="false">/posts/Bay-Area-Open-Tracks</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 13 Nov 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Be a Tryhard]]></title>
            <description><![CDATA[Popular culture doesn’t seem to value hard work and grit: what’s glamorized is either effortless excellence (really, just the image of effortless excellence—ask these paragons and you’ll find all of them put in the work) and intentional ineptitude. Favoring effortless excellence isn’t necessarily too bad, though if you ask and get a straight answer out of these paragons, you’ll find that all of them have put in the work.]]></description>
            <link>https://jeffchen.dev/posts/Be-A-Tryhard</link>
            <guid isPermaLink="false">/posts/Be-A-Tryhard</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 03 Apr 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Bitrot]]></title>
            <description><![CDATA[I've spent the last couple hours trying to rebuild my mood tracker—although notifications still work, opening the app throws the error "'mood' Is No Longer Available". I think this is because I last built the app a year ago, and apps installed with a paid developer account only last for a year. (Sidenote—it's ridiculously hard to find definitive information about this. Instead, I had to trawl through the Apple Developer Forums and Reddit to try to figure out what's going on.)]]></description>
            <link>https://jeffchen.dev/posts/Bitrot</link>
            <guid isPermaLink="false">/posts/Bitrot</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 04 Jul 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Body Composition For Sprinters]]></title>
            <description><![CDATA[What’s the lowest body fat percentage I can sustain without risking injury or losing strength? How much should I focus on hypertrophy? What’s my ideal competition body weight? How should I manage body composition throughout my season?

As a self-coached sprinter, I knew that body composition mattered. But I was overwhelmed by the complexity of the subject and the sheer quantity of often-contradictory information. After many hours of research and years of experience, I’m ready to cut through the noise and share my learnings. In this essay, you’ll learn:

What body composition is, why it matters, and how to measure it

Specific, research-backed targets for each body composition metric

Why feedback loops are the best way to improve body composition, and how to establish them]]></description>
            <link>https://jeffchen.dev/posts/Body-Composition-For-Sprinters</link>
            <guid isPermaLink="false">/posts/Body-Composition-For-Sprinters</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 05 Dec 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Boise]]></title>
            <description><![CDATA[Emily and I spent last October in Boise, Idaho. Our first few nights were downtown at The Grove Hotel, then rented an Airbnb close to BSU for the rest of the month. Overall, I was pleasantly surprised with Boise's liveliness, and I had a great time.]]></description>
            <link>https://jeffchen.dev/posts/Boise</link>
            <guid isPermaLink="false">/posts/Boise</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 05 Feb 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Brick by Brick]]></title>
            <description><![CDATA[One thing role-playing games get right about life is the concept of experience points. To get better at wood chopping, you need to... chop lots of wood. Just like in life—cook a lot and you'll probably get better at cooking. Of course, the fit isn't perfect—lots of Runescape characters are level 99, but not many people become master chefs or elite athletes.]]></description>
            <link>https://jeffchen.dev/posts/Brick-by-Brick</link>
            <guid isPermaLink="false">/posts/Brick-by-Brick</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 24 Oct 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[By the Numbers: My 2020]]></title>
            <description><![CDATA[I thought it'd be fun to take a look at some stats from 2020. Here they are:

Blog

23 new blog posts - check them out!

10,467 blog views

3,029 views on my most-viewed post

2 posts with more than 1,000 views (Why Clojure? and Garmin Watch Faces: Custom Fonts)]]></description>
            <link>https://jeffchen.dev/posts/By-The-Numbers-My-2020</link>
            <guid isPermaLink="false">/posts/By-The-Numbers-My-2020</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 01 Jan 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Estimating Gym COVID Risk]]></title>
            <description><![CDATA[In Boise, gyms are open! I visited Axiom Fitness the other morning. The facility was great, but I was pretty uncomfortable with the maskless environment. Below, I estimate my risk of catching COVID from a single gym session, and find that my risk of catching COVID from a single gym session is ~0.03%. With ~10 gym sessions remaining in my time in Idaho, my total risk of catching COVID specifically from the gym is 1 - (1 - risk\_per\_session)^10 = 0.003037839182, or about 0.3%. This is well within my personal risk tolerance, so I decided to buy a single-month pass!

This page is interactive: try estimating risk for your own gym sessions!]]></description>
            <link>https://jeffchen.dev/posts/COVID-Gym-Risk</link>
            <guid isPermaLink="false">/posts/COVID-Gym-Risk</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Thu, 22 Oct 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Calculating World Athletics Scoring Table Coefficients]]></title>
            <description><![CDATA[I'm often asked by non-athletes what my mile time is when I tell them I'm a sprinter. Although there's no true comparison, I've typically used World Athletic's scoring tables to get a relatively close mark. For example, my 100m PR of 10.71 and a mile time of 4:08.41 are both worth 974 points. I've used this calculator based off of the 2017 tables for a long time, but the calculator hasn't been updated with the 2022 data.

So, naturally, I built my own. Check it out if you haven't already; the remainder of this post will dive into my methodology for parsing the World Athletics PDFs and fitting a curve to each category/gender/event tuple.]]></description>
            <link>https://jeffchen.dev/posts/Calculating-World-Athletics-Coefficients</link>
            <guid isPermaLink="false">/posts/Calculating-World-Athletics-Coefficients</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Tue, 26 Apr 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Co-opting addictive media for good]]></title>
            <description><![CDATA[The dangers of social media and addictive technologies are well-documented. Reactions generally fall into two camps—accepting defeat or attempts at teetotalism. Both of these methods are flawed. But there’s a third approach: use the addictiveness for good.]]></description>
            <link>https://jeffchen.dev/posts/Co-opting-Addictive-Media-For-Good</link>
            <guid isPermaLink="false">/posts/Co-opting-Addictive-Media-For-Good</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 17 Apr 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Cold Weather Sprinting]]></title>
            <description><![CDATA[I moved to Montana this summer. Now, in the dead of winter, I'm paying the price. I thought I'd run in the cold before—I've written about the relationship between temperature and speed. But Montana winters hit different—I'm often outside in single-digit weather with wind chill down into the negative teens. But a man's gotta work out, no matter the temperature, so I've done what I needed to do to work out and get fit. Here's what's worked for me so far:]]></description>
            <link>https://jeffchen.dev/posts/Cold-Weather-Sprinting</link>
            <guid isPermaLink="false">/posts/Cold-Weather-Sprinting</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Tue, 24 Jan 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Monthly Review - December 2020]]></title>
            <description><![CDATA[It's the end of the year! I've had a wonderful time during my two weeks off, and I hope you did too! Here's what my month looked like:]]></description>
            <link>https://jeffchen.dev/posts/December-2020-Review</link>
            <guid isPermaLink="false">/posts/December-2020-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Thu, 31 Dec 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Detecting Widows in React]]></title>
            <description><![CDATA[I've been working with fixed-width containers in React recently, so I've been able to focus on typesetting. One problem I've had is noticing widows in paragraph text as I change copy and styling. (widow is apparently an overloaded term in typesetting -- here, I mean a single word that overflows into a new line, not a single line overflowing into a new page.) I ended up building a React component that automates widow detection - let's dig in!]]></description>
            <link>https://jeffchen.dev/posts/Detecting-Widows-In-React</link>
            <guid isPermaLink="false">/posts/Detecting-Widows-In-React</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Thu, 08 Aug 2019 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[ETL from Datomic to BigQuery]]></title>
            <description><![CDATA[This post is cross-posted from Ladder's engineering blog. Shout out Ladder for forcing me to write something!

At Ladder, we use Datomic as our primary data store and Google BigQuery as our data warehouse. We've iterated on how we send data from Datomic to BigQuery - starting from a nightly job dumping every entity and ending with a streaming solution with just seconds of latency. In this post, we'll walk through bucketing Datomic entities into BigQuery tables, transforming entities into rows, and using one of Datomic's superpowers to stream changed entities into BigQuery.]]></description>
            <link>https://jeffchen.dev/posts/ETL-From-Datomic-To-BigQuery</link>
            <guid isPermaLink="false">/posts/ETL-From-Datomic-To-BigQuery</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Mon, 05 Aug 2019 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Effect of Lane Draw in 200m Sprinters]]></title>
            <description><![CDATA[Want to convert your own times? Try the 200m Lane Draw Converter →

There's a growing consensus within the sprinting world that 200- and 400-meter sprinters have an advantange in the outer lanes. Famously, Wayde van Niekerk ran his world record 400m out of lane 8, and Karsten Warholm is known for preferring lane 7.

Surprisingly for such a data-driven culture, there's almost nothing in the current literature to back this up. So, using data from Diamond League results from 2015-2021, I estimated the effect of lane assignment on elite male sprinters in the 200m, and found that the advantage per lane was about 0.018 seconds—meaning that outdoor 200m sprinters in lane 9 have an advantage of 0.14s over those in lane 1.]]></description>
            <link>https://jeffchen.dev/posts/Effect-of-Lane-Draw-In-200m-Sprinters</link>
            <guid isPermaLink="false">/posts/Effect-of-Lane-Draw-In-200m-Sprinters</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Tue, 25 Jan 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Failure]]></title>
            <description><![CDATA[Most of the posts on this blog are about success.
I write about my PRs, my wins, and my accomplishments.
I write about the things that I'm proud of.

When I write about my failures, I write about setbacks.
I write about how they are just temporary roadblocks that make my eventual success that much sweeter.

But sometimes failure is just failure.]]></description>
            <link>https://jeffchen.dev/posts/Failure</link>
            <guid isPermaLink="false">/posts/Failure</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Mon, 24 Jul 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Februrary 2021 Review]]></title>
            <description><![CDATA[Another month in quarantine. It looks like there's light at the end of the tunnel, and earlier than I had previously thought! Despite everything, the US has been by far the most effective country at getting shots in arms. Here's hoping that Fauci's right when he says that the general public will start getting vaccinated by the end of April! On to the review:

Goal Tracking

🟢 Get 1% faster. Training's been going pretty well—I've set a couple PRs in training! I'm running a 100m and 200m time trial next week which should tell me a lot about where I am. The only danger I see on the horizon is injury—I've got a mild case of high hamstring tendinopathy what I'll have to be careful to manage properly.

🟢 50% less discretionary spending. Despite big spending for Valentine's Day (hotel, dinner, gift), I still managed to come in well under the bar I set for myself here. My February discretionary spending was 70% lower than my average monthly spend in 2020 (but significantly higher than January).

🔴One hour of solitary free time a day. Once again, I haven't managed to make time for this during the week. I haven't even been tracking this goal! In March, I'll make sure to keep track of whether or not I do this every day in Roam.

🟢 Twice-weekly live conversations with friends. 4/4 again in February! It's been great to catch up with some people I haven't talked to since before the pandemic.]]></description>
            <link>https://jeffchen.dev/posts/February-2021-Review</link>
            <guid isPermaLink="false">/posts/February-2021-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 28 Feb 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Freelap Tips]]></title>
            <description><![CDATA[I bought a Freelap BT112 kit earlier this year. Now, I use it for almost every track workout - it's great for getting instant feedback on every single rep. That said, I had some trouble getting my Freelap to consistently record times. Some of my initial workouts recorded less than 50% of my reps! Here are some tricks I've picked up to get all of my times recorded accurately:]]></description>
            <link>https://jeffchen.dev/posts/Freelap-Tips</link>
            <guid isPermaLink="false">/posts/Freelap-Tips</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Wed, 14 Oct 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Garmin Watch Faces: Custom Fonts]]></title>
            <description><![CDATA[I recently spent some time developing a custom watch face for my Garmin Forerunner 245. Because I was mimicking the Apple Watch Nike+ watchface, I needed to import a custom font face for the numbers. Unfortunately, Garmin doesn't make importing fonts easy, especially on Macs. Here's how I worked around Garmin's limitations to build my watch face!]]></description>
            <link>https://jeffchen.dev/posts/Garmin-Watch-Faces-Custom-Fonts-On-MacOS</link>
            <guid isPermaLink="false">/posts/Garmin-Watch-Faces-Custom-Fonts-On-MacOS</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 18 Dec 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Get a Hobby]]></title>
            <description><![CDATA[I think one of the most predictive features for personal happiness is whether you have high-quality hobbies. My friends and acquaintances with hobbies seem consistently happier and more fulfilled than those without, independent of other factors like job satisfaction, financial success, and physical health.]]></description>
            <link>https://jeffchen.dev/posts/Get-A-Hobby</link>
            <guid isPermaLink="false">/posts/Get-A-Hobby</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 05 Sep 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Hello, Vesta]]></title>
            <description><![CDATA[My first day at Vesta was three weeks ago—long enough for me to have some initial thoughts about joining.]]></description>
            <link>https://jeffchen.dev/posts/Hello-Vesta</link>
            <guid isPermaLink="false">/posts/Hello-Vesta</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 17 Oct 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How Much Do Genetics Matter in Sprinting?]]></title>
            <description><![CDATA[Genetics clearly influence sprint performance—but by how much? There are several ways of answering this question. First, we can look for specific genetic variants that have an impact on performance. Second, we can estimate the heritability of speed or speed-related traits like muscular strength, height, and body type with twin and family studies. Finally, we can analyze the demographics of elite and sub-elite sprinters.

Genetic variants

Most of the literature focuses on two specific mutations: the ACTN3 R557R/X and ACE I/D variants.

ACTN3

ACTN3 encodes the α-actinin-3 protein, which is mostly restricted to Type II (fast-twitch) muscle fibers. Humans with the ACTN3 557XX genotype have no α-actinin-3 at all, and in fact appear to have a higher proportion of Type I (slow-twitch) muscle fibers than ACTN3 557RX or ACTN3 557RR humans. The obvious hypothesis, then, is that 577RR athletes should be better sprinters than 577XX athletes because of the existence of α-actinin-3 and a higher proportion of fast-twitch muscle fibers.]]></description>
            <link>https://jeffchen.dev/posts/How-Much-Do-Genetics-Matter-in-Sprinting</link>
            <guid isPermaLink="false">/posts/How-Much-Do-Genetics-Matter-in-Sprinting</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 17 Jul 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Infrastructure & Business Monitoring]]></title>
            <description><![CDATA[At Ladder, our approach to observability and monitoring has matured a lot over the three years I've been part of the team. One distinction that we've started to draw is the difference between infrastructure and business monitoring. To explore that distinction and how a company's monitoring systems might evolve over time, let's consider the hypothetical company Stairway, a hot new insurtech focusing on longevity insurance.]]></description>
            <link>https://jeffchen.dev/posts/Infrastructure-And-Business-Monitoring</link>
            <guid isPermaLink="false">/posts/Infrastructure-And-Business-Monitoring</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 20 Mar 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[InstantDB & Tanstack Router Loaders]]></title>
            <description><![CDATA[I've been playing with InstantDB and Tanstack Router recently.
InstantDB exposes a hook useQuery to fetch data, with a fairly typical { data, error, isLoading } return value.

Using useQuery directly in page components means that the component has to handle loading and error states directly, instead of using pendingComponent and errorComponent in the router.

One naive approach is to use db.queryOnce inside a data loader.
This works, but means that the component will not be aware of any updates to the data—InstantDB's most important feature.

Instead, we can combine db.queryOnce and db.useQuery to 1) fetch any initial data in the loader, and 2) use db.useQuery to subscribe to updates in the component:]]></description>
            <link>https://jeffchen.dev/posts/Instant-DB-Tanstack-Router-Loaders</link>
            <guid isPermaLink="false">/posts/Instant-DB-Tanstack-Router-Loaders</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Thu, 24 Jul 2025 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Interview More]]></title>
            <description><![CDATA[When's the last time you looked around for a new job? If the answer is "more than a year ago", you're doing yourself a disservice. Even if you're happy in your current role, simply looking around offers many benefits.]]></description>
            <link>https://jeffchen.dev/posts/Interview-More</link>
            <guid isPermaLink="false">/posts/Interview-More</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 14 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[JOTA: syncing MFA app for Apple devices]]></title>
            <description><![CDATA[Multi-factor authentication is becoming increasingly prevalent. Many companies' information security policies require employees to use MFA when available—and it's just good practice.]]></description>
            <link>https://jeffchen.dev/posts/JOTA-Syncing-MFA-App-For-Apple-Devices</link>
            <guid isPermaLink="false">/posts/JOTA-Syncing-MFA-App-For-Apple-Devices</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 19 Sep 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Monthly Review - January 2021]]></title>
            <description><![CDATA[After a relaxing holidays, I'm back and at it in 2021! Since I formalized my goals for 2021, my monthly reviews will include goal tracking as well.

Goal Tracking

🟢 Get 1% faster. It's only January, but I feel really good about this goal. The next couple months of training will be about rounding into shape by tweaking form and pushing my speed endurance. It should translate fairly easily into faster 100 and 200m times.

🟢 50% less discretionary spending. My discretionary spending in January was actually down 91% compared to 2020. I don't think this is sustainable (in particular, restaurants reopening means my food spending will probably go up), but it's a great start to the new year!

🔴 One hour of solitary free time a day. I've only come close to this goal on weekends. I haven't done a good job prioritizing free time during the week.

🟢 Twice-weekly live conversations with friends. Somewhat surprisingly, I'm 4/4 in January! About half of these were serendipity—I'll have to make my own serendipity and reach out more to keep this up in future months.]]></description>
            <link>https://jeffchen.dev/posts/January-2021-Review</link>
            <guid isPermaLink="false">/posts/January-2021-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 31 Jan 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Monthly Review - July 2020]]></title>
            <description><![CDATA[The biggest piece of news for the month: I moved out of SF into my parent's house in Dublin! With coronavirus & related precautions, urban areas no longer have network advantages over suburbs. While Emily and I think about where we want to move long-term (perhaps Denver or New York after coronavirus fades away), we're saving a bundle.

We're really grateful to have this option: both that our jobs allow us to work remotely during coronavirus and that my parents are willing & able to house both fo us while we ride out the storm.]]></description>
            <link>https://jeffchen.dev/posts/July-2020-Review</link>
            <guid isPermaLink="false">/posts/July-2020-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 01 Aug 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[July 2021 Review]]></title>
            <description><![CDATA[July was busy: we hosted my parents and some friends in Montana for the first two weeks, I traveled to Des Moines for the USATF Masters Championships, and I'm writing this on the way to Chicago for a bachelor party. With Delta on the rise and lockdowns restarting, this might have been my last chance to see friends in person for a while—I'm glad that I got my travel in now.

Goal Tracking

🟢 Get 1% faster. I ran a personal best of 10.79 in the 100m, achieving my goal of being 1% faster on the year!

🔴 50% less discretionary spending. I spent 12% more on discretionary things than my 2020 average. A big chunk of that is two flights and hotel stays in Des Moines and Chicago, but then again, my 2020 average includes travel too.

🟡 One hour of solitary free time a day. My work-life balance continues to be fairly good, and I've been spending more of my free time enjoying the outdoors and reading.

🟢 Twice-weekly live conversations with friends. This was mostly facilitated by friends and family visiting us in Montana, and myself traveling to Iowa and Illinois. I suspect next month will be somewhat harder.]]></description>
            <link>https://jeffchen.dev/posts/July-2021-Review</link>
            <guid isPermaLink="false">/posts/July-2021-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 31 Jul 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[June 2021 Review]]></title>
            <description><![CDATA[Just as I've settled into a pretty good groove in Atlanta, I spent the past few days driving across the country again, this time to Livingston, Montana where I'll be spending the next two months! It's the best time of year to be in Montana, and we absolutely loved it when we visited neighboring Wyoming last fall.

Goal Tracking

🟡 Get 1% faster. I raced once in June—a 100 in a rainy 11.05. I only have one more chance this season to set a big PR, at the USATF Masters Outdoor Championships in a few weeks. I have my taper planned out—I'm confident that weather permitting, I'll have some great races.

🔴 50% less discretionary spending. I spent 22% less on discretionary things than my 2020 average. It's been death by a thousand cuts—I've just been spending more on little things. Hopefully I do better in July.

🔴 One hour of solitary free time a day. Despite my work-life balance being better than it's been in a while, I haven't been spending my extra time very wisely. Mostly it's been mindless browsing.

🟢 Twice-weekly live conversations with friends. Back into the green!]]></description>
            <link>https://jeffchen.dev/posts/June-2021-Review</link>
            <guid isPermaLink="false">/posts/June-2021-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Wed, 30 Jun 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Legibility in Software Engineering]]></title>
            <description><![CDATA[The central concept in James C. Scott's Seeing Like a State is legibility, and how states' desire to make their societies more legible often leads to disaster. Others have detailed the main points of Seeing Like a State far better than I could—please start with those three if you're not familiar (or just read the book, which is excellent!)]]></description>
            <link>https://jeffchen.dev/posts/Legibility-in-Software-Engineering</link>
            <guid isPermaLink="false">/posts/Legibility-in-Software-Engineering</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 28 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Listen More]]></title>
            <description><![CDATA[Managers and leaders often fall into the trap of drowning out their reports' voices with their own. Almost everybody has dealt with or will deal with a micromanagey boss at some point in their career; the loud-mouthed, anal, pointy-haired boss is a stereotype for a reason. Loud leaders cause all sorts of problems for their organization:]]></description>
            <link>https://jeffchen.dev/posts/Listen-More</link>
            <guid isPermaLink="false">/posts/Listen-More</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 29 May 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[March 2021 Review]]></title>
            <description><![CDATA[I'm getting in right at the buzzer here, so no thoughts about the month.

Goal Tracking

🟢 Get 1% faster. I hit PRs in both of my time trials! I managed 10.73 for the 100m and 21.85 for the 200m. I'm so close to hitting my goal of being 1% faster (10.69 in the 100m and 21.73 i the 200m), and it's still pretty early in the year.

🟢 50% less discretionary spending. My March discretionary spending was 87% lower than my average monthly spend in 2020. Looking good!

🔴One hour of solitary free time a day. I did manage my sub-goal from last month of keeping track of my free time. Unfortunately, outside of weekends, I've managed a single hour of free time (maybe two, if you include the hour I'm writing this post in).

🟢 Twice-weekly live conversations with friends. 4/4 again! I remain surprised at how this goal has gone—maybe I should have been more ambitious.]]></description>
            <link>https://jeffchen.dev/posts/March-2021-Review</link>
            <guid isPermaLink="false">/posts/March-2021-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Wed, 31 Mar 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Markdown Image Captions]]></title>
            <description><![CDATA[Although HTML lets developers define \<figure> elements with images and captions, Markdown doesn't provide a built-in syntax for it. Instead, authors need to insert raw \<figure> HTML elements into their Markdown files. This is pretty painful - it breaks up the flow of Markdown files and is a non-starter for non-developers. This post details an alternative: by writing a remark plugin, we can extend Markdown's syntax to support image captions!]]></description>
            <link>https://jeffchen.dev/posts/Markdown-Image-Captions</link>
            <guid isPermaLink="false">/posts/Markdown-Image-Captions</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Wed, 25 Nov 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[May 2021 Review]]></title>
            <description><![CDATA[My first month in Atlanta has been a blast: I drove across the country, competed in my first races in 15 months, met some friends in person for the first time in a long time, and am writing this from Charleston where I'm spending Memorial Day!

I'm definitely enjoying the change of environment and pace; hopefully it's not just a honeymoon period.

Goal Tracking

🟡 Get 1% faster. I ran a FAT PR of 10.92 in my first race back, then 10.93 two weeks later. Unfortunately, it looks like Freelap times don't translate to FAT+0.15: the difference seems more like 0.35 seconds. That said, those PRs were set after hard training weeks: I think I have a lot of headroom with a good peaking cycle and some minor technical cleanup.

🔴 50% less discretionary spending. I expected to go red this month, and did. We're buying lots of furniture, spending time in fancy hotels, and generally making our first month in Atlanta a month to remember. My spending this month was 215% of my average spending from last year.

🟡 One hour of solitary free time a day. I'm still not doing a great job of tracking this, but my work-life balance has significantly improved since moving to Atlanta. I don't start my workday until around 11AM, and I've managed to keep a strict end-of-work time of 7PM. That gives me plenty of time to myself on Tuesdays an Thursdays (when I'm not doubling up at the track and gym).

🟡 Twice-weekly live conversations with friends. I haven't really been focusing on this goal. Even so, I managed to hit it every week but this past one. Next month, I'll pay more attention and get this back into the green!]]></description>
            <link>https://jeffchen.dev/posts/May-2021-Review</link>
            <guid isPermaLink="false">/posts/May-2021-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Mon, 31 May 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Measuring Bundle Sizes with Next.js and GitHub Actions, Part 2]]></title>
            <description><![CDATA[I wrote Part 1 of this post back in February, demonstrating how to measure Next.js bundle sizes with GitHub Actions. Today, I'll walk through how to show a bundle size diff against master:]]></description>
            <link>https://jeffchen.dev/posts/Measuring-Bundle-Sizes-With-Next-js-And-Github-Actions-Part-2</link>
            <guid isPermaLink="false">/posts/Measuring-Bundle-Sizes-With-Next-js-And-Github-Actions-Part-2</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 15 May 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Measuring Bundle Sizes with Next.js and GitHub Actions]]></title>
            <description><![CDATA[Measuring your Javascript bundle size is an important way to keep client load times low. These days, load times matter for more than just user experience: load times can affect SEO. In this article, I'll share my workflow for measuring this website's bundle size with every change that I make!

Update 5/21: I wrote a Part 2 that details how to diff your bundle sizes against master. Check it out!]]></description>
            <link>https://jeffchen.dev/posts/Measuring-Bundle-Sizes-With-Next-js-And-Github-Actions</link>
            <guid isPermaLink="false">/posts/Measuring-Bundle-Sizes-With-Next-js-And-Github-Actions</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 26 Feb 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Midlife Crises]]></title>
            <description><![CDATA[Why do people have midlife crises? The term itself was only coined in 1965—it appears to be a phenomenon of modern life. Here's my unfounded hypothesis: midlife crises arise when a person's self-concept of growth meets the cold water of reality.
This model explains some stereotypical midlife-crisis behavior like switching careers and buying expensive things. It explains why quarter-life crises have become increasingly common. It even hints at which sets of people are more likely to experience crises.]]></description>
            <link>https://jeffchen.dev/posts/Midlife-Crises</link>
            <guid isPermaLink="false">/posts/Midlife-Crises</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 12 Feb 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Most Decisions are Reversible]]></title>
            <description><![CDATA[Making decisions can be nerve-wracking! The scariest decisions are those that are impactful and final. Impact is obvious—choosing a career path is a lot more impactful that picking out your clothes for the day and obviously contributes to a decision's importance. But reversibility matters too—it's a lot easier to dip your toes in the water than to dive in head-first.
I think many people (including me) mistakenly assume that decisions are less reversible than they actually are. For example, switching careers or moving to a new city are both choices that seem final at first glance.]]></description>
            <link>https://jeffchen.dev/posts/Most-Decisions-Are-Reversible</link>
            <guid isPermaLink="false">/posts/Most-Decisions-Are-Reversible</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 05 Mar 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[My 2020 California Ballot]]></title>
            <description><![CDATA[It's election time! I like to ~~argue~~talk about politics, and friends have told me that they don't always know what I actually believe. I thought I'd share my ballot to put my money where my mouth is! While I'm in Boise this month, I'm registered to vote in Dublin, California.

According to this political compass site, I lean economic-left, social-libertarian:



I identify most closely with the Democratic party - if forced to choose based solely on party affiliation, I'll take the Democrats every time.

Scott Alexander of Slatestarcodex fame makes a compelling argument against California propositions, so, like him, I have an initial bias towards voting "No" on propositions.

This election cycle, I care most about:

A return to political normalcy. Over the last decade, politics has grown increasingly partisan - which may be a rational strategy.

Effective COVID response:

We should have national guidelines backed by science, but policymaking should reside with state & local authorities who can respond more effectively. This is the whole point of federalism!

We need continuing economic stimulus - of course pumping money into the economy isn't ideal, but desperate times call for desperate measures. We should be primarily focused on short-term recovery.

Now, on to my ballot!]]></description>
            <link>https://jeffchen.dev/posts/My-2020-California-Ballot</link>
            <guid isPermaLink="false">/posts/My-2020-California-Ballot</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 23 Oct 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[My Sleep Stack]]></title>
            <description><![CDATA[Sleep is a competitive advantage: good sleep is associated with improved short and long-term memory, muscle synthesis, and muscle recovery, while sleep deprivation impairs cognitive performance and increases injury risk. Said differently: how much money and time would you spend on a panacea that significantly improves both mental and athletic performance?

Because sleep is so important, I've assembled a stack of habits and tools for measuring and improving my sleep quality:]]></description>
            <link>https://jeffchen.dev/posts/My-Sleep-Stack</link>
            <guid isPermaLink="false">/posts/My-Sleep-Stack</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 19 Jun 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[My Track Progression]]></title>
            <description><![CDATA[I've competed in track events since 2006, and I thought it'd be fun to look back and see how I've progressed since then. All times are FAT unless otherwise noted.]]></description>
            <link>https://jeffchen.dev/posts/My-Track-Progression</link>
            <guid isPermaLink="false">/posts/My-Track-Progression</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 12 Mar 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Next Season]]></title>
            <description><![CDATA[After a disappointing end to my season, I spent some time reflecting on what went wrong and what I can do better this year.
The obvious acute answer is the back injury I suffered in March; the other obvious answer is the lack of racing between May and July to keep me sharp.]]></description>
            <link>https://jeffchen.dev/posts/Next-Season</link>
            <guid isPermaLink="false">/posts/Next-Season</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Thu, 17 Aug 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Monthly Review - November 2020]]></title>
            <description><![CDATA[I'm back in the Bay Area and back into my usual routine! Here's what happened this month:

Track & Fitness



Most of the tracks in the Bay are closed now. I've been running at Acalanes High, about 30 minutes away from my house. Here's an updated list of open tracks in the Bay Area!
I've settled into my offseason training routine: Mondays and Fridays are speed days while Wednesdays are focused on acceleration. I have to be extra careful with my warmups, since it's been cold in the mornings!]]></description>
            <link>https://jeffchen.dev/posts/November-2020-Review</link>
            <guid isPermaLink="false">/posts/November-2020-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Mon, 30 Nov 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[November 2021 Review]]></title>
            <description><![CDATA[November was... busy. December will be too.

Goal Tracking

🟡 Get 1% faster.

🔴 50% less discretionary spending. I spent about twice as much this month as my average in 2020—between holiday flights, a trip to New York, and Black Friday, I blew my spending record for the year out of the water.

🟡 One hour of solitary free time a day.

🟡 Twice-weekly live conversations with friends.]]></description>
            <link>https://jeffchen.dev/posts/November-2021-Review</link>
            <guid isPermaLink="false">/posts/November-2021-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Tue, 30 Nov 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Monthly Review - October 2020]]></title>
            <description><![CDATA[I've been in Boise all month! I'm enjoying my team here - I'll make sure to write about my time here after I return home to California. This month, I've been really motivated to write - I've published 5 blogposts! Hopefully the habit sticks.

At work, I'm devoting about half my time to recruiting. Running several interviews a day is pretty stressful for an introvert like me. If you are or know a software engineer looking for work, help me out by checking out our job description here!]]></description>
            <link>https://jeffchen.dev/posts/October-2020-Review</link>
            <guid isPermaLink="false">/posts/October-2020-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 01 Nov 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[October 2021 Review]]></title>
            <description><![CDATA[October was my first full month in Atlanta since May—but I still found a way to get out of town for a couple of weekends. We have more travel upcoming in November and December, which is exciting but also maybe a bit too much.

Goal Tracking

🟡 Get 1% faster. I tweaked my hamstring—time will tell how long I'm out, but it seems certain that my training will be affected for at least a couple weeks.

🔴 50% less discretionary spending. October's discretionary spending was 19% under 2020's average, buoyed by the couple travel weekends I had—a wedding in San Antonio, a weekend in Clayton, and upcoming travel to New York.

🟡 One hour of solitary free time a day.

🟡 Twice-weekly live conversations with friends.]]></description>
            <link>https://jeffchen.dev/posts/October-2021-Review</link>
            <guid isPermaLink="false">/posts/October-2021-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 31 Oct 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Postgres 13 Row-Level Security Performance]]></title>
            <description><![CDATA[I've recently been looking into various row-level security schemas for Postgres, and came across this excellent article benchmarking a few different architectures for row-level security. That post shows benchmarks for Postgres 10—three major versions ago.

I forked the repo (GitHub), upgraded to Postgres 13, and added a new architecture based on Carl Sverre's comment to see what's changed.

I ran each benchmark on a maxed 2019 16" MacBook Pro (2.4 8-core/64GB RAM), with 100 users and 10,000 total items. Notably, all of my results are significantly slower than what the original post achieved—I suspect this comes from running Postgres in Docker on MacOS, which has known disk performance issues.

RLS + ACL column

In this schema, ACLs are stored directly in columns on the secured table. Public items are handled as just another role.]]></description>
            <link>https://jeffchen.dev/posts/Postgres-13-Row-Level-Security-Performance</link>
            <guid isPermaLink="false">/posts/Postgres-13-Row-Level-Security-Performance</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 12 Sep 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Monotonic Last Modified Columns in Postgres]]></title>
            <description><![CDATA[Tracking a record's last modified time is a common application requirement. In Postgres, a typical implementation
might look like this, using a BEFORE UPDATE trigger on a last\_modified\_at column:This works in most cases, but breaks an assumption that's likely made by the application: last\_modified\_at isn't
necessarily monotonically increasing, even if the system clock is. This can cause problems when the application uses
last\_modified\_at as a watermark for processing changes.]]></description>
            <link>https://jeffchen.dev/posts/Postgres-Monotonic-Last-Updated-Columns</link>
            <guid isPermaLink="false">/posts/Postgres-Monotonic-Last-Updated-Columns</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Predicting 100m from Practice Results]]></title>
            <description><![CDATA[I built a tool that predicts your 100m time given practice results—go check it out! This post details the development process, including data parsing and training and validating the model.]]></description>
            <link>https://jeffchen.dev/posts/Predicting-100m-From-Practice</link>
            <guid isPermaLink="false">/posts/Predicting-100m-From-Practice</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 03 Nov 2024 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Principles for Athletic Performance]]></title>
            <description><![CDATA[Four years after leaving CMU a school record holder and captain of the track team, I'm faster and stronger than ever! With a few years of self-coaching and more than a decade competing in track meets, I've learned a lot about what works and doesn't for me as an athlete. This post sets down some high-level athletic principles I abide by. They apply no matter what sport you play or what goals you have. First, of course, you have to have a goal!]]></description>
            <link>https://jeffchen.dev/posts/Principles-For-Athletic-Performance</link>
            <guid isPermaLink="false">/posts/Principles-For-Athletic-Performance</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Mon, 02 Nov 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Programming Like a Pianist]]></title>
            <description><![CDATA[Tyler Cowen asks: "What is it you do to train that is comparable to a pianist practicing scales? If you don't know the answer to that one, maybe you are doing something wrong or not doing enough." I'm a software engineer, so let's answer that question for software engineers!

First, we need to figure out why pianists practice scales in the first place.]]></description>
            <link>https://jeffchen.dev/posts/Programming-Like-a-Pianist</link>
            <guid isPermaLink="false">/posts/Programming-Like-a-Pianist</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 19 Feb 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Recovering Lost Roam Notes]]></title>
            <description><![CDATA[This post dives deep into a scary data loss scenario - we'll cover identifying the data loss, investigating the root cause, and finally recovering the data.

This bug affected Readwise users who exported their highlights (both manually & automatically) to Roam on 10/27. If you are one of those users, you should contact Roam support & use my recovery code ASAP!]]></description>
            <link>https://jeffchen.dev/posts/Recovering-Lost-Roam-Notes</link>
            <guid isPermaLink="false">/posts/Recovering-Lost-Roam-Notes</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 30 Oct 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Rising Early]]></title>
            <description><![CDATA[As a baby I never wanted to go to sleep: I stayed alert until I was completely exhausted (and my parents were too)! In high school and college, I regularly stayed up past 2AM. But for most of my professional life, I've been an early riser. I started out of convenience: gyms are less crowded early. Even after those circumstances changed, I found enough benefits to waking up early that I kept the habit. These days, I'm awake well before 6AM (and in bed by 9PM) almost every day. Here's why I still do it:]]></description>
            <link>https://jeffchen.dev/posts/Rising-Early</link>
            <guid isPermaLink="false">/posts/Rising-Early</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 25 Dec 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Seamless Migration Squashing for EF Core 6 Migration Bundles]]></title>
            <description><![CDATA[EF Core generates and stores a full snapshot of the database for every migration. For a large data model, like we have at Vesta (come join us!), every migration adds ~15k LOC. Over time, we end up with more migration than application code—in 10 months, we generated over 2 million(!) lines of migration code.

All these snapshots significantly impact compile time, and without configuration, makes interacting with the codebase more tedious and slower. These snapshots also aren't useful—after enough time has passed, it becomes prohibitively difficult to actually revert N migrations back.

Ideally, we'd be able to "squash" old migrations into one, removing the old snapshots and migration logic while preserving the ability to spin up a fresh database. In the following, I'll describe how we achieved this at Vesta.]]></description>
            <link>https://jeffchen.dev/posts/Seamless-Migration-Squashing-for-EF-Core-6-Migration-Bundles</link>
            <guid isPermaLink="false">/posts/Seamless-Migration-Squashing-for-EF-Core-6-Migration-Bundles</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Mon, 22 Aug 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Monthly Review - September 2020]]></title>
            <description><![CDATA[I'm going to Idaho for the month of October! The Bay Area feels disconnected in its COVID response from the rest of the country - I'm excited to find out if that's true.

This month, I set some huge gym PRs & ran my last time trial of the track season. With the offseason upon me, I'm ready to start a strength & explosiveness block in the weight room.]]></description>
            <link>https://jeffchen.dev/posts/September-2020-Review</link>
            <guid isPermaLink="false">/posts/September-2020-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Thu, 01 Oct 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[September 2021 Review]]></title>
            <description><![CDATA[September was eventful!

I spent the first part of the month camping in Glacier National Park and driving back to Atlanta. Glacier was gorgeous and a great way to end my time in Montana. We drove back through the northern route, stopping in eastern Montana, Mineapolis, Madison, and Louisville. It was definitely strange re-entering civilization after months in sparsely populated Montana.

September 24th was my last day at Ladder. The following Monday I joined Vesta as one of the first handful of software engineers. I'm sad to leave Ladder—I enjoyed my time there, learned a ton, and made a bunch of friends. But I'm super excited to build the foundational pieces of an extremely young company!

My pre-season training is well underway—my first GPP block finished up this week. This season, I'm working with Coach Evan Gregory on both programming and technique. I've already learned a ton from him in the short time we've been working together, and I'm really excited to see how this season plays out!

Goal Tracking

🟢 Get ~1~2% faster. I'm resetting this goal to be 2% faster than the 10.79 I ran at the end of last season—that's a goal of 10.57. I doubled my goal mainly because I managed the 10.79 while injuring myself.

🔴 50% less discretionary spending. My discretionary spending was 22% higher than my 2020 average. Camping, a week-long road trip, and some furniture purchasing will do that!

🟡 One hour of solitary free time a day. This has been improving, and I expect it to continue to get better: my work schedule promises to be a lot more flexible with this new gig.

🟡 Twice-weekly live conversations with friends. Although I didn't manage to do this while traveling, since I've returned home to Atlanta I've gotten back into the routine.]]></description>
            <link>https://jeffchen.dev/posts/September-2021-Review</link>
            <guid isPermaLink="false">/posts/September-2021-Review</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 01 Oct 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Shared Vulnerability]]></title>
            <description><![CDATA[I think that contrary to popular opinion, friendships don't become deep because of similarities or differences in personality or interests. Rather, in my experience, close bonds are defined by shared vulnerability. This is common across all of my best friends and strong relationships.

Close bonds can spring from different kinds of shared vulnerability. Most obvious is sharing secrets. But there's plenty of other kinds:]]></description>
            <link>https://jeffchen.dev/posts/Shared-Vulnerability</link>
            <guid isPermaLink="false">/posts/Shared-Vulnerability</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 29 Jan 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Some Notes On Solo Training]]></title>
            <description><![CDATA[Be Patient.

Measureable improvement takes a long time. Don't vaccilate between training methodologies. Instead, commit to a program for at least one full season before making strategic changes.

Listen to your body—don't risk injury. The best ability is availability. It's better to miss a couple reps at the end of a workout than to pop a hamstring and miss weeks or even months.]]></description>
            <link>https://jeffchen.dev/posts/Some-Notes-On-Solo-Training</link>
            <guid isPermaLink="false">/posts/Some-Notes-On-Solo-Training</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 08 May 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Super Spikes? New Balance FuelCell Sigma SD-X Impressions]]></title>
            <description><![CDATA[Last week, I got my hands on a pair of New Balance's sprint spikes for 2021, the FuelCell Sigma SD-X. Although not as hyped as Nike's Air Zoom MaxFly, New Balance's sprint team has been running some ridiculous times in the SD-X: Trayvon Bromell is the fastest man in the world this year, and Sydney McLaughlin set the 400mh world record wearing New Balances.

Like other super spikes, the SD-X has an extremely stiff carbon fiber plate and a layer of foam in the midsole designed to maximize energy return on the track. The foam layer makes for a taller ride than most spikes—the stack height is comparable to trainers. That said, it's definitely not a training spike: its spikes are non-removable.]]></description>
            <link>https://jeffchen.dev/posts/Super-Spikes-New-Balance-Fuelcell-Sigma-SD-X-Impressions</link>
            <guid isPermaLink="false">/posts/Super-Spikes-New-Balance-Fuelcell-Sigma-SD-X-Impressions</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 10 Jul 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Taking a Break]]></title>
            <description><![CDATA[I'll be taking a break from weekly posts for a little while!]]></description>
            <link>https://jeffchen.dev/posts/Taking-a-Break</link>
            <guid isPermaLink="false">/posts/Taking-a-Break</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Mon, 08 Nov 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Technical Interviewer's Checklist]]></title>
            <description><![CDATA[I've interviewed hundreds of engineering candidates across multiple companies. With that experience, I've created a checklist to help ensure my technical interviews are effective and empathetic. Read on for the list!]]></description>
            <link>https://jeffchen.dev/posts/Technical-Interview-Checklist</link>
            <guid isPermaLink="false">/posts/Technical-Interview-Checklist</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 11 Dec 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Temperature and Speed—Redux]]></title>
            <description><![CDATA[Almost four years ago, I wrote a post about the relationship between temperature and speed, finding a linear relationship on 30m fly times with an R² of 0.21. I've kept tracking every rep since then—instead of 150 data points, I now have almost a thousand. I've also gotten more sophisticated with how I estimate fly and acceleration times from single reps that deserves its own blogpost. For now, what's important is that across this four-year dataset, I have 642 30m acceleration reps and 451 10m fly reps, with temperatures ranging from 14° to 95° F.]]></description>
            <link>https://jeffchen.dev/posts/Temperature-And-Speed-Redux</link>
            <guid isPermaLink="false">/posts/Temperature-And-Speed-Redux</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Temperature And Speed]]></title>
            <description><![CDATA[At CMU, our outdoor season typically started in the beginning of March. March in Pittsburgh is, well, freezing. We were lucky if our home meets weren't cancelled for having ice or snow on the track. All in all, March was my least favorite month in college. It always felt harder to warm up and hit top speed at these cold meets. I struggled to match my indoor times, which, because of the tighter turns, are typically a second slower for the 200m and even more for the 400m.

What made me slower during March? Was my warmup not thorough enough for the cold weather? Was it fear of injury? Could it be just decreased intensity coming off of indoor championships? I couldn't find any specific research about sprint performance and temperature. Without a way to gather more data, I was stuck.

That changed last year when I bought a Freelap.]]></description>
            <link>https://jeffchen.dev/posts/Temperature-And-Speed</link>
            <guid isPermaLink="false">/posts/Temperature-And-Speed</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Fri, 22 Jan 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[The Buck Stops With You]]></title>
            <description><![CDATA[One important difference between junior and senior engineers is that senior engineers take responsibility for the software the team ships. They understand that they are the only line of defense between the company and catastrophic outages, a slow death through tech debt, and losing product-market fit by building the wrong things. Without responsible engineers, teams will ship slower, buggier, less-aligned products.]]></description>
            <link>https://jeffchen.dev/posts/The-Buck-Stops-With-You</link>
            <guid isPermaLink="false">/posts/The-Buck-Stops-With-You</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 24 Apr 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Am I Getting Faster Over Time?]]></title>
            <description><![CDATA[Last winter, I published Temperature and Speed, which looked at the correlation between my 30-meter fly times and the ambient temperature. Since then, I've gathered a lot more data: I have 49 Freelap-timed fly workouts and 245 reps across 11 months. I've also collected other metrics to help answer some questions I've had about speed:

Did I get faster?



There's a relatively significant negative trend line between time of the year and rep—it sure looks like I got faster, at least at 30-meter flies, over the past year. This definitely wasn't clear in my day-to-day workouts: my per-workout graph looks really spiky:



The lesson here is to not read too much into individual reps and workouts—zooming out onto the overall trend is better.]]></description>
            <link>https://jeffchen.dev/posts/Tracking-Fly-Times</link>
            <guid isPermaLink="false">/posts/Tracking-Fly-Times</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 26 Sep 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Two Meet Reports]]></title>
            <description><![CDATA[5/8: Atlanta Track Club—Spring Track Meet #3

My first official meet in 15 months! It was absolutely phenomenal to compete again after months of solo work. Atlanta Track Club put together an extraordinarily well-organized masters-focused meet. Since they weren't contesting the 200m, I only ran the 100m.

100m: 10.92 (+0.2)

The wind cooperated, turning in or favor right before our race. I was strong out of the blocks and probably had a lead for the first 20 meters. I wasn't patient with my transition, however, and was fully upright before the 30m mark. By 50 meters, I'd lost my lead, and I had to grit through the last 20 meters. All that was enough, however, to run a FAT PR of 10.92!]]></description>
            <link>https://jeffchen.dev/posts/Two-Meet-Reports</link>
            <guid isPermaLink="false">/posts/Two-Meet-Reports</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Mon, 17 May 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Unconventional Productivity]]></title>
            <description><![CDATA[I think I'm a fairly productive person—I thought it'd be interesting to categorize some of my work-style habits as following the conventional wisdom around productivity or not.]]></description>
            <link>https://jeffchen.dev/posts/Unconventional-Productivity</link>
            <guid isPermaLink="false">/posts/Unconventional-Productivity</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 27 Mar 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Visualizing and Deleting Entity Hierarchies in EF Core]]></title>
            <description><![CDATA[At Vesta, we have a multi-tenant application where tenant data is logically separated in our Postgres instance by a tenant\_id column on entity tables. As we've grown, we've had to delete some tenant data. Although I've done it manually a few times in psql, manually deleting rows is dangerous, so I decided to write a script to delete tenants for us.

We use EF Core for all of our database interactions at Vesta, so our entire database schema is represented in our DbContext. Because DbContexts contain entity metadata, I wrote the script against that data.]]></description>
            <link>https://jeffchen.dev/posts/Visualizing-and-Deleting-Entity-Hierarchies-in-EF-Core</link>
            <guid isPermaLink="false">/posts/Visualizing-and-Deleting-Entity-Hierarchies-in-EF-Core</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Tue, 16 Aug 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Vitamin D and Heart Palpitations]]></title>
            <description><![CDATA[This isn’t medical advice. Talk to your doctor if you notice any health problems.



In mid-2019, I experienced my first heart palpitations. "Palpitation" doesn't do the feeling justice: your heart literally skips a beat. For me, each skipped beat comes with a surge of panic and the sense that something is wrong. I was suddenly aware of a part of my body I'd never thought about before.

At first, I only noticed them at night, especially after big, greasy meals. But over the next couple months, the palpitations grew in frequency. Throughout most of 2020, I experienced palpitations regularly -- multiple times a week. There wasn't a link between heavy meals and palpitations anymore; they'd strike without any apparent pattern. At just 25, I was legitimately worried about dying early.]]></description>
            <link>https://jeffchen.dev/posts/Vitamin-D-And-Heart-Palpitations</link>
            <guid isPermaLink="false">/posts/Vitamin-D-And-Heart-Palpitations</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 19 Dec 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Volume Is All You Need: 2024-25 Season Recap and Technical Notes]]></title>
            <description><![CDATA[Despite turning 30 last November, I ran my fastest times ever this year: 6.78 in the 60m, 10.55 in the 100m, and 21.26 in the 200m. Indoors, I missed qualifying for USATF nationals by just 0.03s. Outdoors, these were my first PRs since 2022, and my first time cracking 1000 points on the WA scoring tables.

The main change? I nearly doubled my sprint volume.

From 2022-2024, I averaged about 300 meters a week of maximal sprinting (accelerations and flies). This year, I pushed that to 556 meters, an almost 90% increase. At my age and with my injury history, this was a huge risk. But it paid off for me. Below, I'll detail everything I did to make it work, as well as all the other changes I made this year.]]></description>
            <link>https://jeffchen.dev/posts/Volume-Is-All-You-Need-24-25-Recap</link>
            <guid isPermaLink="false">/posts/Volume-Is-All-You-Need-24-25-Recap</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 06 Jul 2025 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Warmups For Sprints]]></title>
            <description><![CDATA[Sprinting is one of the most explosive movements an athlete can perform - it requires maximal effort, coordination, and concentration. A single misstep at high velocities can derail an athlete's entire season with a hamstring tear. Warming up before sprinting helps athletes prepare for sprinting by gradually increasing body temperature and intensity. Here's how I think about my sprint warmup:]]></description>
            <link>https://jeffchen.dev/posts/Warmups-For-Sprints</link>
            <guid isPermaLink="false">/posts/Warmups-For-Sprints</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 22 Nov 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Where Are The Asian-Americans In Track?]]></title>
            <description><![CDATA[Go to any American track meet and you'll notice a striking lack of Asian participants. Since I started running, I've always been one of few, and often the only, Asian runner. Asians are so rare in track meets that I've had more than one conversation about my race with competitors. Why aren't there more Asian-Americans in track?

Demographics

Asians only represent 5.4% of the overall US population. Maybe qualitatively "few" competitors works out to be about 5%. I don't think this explains the discrepancy, however: I've spent most of my life in the Bay Area, which has grown from 15.3% to 23.3% Asian throughout my life. Go to any Bay Area track meet and you'll see that far fewer than 25% or even 15% of the competitors are Asian. More broadly, this uncited infographic claims that "Only 12% of Asian boys and 8% of Asian girls play sports", compared to 44% of boys and 34% of girls nationally. Professionally, no American athletic league is more than 2% Asian. In the NCAA, only 1.7% of student-athletes identified as Asian.

Talent

Are Asians less athletically talented? There's some empirical evidence for this: while 152 sprinters have broken the 10-second barrier, only 6 are from Asian countries. And at one point, I was the fastest Asian high schooler in California over 100m—which got me all the way to ~90th in the overall state rankings. There's even a Wikipedia section on the "Race and sports" article titled "East Asian athletic views"!

Talent might also explain the lack of Asians at invitationals and championship track meets. As a second order effect, lack of (perceived) talent might reduce general Asian-American interest in track: people gravitate towards things they're good at, so maybe Asians are, on average, gravitating away from track. This could be a vicious cycle: without Asian role models in track, Asian-American children won't take up the sport, leaving the next generation again without any role models to look up to.

Athletic de-prioritization

Even without talent in the equation, Asian-Americans seem to self-select away from sports. Anecdotally, many of my Asian friends spent their time on academic extracurriculars. These friends were children of highly-educated immigrants who prioritized getting into a good university at the expense of everything else. Even if they played a sport, it was usually just to check the box for college admissions.

Conclusion

So what gives? I think that perceived talent plays a much bigger role in discouraging Asian-Americans in track than actual talent. While talent might matter at the very top, almost nobody is anywhere close to maximizing their athletic potential in high school. Perceived potential might very well steer Asian hopefuls away from track. Lack of focus on track and sports more generally seems to be another major factor.

How can we improve Asian-American participation in track? Hopefully, luminaries like Liu Xiang and Su Bingtian inspire children to take up the sport. Second-generation Asian-Americans, born out of the immigration boom of the 80s and 90s, are starting to have families of their own—maybe their attitudes towards college admissions and sports will be different. And, more personally, one reason I compete is to represent the Asian-American community.]]></description>
            <link>https://jeffchen.dev/posts/Where-Are-The-Asian-Americans-In-Track</link>
            <guid isPermaLink="false">/posts/Where-Are-The-Asian-Americans-In-Track</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sun, 13 Jun 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Why Atlanta?]]></title>
            <description><![CDATA[I drove across the country to my new home this weekend—Atlanta. Everyone I tell has the same reaction: why Atlanta? Here's why:]]></description>
            <link>https://jeffchen.dev/posts/Why-Atlanta</link>
            <guid isPermaLink="false">/posts/Why-Atlanta</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Sat, 01 May 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Why Clojure?]]></title>
            <description><![CDATA[One piece of unattributed wisdom that's stuck with me is "don't take more than one technology bet". At Ladder, our big bet is using Clojure for fullstack app development. Ladder's used Clojure since day 1 in 2015, and we wouldn't want it any different! In particular, Clojure's Lisp heritage, focus on pure functions and immutable data structures, unified client-server support, and superior developer experience have helped us write higher quality code faster.

Ladder is hiring! If you're interested, please check out our job description here!]]></description>
            <link>https://jeffchen.dev/posts/Why-Clojure</link>
            <guid isPermaLink="false">/posts/Why-Clojure</guid>
            <dc:creator><![CDATA[Jeff Chen]]></dc:creator>
            <pubDate>Thu, 29 Oct 2020 00:00:00 GMT</pubDate>
        </item>
    </channel>
</rss>