From 58e6a94e7c63f95d47889e9f9ce60aa88ffb8465 Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Sat, 18 Apr 2026 12:27:09 +0800 Subject: [PATCH] fix: correct tax-app exclusion rationale MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tax-app is a demo app I built for an upcoming YC channel video, not an "import-dominated history" as the previous commit claimed. Excluded because it's not production shipping work, not because of an import commit. Updated rationale in scripts/garry-output-comparison.ts's EXCLUDED_REPOS constant, in docs/ON_THE_LOC_CONTROVERSY.md's method section + conclusion, and in the README hero wording ("one demo repo" vs the earlier "repos dominated by imported code"). Numbers unchanged — the exclusion itself is the same, just the reason. Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 2 +- docs/ON_THE_LOC_CONTROVERSY.md | 4 ++-- scripts/garry-output-comparison.ts | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 666bed02..eacb34c4 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ When I heard Karpathy say this, I wanted to find out how. How does one person sh I'm [Garry Tan](https://x.com/garrytan), President & CEO of [Y Combinator](https://www.ycombinator.com/). I've worked with thousands of startups — Coinbase, Instacart, Rippling — when they were one or two people in a garage. Before YC, I was one of the first eng/PM/designers at Palantir, cofounded Posterous (sold to Twitter), and built Bookface, YC's internal social network. -**gstack is my answer.** I've been building products for twenty years, and right now I'm shipping more products than I ever have. In the last 60 days: 3 production services, 40+ shipped features, part-time, while running YC full-time. On logical code change — not raw LOC, which AI inflates — my 2026 run rate is **~810× my 2013 pace** (11,417 vs 14 logical lines/day). Year-to-date (through April 18), 2026 has already produced **240× the entire 2013 year**. Measured across 40 public + private `garrytan/*` repos including Bookface, after excluding repos dominated by imported code. AI wrote most of it. The point isn't who typed it, it's what shipped. +**gstack is my answer.** I've been building products for twenty years, and right now I'm shipping more products than I ever have. In the last 60 days: 3 production services, 40+ shipped features, part-time, while running YC full-time. On logical code change — not raw LOC, which AI inflates — my 2026 run rate is **~810× my 2013 pace** (11,417 vs 14 logical lines/day). Year-to-date (through April 18), 2026 has already produced **240× the entire 2013 year**. Measured across 40 public + private `garrytan/*` repos including Bookface, after excluding one demo repo. AI wrote most of it. The point isn't who typed it, it's what shipped. > The LOC critics aren't wrong that raw line counts inflate with AI. They are wrong that normalized-for-inflation, I'm less productive. I'm more productive, by a lot. Full methodology, caveats, and reproduction script: **[On the LOC Controversy](docs/ON_THE_LOC_CONTROVERSY.md)**. diff --git a/docs/ON_THE_LOC_CONTROVERSY.md b/docs/ON_THE_LOC_CONTROVERSY.md index 5d2476b8..27dbf308 100644 --- a/docs/ON_THE_LOC_CONTROVERSY.md +++ b/docs/ON_THE_LOC_CONTROVERSY.md @@ -55,7 +55,7 @@ To compare 2013 me vs 2026 me honestly, I wrote a script: `scripts/garry-output- I cloned all 41 repos owned by `garrytan/*` on GitHub — 15 public, 26 private — and ran the script against each. Bookface, the YC-internal social network I built in 2013 and 2014, is in the corpus. So are the three 2013-era projects (delicounter, tandong) and the upstream OSS contribution that year (zurb-foundation-wysihtml5). -One repo excluded from the 2026 numbers: **tax-app**. A single commit of 104K logical lines, which is an initial import of a codebase I didn't author, not work I shipped. Baked into the script's `EXCLUDED_REPOS` constant so future re-runs skip it automatically. If other repos turn out to have similar import-dominated histories, they go in the same list with a one-line rationale. +One repo excluded from the 2026 numbers: **tax-app**. It's a demo app I built for an upcoming YC channel video, not production shipping work, so it shouldn't count toward the productivity comparison. Baked into the script's `EXCLUDED_REPOS` constant so future re-runs skip it automatically. If other demos or throwaway spikes show up in the corpus, they go in the same list with a one-line rationale. The corpus also doesn't include my Posterous-era code from 2012, sold to Twitter along with the company. That's Twitter's private repos now. Can't reach it. If anything, excluding Posterous biases the 2013 numbers UP, because it removes work that would otherwise lower the per-day rate. @@ -147,7 +147,7 @@ Take those seriously. Some of the critique is right. The point isn't that the cr ## So here's the corrected hero line -My 2026 run rate on logical code change, not raw LOC which AI inflates, is about **810x my 2013 pace**. In less than a third of 2026, I've already produced **240x the entire 2013 year**. Measured across 40 of my public and private repos including Bookface, after excluding one repo (tax-app) whose history is dominated by a single import commit. +My 2026 run rate on logical code change, not raw LOC which AI inflates, is about **810x my 2013 pace**. In less than a third of 2026, I've already produced **240x the entire 2013 year**. Measured across 40 of my public and private repos including Bookface, after excluding one repo (tax-app) that's a demo for an upcoming YC video, not shipping work. Adjusted for real code. Normalized by calendar day. Audited by a script anyone can re-run. diff --git a/scripts/garry-output-comparison.ts b/scripts/garry-output-comparison.ts index 9ae83ac5..eea6582f 100644 --- a/scripts/garry-output-comparison.ts +++ b/scripts/garry-output-comparison.ts @@ -38,12 +38,12 @@ const GARRY_EMAILS = [ const TARGET_YEARS = [2013, 2026]; -// Repos to skip entirely because their activity is dominated by imported code -// (initial commit that vendors an upstream codebase) rather than authored work. -// When the script is pointed at one of these, it emits a stderr note and exits -// without writing a per-repo JSON. Add more via PR with a one-line rationale. +// Repos to skip entirely because they're not real shipping work (demos, spikes, +// vendored imports, throwaway experiments). When the script is pointed at one +// of these, it emits a stderr note and exits without writing a per-repo JSON. +// Add more via PR with a one-line rationale. const EXCLUDED_REPOS: Record = { - 'tax-app': 'single 104K-line initial import, not authored code', + 'tax-app': 'demo app for an upcoming YC channel video, not production shipping work', }; type PerYearResult = {