1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="robots" content="noindex, nofollow"/><title>AI-Augmented Development: The 8-10x Multiplier | Domdhi</title><meta property="og:title" content="AI-Augmented Development: The 8-10x Multiplier"/><meta name="description" content="A solo developer's real commit-log numbers from 224 days of AI-augmented development -- 1,529 commits, 310k lines, 6,701 tests -- and where the productivity multiplier actually comes from."/><meta property="og:description" content="A solo developer's real commit-log numbers from 224 days of AI-augmented development -- 1,529 commits, 310k lines, 6,701 tests -- and where the productivity multiplier actually comes from."/><meta property="og:type" content="article"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="AI-Augmented Development: The 8-10x Multiplier"/><meta name="twitter:description" content="A solo developer's real commit-log numbers from 224 days of AI-augmented development -- 1,529 commits, 310k lines, 6,701 tests -- and where the productivity multiplier actually comes from."/><link rel="canonical" href="https://domdhi.com/logs/ai-augmented-multiplier"/><meta property="og:url" content="https://domdhi.com/logs/ai-augmented-multiplier"/><meta property="og:site_name" content="Domdhi"/><meta name="robots" content="index, follow"/><meta name="article:published_time" content="2026-09-29T08:00:00+00:00"/><link rel="icon" href="/favicon.svg" type="image/svg+xml"/><link rel="icon" href="/favicon.ico" sizes="48x48"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><link rel="manifest" href="/site.webmanifest"/><link rel="alternate" type="application/rss+xml" title="Domdhi RSS Feed" href="/api/feed.xml"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><link rel="preconnect" href="https://api.fontshare.com" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/entry.client-CAXdPubk.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/chunk-6CSD65Y2-D6zLy3dp.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/react-dom-xtO3DKtk.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/jsx-runtime-BGLTrfZy.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/root-Bcndpy-H.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/button-DrB63Wrb.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/error-page-DXluEbBN.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/use-toast-B-AEaVB6.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/nonce-CWOxB_-x.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/route-error-oT57U1b3.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/utils-UvpNVb9C.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/dist-DwVSkiDL.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/dist-CxHP7aHd.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/dist-CWWr0mHq.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/dist-k5UaVEGE.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/x-4NTPRLP3.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/createLucideIcon-Dya2zrSk.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/route-4AcQuCWI.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/PublicFooter-BtHZR4m5.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/logs._slug-DAXjEbJa.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/content-BjTwqayj.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/PostRow-CyG6palb.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/tts-provider-aX8KnGCy.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/use-timezone-BxbxSbxz.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/safe-marked-xGcjNsFK.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/>
1<link rel="modulepreload" href="/assets/string-utils-Bgl0RdLr.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/time-utils-DcRCMNV5.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="modulepreload" href="/assets/text-utils--3CW0i-p.js" nonce="uKCWo7bdc0IfGpDuBT99eg"/><link rel="stylesheet" href="/assets/root-WJoKqX3L.css"/><link rel="stylesheet" href="https://api.fontshare.com/v2/css?f[]=clash-display@600,700&display=swap"/></head><body><div class="bg-void text-white font-mono min-h-screen flex flex-col overflow-x-clip selection:bg-amethyst selection:text-white relative"><div class="scanlines"></div><div class="fixed top-0 left-1/2 -translate-x-1/2 w-[800px] h-[600px] bg-amethyst/10 blur-[120px] rounded-full pointer-events-none z-0"></div><header class="fixed top-0 w-full z-50 h-[60px] flex items-center justify-between px-6 backdrop-blur-sm border-b border-white/[0.16] bg-void/95"><a href="/" class="flex items-center gap-2 no-underline" aria-label="Domdhi home"><img src="/favicon.svg" loading="lazy" width="32" height="32" alt="Domdhi logo" style="flex-shrink:0;display:block"/><span class="font-mono text-[13px] font-bold tracking-[0.14em] text-white">DOMDHI<span class="text-amethyst">.OS</span></span></a><nav class="flex items-center"><div class="hidden md:flex items-center"><a class="inline-flex items-center justify-center font-bold font-mono uppercase tracking-[0.07em] transition-button disabled:opacity-50 disabled:cursor-not-allowed bg-transparent border border-transparent px-4 py-2 text-xs text-zinc-400 hover:text-violet hover:border-white/20 hover:text-glow-violet" href="/logs" data-discover="true">[/WRITING]</a><a class="inline-flex items-center justify-center font-bold font-mono uppercase tracking-[0.07em] transition-button disabled:opacity-50 disabled:cursor-not-allowed bg-transparent border border-transparent px-4 py-2 text-xs text-zinc-400 hover:text-cyan hover:border-white/20 hover:text-glow-cyan" href="/builds" data-discover="true">[/BUILDS]</a></div><a class="inline-flex items-center justify-center font-bold font-mono uppercase tracking-[0.07em] transition-button disabled:opacity-50 disabled:cursor-not-allowed bg-transparent border-2 border-white/20 hover:translate-x-[-2px] hover:translate-y-[-2px] active:translate-x-[1px] active:translate-y-[1px] px-4 py-2 text-xs text-white shadow-soft-amethyst hover:border-amethyst hover:text-amethyst hover:shadow-soft-amethyst hover:text-glow-amethyst active:shadow-soft-amethyst ml-3" href="/login" data-discover="true">[INITIALIZE â]</a></nav></header><main class="relative z-10 pt-20 flex-1">
1<script type="application/ld+json" nonce="uKCWo7bdc0IfGpDuBT99eg">{"@context":"https://schema.org","@type":"Article","headline":"AI-Augmented Development: The 8-10x Multiplier","description":"A solo developer's real commit-log numbers from 224 days of AI-augmented development -- 1,529 commits, 310k lines, 6,701 tests -- and where the productivity multiplier actually comes from.","datePublished":"2026-09-29T08:00:00+00:00","dateModified":"2026-09-29T08:01:23.623+00:00","author":{"@type":"Person","name":"Dominic Baca"},"url":"https://domdhi.com/logs/ai-augmented-multiplier"}</script>
1<div class="max-w-5xl mx-auto px-5 sm:px-8 md:px-10"><div class="fixed top-[60px] left-0 right-0 h-[2px] z-[70] pointer-events-none"><div class="h-full" style="width:0%;background:#00F0FF;box-shadow:0 0 10px #00F0FF;transition:width .1s linear"></div></div><div aria-hidden="true" class="absolute top-0 left-1/2 -translate-x-1/2 w-[900px] max-w-full h-[540px] rounded-full pointer-events-none z-0" style="background:rgba(0,240,255,0.07);filter:blur(130px)"></div><nav class="relative z-10 flex items-center gap-[10px] py-[18px] font-mono text-[10px] tracking-[0.16em] text-zinc-500"><a class="text-zinc-500 no-underline hover:text-white transition-colors" href="/" data-discover="true">// HOME</a><span class="text-zinc-700">/</span><a class="text-zinc-500 no-underline hover:text-white transition-colors" href="/logs" data-discover="true">WRITING</a><span class="text-zinc-700">/</span><span style="color:#00F0FF">ARTICLE</span></nav><header class="relative z-10 border-t border-white/[0.07] pt-10"><div class="flex items-center gap-3 mb-5"><span class="font-mono text-[9px] tracking-[0.14em] px-[7px] py-[3px] border whitespace-nowrap inline-block text-cyan border-[rgba(0,240,255,0.4)]">TECH</span></div><h1 class="font-brand font-bold text-[clamp(34px,5.4vw,68px)] leading-[0.98] tracking-[-0.025em] m-0 text-white">AI-Augmented Development: The 8-10x Multiplier</h1><p class="font-mono text-zinc-500 text-[15.5px] leading-[1.6] mt-[22px] max-w-[56ch]">1,529 commits. 310,360 lines. 6,701 tests. 126 API endpoints. One person, 224 days, no team. Here's the actual commit log, the months where it broke down, and an honest accounting of where the multiplier is real and where it's marketing.</p><div class="flex flex-wrap items-center gap-x-[18px] gap-y-[14px] mt-7 pb-[26px]"><span class="flex items-center gap-[11px]"><span class="w-[34px] h-[34px] border border-white/[0.16] grid place-items-center font-brand font-bold text-[14px] text-amethyst">D</span><span class="flex flex-col gap-[2px]"><span class="font-header font-semibold text-[13px] text-white">Dominic Baca</span><span class="font-mono text-[10px] tracking-[0.1em] text-zinc-500">SOLO ENGINEER · DOMDHI.OS</span></span></span><span class="w-px h-7 bg-white/[0.16]"></span><span class="font-mono text-[11px] text-zinc-500">2026.09.29</span><span class="font-mono text-[11px] text-zinc-500">4<!-- --> MIN READ</span><span class="ml-auto flex gap-2"><button type="button" class="font-mono text-[11px] tracking-[0.12em] px-3 py-1.5 border border-white/[0.16] text-zinc-400 hover:text-white hover:border-white/30 transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amethyst">COPY LINK</button></span></div></header><div class="relative z-10"><div class="relative aspect-[16/7] overflow-hidden border border-white/[0.16]" style="background:radial-gradient(circle at 50% 45%, rgba(0,240,255,0.20), rgba(157,78,221,0.10) 45%, rgba(2,2,2,0.9) 82%)"><span class="absolute inset-0 flex items-center justify-center font-brand font-bold uppercase pointer-events-none" style="font-size:clamp(48px,11vw,150px);letter-spacing:-0.04em;opacity:0.09">TECH</span><span class="absolute top-4 left-4 font-mono text-[10px] tracking-[0.18em]" style="color:rgba(0,240,255,0.6)">// FIG.01</span><div class="absolute inset-0 pointer-events-none" style="background-image:repeating-linear-gradient(0deg, rgba(255,255,255,0.035) 0 1px, transparent 1px 3px)"></div></div></div><div class="relative z-10"><div class="grid grid-cols-1 gap-7 pt-10 pb-5 border-t border-white/[0.07] min-[900px]:grid-cols-[220px_minmax(0,1fr)] min-[900px]:gap-14"><aside class="self-start static min-[900px]:sticky min-[900px]:top-24"><span class="block font-mono text-[10px] tracking-[0.25em]" style="color:#00F0FF">// CONTENTS</span><nav class="mt-4 flex flex-col border-l border-white/[0.07]"><a href="#the-distribution-is-the-real-story" class="grid grid-cols-[24px_1fr] gap-2 px-3 py-[9px] -ml-px no-underline transition-colors" style="border-left:2px solid transparent"><span class="font-mono text-[10px]" style="color:#3f3f46">01</span><span class="font-mono text-[11.5px] leading-[1.4]" style="color:#71717a">The Distribution Is The Real Story</span></a><a href="#where-the-multiplier-is-real" class="grid grid-cols-[24px_1fr] gap-2 px-3 py-[9px] -ml-px no-underline transition-colors" style="border-left:2px solid transparent"><span class="font-mono text-[10px]" style="color:#3f3f46">02</span><span class="font-mono text-[11.5px] leading-[1.4]" style="color:#71717a">Where The Multiplier Is Real</span></a><a href="#where-it-absolutely-is-not" class="grid grid-cols-[24px_1fr] gap-2 px-3 py-[9px] -ml-px no-underline transition-colors" style="border-left:2px solid transparent"><span class="font-mono text-[10px]" style="color:#3f3f46">03</span><span class="font-mono text-[11.5px] leading-[1.4]" style="color:#71717a">Where It Absolutely Is Not</span></a>
1<a href="#the-number-that-indicts-me" class="grid grid-cols-[24px_1fr] gap-2 px-3 py-[9px] -ml-px no-underline transition-colors" style="border-left:2px solid transparent"><span class="font-mono text-[10px]" style="color:#3f3f46">04</span><span class="font-mono text-[11.5px] leading-[1.4]" style="color:#71717a">The Number That Indicts Me</span></a><a href="#the-actual-claim" class="grid grid-cols-[24px_1fr] gap-2 px-3 py-[9px] -ml-px no-underline transition-colors" style="border-left:2px solid transparent"><span class="font-mono text-[10px]" style="color:#3f3f46">05</span><span class="font-mono text-[11.5px] leading-[1.4]" style="color:#71717a">The Actual Claim</span></a></nav><div class="mt-6 pt-[18px] border-t border-white/[0.07] flex flex-col gap-[10px]"><span class="flex justify-between gap-[10px] font-mono text-[10px] tracking-[0.06em] text-zinc-500"><span>FILED</span><span style="color:#c4c4c8">2026.09.29</span></span><span class="flex justify-between gap-[10px] font-mono text-[10px] tracking-[0.06em] text-zinc-500"><span>UPDATED</span><span style="color:#c4c4c8">2026.09.29</span></span><span class="flex justify-between gap-[10px] font-mono text-[10px] tracking-[0.06em] text-zinc-500"><span>STATUS</span><span style="color:#00FF9F">PUBLISHED</span></span></div></aside><article class="article-prose min-w-0" style="--art-accent:#00F0FF;--art-accent-rgb:0,240,255"> 2<p>Receipts first, argument second.</p> 3<p>From the first commit on <strong>2025-12-07</strong> to <strong>2026-07-20</strong> -- 224 days -- one person, no team, nights and weekends around a full-time job:</p> 4<table> 5<thead> 6<tr> 7<th>Metric</th> 8<th>Count</th> 9</tr> 10</thead> 11<tbody><tr> 12<td>Commits</td> 13<td>1,529</td> 14</tr> 15<tr> 16<td>Lines of TypeScript/TSX</td> 17<td>310,360</td> 18</tr> 19<tr> 20<td>Test cases</td> 21<td>6,701</td> 22</tr> 23<tr> 24<td>Test files</td> 25<td>289</td> 26</tr> 27<tr> 28<td>Route files</td> 29<td>378</td> 30</tr> 31<tr> 32<td>REST API v1 endpoints</td> 33<td>126</td> 34</tr> 35<tr> 36<td>Modules shipped</td> 37<td>13</td> 38</tr> 39</tbody></table> 40<p>That's <strong>6.8 commits per day, every day, for seven and a half months</strong>, including the days I didn't touch it at all.</p> 41<p>Now the honest part, because a table like that is worthless without the shape underneath it.</p> 42<h2 id="the-distribution-is-the-real-story">The Distribution Is The Real Story</h2> 43<p>Commits by month:</p> 44<table> 45<thead> 46<tr> 47<th>Month</th> 48<th>Commits</th> 49</tr> 50</thead> 51<tbody><tr> 52<td>2025-12</td> 53<td>35</td> 54</tr> 55<tr> 56<td>2026-01</td> 57<td>122</td> 58</tr> 59<tr> 60<td>2026-02</td> 61<td>282</td> 62</tr> 63<tr> 64<td>2026-03</td> 65<td>373</td> 66</tr> 67<tr> 68<td>2026-04</td> 69<td>112</td> 70</tr> 71<tr> 72<td>2026-05</td> 73<td><strong>0</strong></td> 74</tr> 75<tr> 76<td>2026-06</td> 77<td>499</td> 78</tr> 79<tr> 80<td>2026-07</td> 81<td>106</td> 82</tr> 83</tbody></table> 84<p>Look at May. Zero. Not one commit.</p> 85<p>Then June: 499 commits in 30 days. That's 16.6 a day.</p> 86<p>Anyone selling you a smooth "10x developer" narrative is selling you the average and hiding the variance. The real pattern is spikes and dead months. March and June did 872 commits between them -- 57% of the entire project -- in two months out of eight. The multiplier isn't a steady-state rate. It's a burst capacity you can only spend when the rest of your life lets you.</p> 87<p>That matters because the thing AI actually multiplies is <strong>throughput during a session</strong>, not the number of sessions you get. It can't give you a free Saturday. It can only make the Saturday you have worth four.</p> 88<h2 id="where-the-multiplier-is-real">Where The Multiplier Is Real</h2> 89<p>Three places, specifically, and they're all the same shape: work where the thinking is done and the typing is the bottleneck.</p> 90<p><strong>1. Mechanical breadth.</strong> 126 API endpoints all follow one contract -- auth check, Zod validation, typed data function, audit log, error mapping. The first one took a design conversation. Endpoints 2 through 126 were pattern application. That's where 8-10x is not an exaggeration, it's conservative. A human typing correct boilerplate is a human being used as a very expensive printer.</p> 91<p><strong>2. Tests.</strong> 6,701 test cases across 289 files is not a number a solo developer hits by hand while also shipping features. Not because tests are hard -- because they're tedious, and tedious is where solo projects quietly decide to skip them. Removing the tedium tax is the entire reason coverage exists here at all.</p> 92<p><strong>3. Refactors that touch everything.</strong> <a href="/logs/one-column-to-nine-tables">Splitting one column into nine tables</a> and <a href="/logs/component-nobody-could-see">cutting a 530-line component nobody could read</a> are both jobs where the hard part is finding all 40 call sites without missing one. That's search-and-transform, not insight.</p> 93<h2 id="where-it-absolutely-is-not">Where It Absolutely Is Not</h2> 94<p>I'd be lying by omission if I stopped there.</p> 95<p><strong>Architecture decisions don't speed up.</strong> Choosing <a href="/logs/stack-that-prints-money">React Router 7 on Cloudflare Workers with Supabase</a> took the same amount of thinking it would have taken in 2019. AI is a great sparring partner for it and a terrible decider. Ask it to choose and it'll agree with whatever you leaned toward in the question.</p> 96<p><strong>Debugging your own bad model gets <em>slower</em>.</strong> If the mental model is wrong, AI will confidently help you build more code on top of the wrong model, faster. I've watched it generate 200 correct lines implementing a fundamentally broken idea. Speed with a bad premise isn't productivity, it's velocity toward a wall.</p> 97<p><strong>Verification doesn't compress at all.</strong> This is the real tax and nobody prices it. Generated code has to be <em>read</em>. Every line. The 8-10x on output becomes maybe 3x on shipped-and-trusted output once you account for review time. I wrote <a href="/logs/file-size-architecture-decision">a whole piece on file size</a> specifically because of this -- an 800-line ceiling exists so the review step stays humanly possible.</p> 98<p><strong>And it doesn't ship for you.</strong> Which brings me to the part of this table I don't like.</p> 99<h2 id="the-number-that-indicts-me">The Number That Indicts Me</h2> 100<p>Last commit: <strong>2026-07-20.</strong> That was 63 days ago.</p> 101<p>The same log that proves 499 commits in June proves 0 in the 63 days since. Two dead months out of eight. My best month and my worst months came out of the same setup, the same tooling, the same person.</p> 102<p>So whatever the multiplier is, it multiplies <em>something you supply</em>. Show up, it's 10x. Don't, it's 10 times zero, and the tooling has nothing to say about it. The bottleneck was never how fast I can produce co
102de. It was always whether I sat down.</p> 103<p>That's not a tooling problem. It's the exact problem <a href="/logs/forcing-functions">forcing functions</a> exist to solve, and the honest read on this commit log is that I have one built for my money and never built one for my output.</p> 104<h2 id="the-actual-claim">The Actual Claim</h2> 105<p>8-10x on mechanical work. Roughly 1x on judgment. Call it 3-4x blended on anything real, and 0x on the days you don't open the laptop.</p> 106<p>That's still the largest single change to how I build in fifteen years. It's also not the thing standing between me and shipping, which is a more uncomfortable finding than any benchmark.</p> 107<p>Every number in this post is reproducible. Clone the repo, run <code>git rev-list --count HEAD</code>, count the test files. I'd rather publish the zero month than the average.</p> 108<p>Averages are how people lie with real data.</p> 109</article></div></div><div class="relative z-10 mt-6"><div class="bg-black/60 border-2 border-cyan p-6 md:p-8 my-12"><h3 class="font-mono font-bold text-lg text-cyan tracking-wider uppercase mb-2">GET_TRANSMISSIONS</h3><p class="font-mono text-sm text-gray-400 mb-4">Raw signal on finance, freedom, fitness, and tech. No spam. Unsubscribe anytime.</p><form class="flex flex-col sm:flex-row gap-3" data-discover="true" action="/logs/ai-augmented-multiplier" method="post"><input type="hidden" name="intent" value="subscribe_newsletter"/><input type="hidden" name="source" value="article:ai-augmented-multiplier"/><input type="email" placeholder="[email protected]" required="" class="flex-1 bg-black/80 border-2 border-white/20 text-white font-mono text-sm px-4 py-2.5 placeholder:text-gray-600 focus:border-white/40 focus:outline-none transition-colors" name="email" value=""/><button class="inline-flex items-center justify-center font-bold font-mono uppercase tracking-[0.07em] transition-button disabled:opacity-50 disabled:cursor-not-allowed border-2 hover:translate-x-[-2px] hover:translate-y-[-2px] active:translate-x-[1px] active:translate-y-[1px] px-6 py-3 text-sm bg-cyan/60 text-black border-white/[0.08] shadow-brutal-cyan hover:border-cyan hover:shadow-brutal-cyan active:shadow-brutal-cyan" disabled="" type="submit">SUBSCRIBE</button></form></div></div><div class="relative z-10"><div class="flex flex-wrap items-center gap-x-7 gap-y-5 p-6 mt-6 bg-panel border border-white/[0.07] border-l-2 border-l-amethyst"><span class="w-[52px] h-[52px] border border-white/[0.16] grid place-items-center font-brand font-bold text-[22px] text-amethyst shrink-0">D</span><div class="flex-1 min-w-[240px]"><div class="font-header font-semibold text-[15px] text-white mb-1">Dominic Baca</div><p class="font-mono text-[12.5px] leading-[1.65] text-zinc-500 m-0 max-w-[52ch]">One engineer building Domdhi.OS in public â money, freedom, and the occasional 2am migration. Every number live, every commit public.</p></div><a class="font-mono text-[11px] tracking-[0.12em] px-4 py-2 border border-amethyst text-amethyst hover:bg-amethyst hover:text-white transition-colors no-underline" href="/logs" data-discover="true">FOLLOW THE LOGS â</a></div></div><section class="relative z-10 border-t border-white/[0.07] pt-11 pb-2 mt-11"><span class="block font-mono text-[10px] tracking-[0.25em] text-zinc-500">// NEXT IN THE LOGS</span><div class="grid grid-cols-1 min-[700px]:grid-cols-3 gap-px bg-white/[0.07] border border-white/[0.07] mt-5"><a class="group bg-void p-[22px] flex flex-col gap-3 no-underline text-inherit min-h-[150px] transition-[border-color,box-shadow] duration-200 hover:border-white/[0.16]" style="border-top:2px solid #00FF9F" href="/logs/autopilot-setup" data-discover="true">
109<span class="self-start"><span class="font-mono text-[9px] tracking-[0.14em] px-[7px] py-[3px] border whitespace-nowrap inline-block text-emerald border-[rgba(0,255,159,0.4)]">FINANCE</span></span><span class="font-header font-semibold text-[16px] leading-[1.25] text-white flex-1 transition-colors group-hover:text-white">The Autopilot Setup</span><span class="font-mono text-[10px] text-zinc-500">2026.09.25<!-- --> · <!-- -->6<!-- --> MIN</span></a><a class="group bg-void p-[22px] flex flex-col gap-3 no-underline text-inherit min-h-[150px] transition-[border-color,box-shadow] duration-200 hover:border-white/[0.16]" style="border-top:2px solid #FFB000" href="/logs/value-i-cannot-capture" data-discover="true"><span class="self-start"><span class="font-mono text-[9px] tracking-[0.14em] px-[7px] py-[3px] border whitespace-nowrap inline-block text-amber border-[rgba(255,176,0,0.4)]">FREEDOM</span></span><span class="font-header font-semibold text-[16px] leading-[1.25] text-white flex-1 transition-colors group-hover:text-white">I Will Never Create Value I Cannot Capture</span><span class="font-mono text-[10px] text-zinc-500">2026.09.22<!-- --> · <!-- -->6<!-- --> MIN</span></a><a class="group bg-void p-[22px] flex flex-col gap-3 no-underline text-inherit min-h-[150px] transition-[border-color,box-shadow] duration-200 hover:border-white/[0.16]" style="border-top:2px solid #00F0FF" href="/logs/stack-that-prints-money" data-discover="true">
109<span class="self-start"><span class="font-mono text-[9px] tracking-[0.14em] px-[7px] py-[3px] border whitespace-nowrap inline-block text-cyan border-[rgba(0,240,255,0.4)]">TECH</span></span><span class="font-header font-semibold text-[16px] leading-[1.25] text-white flex-1 transition-colors group-hover:text-white">The Stack That Prints Money</span><span class="font-mono text-[10px] text-zinc-500">2026.08.11<!-- --> · <!-- -->5<!-- --> MIN</span></a></div><div class="py-7"><a class="font-mono text-[11px] tracking-[0.14em] text-zinc-500 no-underline hover:text-white transition-colors" href="/logs" data-discover="true">â ALL WRITING</a></div></section></div></main><footer class="relative z-10 border-t border-white/10 px-6 md:px-12 py-5"><div class="max-w-7xl mx-auto w-full flex flex-col md:flex-row justify-between items-center gap-4 font-mono text-[11px] text-zinc-500"><div>© 2026 <span class="text-white font-bold">DOMDHI</span><span class="text-amethyst font-bold">.OS</span><span class="text-zinc-700 mx-2">//</span>NO_COOKIES. JUST_DATA.<span class="text-zinc-700 mx-2">//</span>EDGE_REGION: US_WEST</div><div class="flex items-center gap-0"><a class="hover:text-white transition-colors" href="/privacy" data-discover="true">PRIVACY</a><span class="text-zinc-700 mx-2">//</span><a class="hover:text-white transition-colors" href="/terms" data-discover="true">TERMS</a><span class="text-zinc-700 mx-2">//</span><a class="hover:text-white transition-colors" href="/logs" data-discover="true">LOGS</a></div></div></footer></div><div class="cursor-glow" aria-hidden="true"></div><div class="cursor-lens" aria-hidden="true"></div><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed bottom-6 right-6 z-50 flex flex-col gap-2 w-[320px]"></ol></div>
109<script nonce="uKCWo7bdc0IfGpDuBT99eg">((storageKey2, restoreKey) => { 110 if (!window.history.state || !window.history.state.key) { 111 let key = Math.random().toString(32).slice(2); 112 window.history.replaceState({ key }, ""); 113 } 114 try { 115 let storedY = JSON.parse(sessionStorage.getItem(storageKey2) || "{}")[restoreKey || window.history.state.key]; 116 if (typeof storedY === "number") window.scrollTo(0, storedY); 117 } catch (error) { 118 console.error(error); 119 sessionStorage.removeItem(storageKey2); 120 } 121 })("react-router-scroll-positions", null)</script>
121<script nonce="uKCWo7bdc0IfGpDuBT99eg">window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"v8_passThroughRequests":true,"v8_trailingSlashAwareDataRequests":true,"unstable_previewServerPrerendering":false,"v8_middleware":false,"v8_splitRouteModules":true,"v8_viteEnvironmentApi":true},"routeDiscovery":{"mode":"lazy","manifestPath":"/__manifest"},"ssr":true,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());</script>
121<script nonce="uKCWo7bdc0IfGpDuBT99eg" type="module" async="">; 122import * as route0 from "/assets/root-Bcndpy-H.js"; 123import * as route1 from "/assets/route-4AcQuCWI.js"; 124import * as route2 from "/assets/logs._slug-DAXjEbJa.js"; 125 window.__reactRouterManifest = { 126 "entry": { 127 "module": "/assets/entry.client-CAXdPubk.js", 128 "imports": [ 129 "/assets/chunk-6CSD65Y2-D6zLy3dp.js", 130 "/assets/react-dom-xtO3DKtk.js", 131 "/assets/jsx-runtime-BGLTrfZy.js" 132 ], 133 "css": [] 134 }, 135 "routes": { 136 "root": { 137 "id": "root", 138 "path": "", 139 "hasAction": false, 140 "hasLoader": false, 141 "hasClientAction": false, 142 "hasClientLoader": false, 143 "hasClientMiddleware": false, 144 "hasDefaultExport": true, 145 "hasErrorBoundary": true, 146 "module": "/assets/root-Bcndpy-H.js", 147 "imports": [ 148 "/assets/chunk-6CSD65Y2-D6zLy3dp.js", 149 "/assets/react-dom-xtO3DKtk.js", 150 "/assets/jsx-runtime-BGLTrfZy.js", 151 "/assets/button-DrB63Wrb.js", 152 "/assets/error-page-DXluEbBN.js", 153 "/assets/use-toast-B-AEaVB6.js", 154 "/assets/nonce-CWOxB_-x.js", 155 "/assets/route-error-oT57U1b3.js", 156 "/assets/utils-UvpNVb9C.js", 157 "/assets/dist-DwVSkiDL.js", 158 "/assets/dist-CxHP7aHd.js", 159 "/assets/dist-CWWr0mHq.js", 160 "/assets/dist-k5UaVEGE.js", 161 "/assets/x-4NTPRLP3.js", 162 "/assets/createLucideIcon-Dya2zrSk.js" 163 ], 164 "css": [ 165 "/assets/root-WJoKqX3L.css" 166 ] 167 }, 168 "routes/_public/route": { 169 "id": "routes/_public/route", 170 "parentId": "root", 171 "hasAction": false, 172 "hasLoader": true, 173 "hasClientAction": false, 174 "hasClientLoader": false, 175 "hasClientMiddleware": false, 176 "hasDefaultExport": true, 177 "hasErrorBoundary": true, 178 "module": "/assets/route-4AcQuCWI.js", 179 "imports": [ 180 "/assets/chunk-6CSD65Y2-D6zLy3dp.js", 181 "/assets/PublicFooter-BtHZR4m5.js", 182 "/assets/route-error-oT57U1b3.js", 183 "/assets/jsx-runtime-BGLTrfZy.js", 184 "/assets/button-DrB63Wrb.js", 185 "/assets/utils-UvpNVb9C.js", 186 "/assets/dist-k5UaVEGE.js" 187 ], 188 "css": [] 189 }, 190 "routes/_public/logs.$slug": { 191 "id": "routes/_public/logs.$slug", 192 "parentId": "routes/_public/route", 193 "path": "logs/:slug", 194 "hasAction": true, 195 "hasLoader": true, 196 "hasClientAction": false, 197 "hasClientLoader": false, 198 "hasClientMiddleware": false, 199 "hasDefaultExport": true, 200 "hasErrorBoundary": true, 201 "module": "/assets/logs._slug-DAXjEbJa.js", 202 "imports": [ 203 "/assets/chunk-6CSD65Y2-D6zLy3dp.js", 204 "/assets/content-BjTwqayj.js", 205 "/assets/nonce-CWOxB_-x.js", 206 "/assets/route-error-oT57U1b3.js", 207 "/assets/jsx-runtime-BGLTrfZy.js", 208 "/assets/PostRow-CyG6palb.js", 209 "/assets/button-DrB63Wrb.js", 210 "/assets/tts-provider-aX8KnGCy.js", 211 "/assets/use-timezone-BxbxSbxz.js", 212 "/assets/safe-marked-xGcjNsFK.js", 213 "/assets/string-utils-Bgl0RdLr.js", 214 "/assets/time-utils-DcRCMNV5.js", 215 "/assets/text-utils--3CW0i-p.js", 216 "/assets/utils-UvpNVb9C.js", 217 "/assets/dist-k5UaVEGE.js" 218 ], 219 "css": [] 220 }, 221 "routes/_index": { 222 "id": "routes/_index", 223 "parentId": "root", 224 "index": true, 225 "hasAction": false, 226 "hasLoader": true, 227 "hasClientAction": false, 228 "hasClientLoader": false, 229 "hasClientMiddleware": false, 230 "hasDefaultExport": true, 231 "hasErrorBoundary": true, 232 "module": "/assets/_index-zW7cdRR3.js", 233 "imports": [ 234 "/assets/chunk-6CSD65Y2-D6zLy3dp.js", 235 "/assets/PublicFooter-BtHZR4m5.js", 236 "/assets/OriginBlock-CbSpfUFF.js", 237 "/assets/PostRow-CyG6palb.js", 238 "/assets/button-DrB63Wrb.js", 239 "/assets/card-M0NVvXSP.js", 240 "/assets/route-error-oT57U1b3.js", 241 "/assets/time-utils-DcRCMNV5.js", 242 "/assets/utils-UvpNVb9C.js", 243 "/assets/jsx-runtime-BGLTrfZy.js", 244 "/assets/dist-k5UaVEGE.js" 245 ], 246 "css": [] 247 }, 248 "routes/_public/logs": { 249 "id": "routes/_public/logs", 250 "parentId": "routes/_public/route", 251 "path": "logs", 252 "hasAction": false, 253 "hasLoader": true, 254 "hasClientAction": false, 255 "hasClientLoader": false, 256 "hasClientMiddleware": false, 257 "hasDefaultExport": true, 258 "hasErrorBoundary": true, 259 "module": "/assets/logs-DGCHK-R_.js", 260 "imports": [ 261 "/assets/chunk-6CSD65Y2-D6zLy3dp.js", 262 "/assets/button-DrB63Wrb.js", 263 "/assets/calculators-aelNI-sd.js", 264 "/assets/route-error-oT57U1b3.js", 265 "/assets/time-utils-DcRCMNV5.js", 266 "/assets/jsx-runtime-BGLTrfZy.js", 267 "/assets/utils-UvpNVb9C.js", 268 "/assets/dist-k5UaVEGE.js" 269 ], 270 "css": [] 271 } 272 }, 273 "url": "/assets/manifest-a02d2527.js", 274 "version": "a02d2527" 275}; 276 window.__reactRouterRouteModules = {"root":route0,"routes/_public/route":route1,"routes/_public/logs.$slug":route2}; 277 278import("/assets/entry.client-CAXdPubk.js");</script>
278<!--$-->
278<script nonce="uKCWo7bdc0IfGpDuBT99eg">window.__reactRouterContext.streamController.enqueue("[{\"_1\":2,\"_3\":-5,\"_4\":-5},\"loaderData\",{\"_5\":6,\"_7\":8},\"actionData\",\"errors\",\"routes/_public/route\",{\"_71\":12,\"_72\":-5},\"routes/_public/logs.$slug\",{\"_9\":10,\"_11\":12,\"_13\":14,\"_15\":16,\"_17\":18,\"_19\":20},\"post\",{\"_24\":61,\"_26\":47,\"_62\":63,\"_64\":65,\"_28\":29,\"_30\":51,\"_66\":53,\"_67\":-5,\"_68\":49,\"_69\":-5,\"_70\":18},\"isAdmin\",false,\"origin\",\"https://domdhi.com\",\"articleJsonLd\",{\"_42\":43,\"_44\":45,\"_46\":47,\"_48\":49,\"_50\":51,\"_52\":53,\"_54\":55,\"_56\":57},\"readMinutes\",4,\"nextPosts\",[21,22,23],{\"_24\":38,\"_26\":39,\"_28\":40,\"_30\":41,\"_17\":37},{\"_24\":33,\"_26\":34,\"_28\":35,\"_30\":36,\"_17\":37},{\"_24\":25,\"_26\":27,\"_28\":29,\"_30\":31,\"_17\":32},\"slug\",\"stack-that-prints-money\",\"title\",\"The Stack That Prints Money\",\"pillar\",\"tech\",\"published_at\",\"2026-08-11T08:00:00+00:00\",5,\"value-i-cannot-capture\",\"I Will Never Create Value I Cannot Capture\",\"freedom\",\"2026-09-22T08:00:00+00:00\",6,\"autopilot-setup\",\"The Autopilot Setup\",\"finance\",\"2026-09-25T08:00:00+00:00\",\"@context\",\"https://schema.org\",\"@type\",\"Article\",\"headline\",\"AI-Augmented Development: The 8-10x Multiplier\",\"description\",\"A solo developer's real commit-log numbers from 224 days of AI-augmented development -- 1,529 commits, 310k lines, 6,701 tests -- and where the productivity multiplier actually comes from.\",\"datePublished\",\"2026-09-29T08:00:00+00:00\",\"dateModified\",\"2026-09-29T08:01:23.623+00:00\",\"author\",{\"_44\":58,\"_59\":60},\"url\",\"https://domdhi.com/logs/ai-augmented-multiplier\",\"Person\",\"name\",\"Dominic Baca\",\"ai-augmented-multiplier\",\"excerpt\",\"1,529 commits. 310,360 lines. 6,701 tests. 126 API endpoints. One person, 224 days, no team. Here's the actual commit log, the months where it broke down, and an honest accounting of where the multiplier is real and where it's marketing.\",\"content\",\"# AI-Augmented Development: The 8-10x Multiplier\\n\\nReceipts first, argument second.\\n\\nFrom the first commit on **2025-12-07** to **2026-07-20** -- 224 days -- one person, no team, nights and weekends around a full-time job:\\n\\n| Metric | Count |\\n|---|---|\\n| Commits | 1,529 |\\n| Lines of TypeScript/TSX | 310,360 |\\n| Test cases | 6,701 |\\n| Test files | 289 |\\n| Route files | 378 |\\n| REST API v1 endpoints | 126 |\\n| Modules shipped | 13 |\\n\\nThat's **6.8 commits per day, every day, for seven and a half months**, including the days I didn't touch it at all.\\n\\nNow the honest part, because a table like that is worthless without the shape underneath it.\\n\\n## The Distribution Is The Real Story\\n\\nCommits by month:\\n\\n| Month | Commits |\\n|---|---|\\n| 2025-12 | 35 |\\n| 2026-01 | 122 |\\n| 2026-02 | 282 |\\n| 2026-03 | 373 |\\n| 2026-04 | 112 |\\n| 2026-05 | **0** |\\n| 2026-06 | 499 |\\n| 2026-07 | 106 |\\n\\nLook at May. Zero. Not one commit.\\n\\nThen June: 499 commits in 30 days. That's 16.6 a day.\\n\\nAnyone selling you a smooth \\\"10x developer\\\" narrative is selling you the average and hiding the variance. The real pattern is spikes and dead months. March and June did 872 commits between them -- 57% of the entire project -- in two months out of eight. The multiplier isn't a steady-state rate. It's a burst capacity you can only spend when the rest of your life lets you.\\n\\nThat matters because the thing AI actually multiplies is **throughput during a session**, not the number of sessions you get. It can't give you a free Saturday. It can only make the Saturday you have worth four.\\n\\n## Where The Multiplier Is Real\\n\\nThree places, specifically, and they're all the same shape: work where the thinking is done and the typing is the bottleneck.\\n\\n**1. Mechanical breadth.** 126 API endpoints all follow one contract -- auth check, Zod validation, typed data function, audit log, error mapping. The first one took a design conversation. Endpoints 2 through 126 were pattern application. That's where 8-10x is not an exaggeration, it's conservative. A human typing correct boilerplate is a human being used as a very expensive printer.\\n\\n**2. Tests.** 6,701 test cases across 289 files is not a number a solo developer hits by hand while also shipping features. Not because tests are hard -- because they're tedious, and tedious is where solo projects quietly decide to skip them. Removing the tedium tax is the entire reason coverage exists here at all.\\n\\n**3. Refactors that touch everything.** [Splitting one column into nine tables](/logs/one-column-to-nine-tables) and [cutting a 530-line component nobody could read](/logs/component-nobody-could-see) are both jobs where the hard part is finding all 40 call sites without missing one. That's search-and-transform, not insight.\\n\\n## Where It Absolutely Is Not\\n\\nI'd be lying by omission if I stopped there.\\n\\n**Architecture decisions don't speed up.** Choosing [React Router 7 on Cloudflare Workers with Supabase](/logs/stack-that-prints-money) took the same amount of thinking it would have taken in 2019. AI is a great sparring partner for it and a terrible decider. Ask it to choose and it'll agree with whatever you leaned toward in the question.\\n\\n**Debugging your own bad model gets *slower*.** If the mental model is wrong, AI will confidently help you build more code on top of the wrong model, faster. I've watched it generate 200 correct lines implementing a fundamentally broken idea. Speed with a bad premise isn't productivity, it's velocity toward a wall.\\n\\n**Verification doesn't compress at all.** This is the real tax and nobody prices it. Generated code has to be *read*. Every line. The 8-10x on output becomes maybe 3x on shipped-and-trusted output once you account for review time. I wrote [a whole piece on file size](/logs/file-size-architecture-decision) specifically because of this -- an 800-line ceiling exists so the review step stays humanly possible.\\n\\n**And it doesn't ship for you.** Which brings me to the part of this table I don't like.\\n\\n## The Number That Indicts Me\\n\\nLast commit: **2026-07-20.** That was 63 days ago.\\n\\nThe same log that proves 499 commits in June proves 0 in the 63 days since. Two dead months out of eight. My best month and my worst months came out of the same setup, the same tooling, the same person.\\n\\nSo whatever the multiplier is, it multiplies *something you supply*. Show up, it's 10x. Don't, it's 10 times zero, and the tooling has nothing to say about it. The bottleneck was never how fast I can produce co
278de. It was always whether I sat down.\\n\\nThat's not a tooling problem. It's the exact problem [forcing functions](/logs/forcing-functions) exist to solve, and the honest read on this commit log is that I have one built for my money and never built one for my output.\\n\\n## The Actual Claim\\n\\n8-10x on mechanical work. Roughly 1x on judgment. Call it 3-4x blended on anything real, and 0x on the days you don't open the laptop.\\n\\nThat's still the largest single change to how I build in fifteen years. It's also not the thing standing between me and shipping, which is a more uncomfortable finding than any benchmark.\\n\\nEvery number in this post is reproducible. Clone the repo, run `git rev-list --count HEAD`, count the test files. I'd rather publish the zero month than the average.\\n\\nAverages are how people lie with real data.\",\"updated_at\",\"cover_image\",\"seo_description\",\"og_image\",\"read_minutes\",\"isAuthenticated\",\"profile\"]\n");</script>
278<!--$-->
278<script nonce="uKCWo7bdc0IfGpDuBT99eg">window.__reactRouterContext.streamController.close();</script>
278<!--/$--><!--/$-->
278<script nonce="uKCWo7bdc0IfGpDuBT99eg">(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.nonce='uKCWo7bdc0IfGpDuBT99eg';d.innerHTML="window.__CF$cv$params={r:'a43fecd05a691054',t:'MTc5MDkwNDQ1MA=='};var a=document.createElement('script');a.nonce='uKCWo7bdc0IfGpDuBT99eg';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
278<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" nonce="uKCWo7bdc0IfGpDuBT99eg" data-cf-beacon='{"version":"2024.11.0","token":"fa9dd2df8ac84dfebea7843527bbd463","r":1,"spa":2}' crossorigin="anonymous"></script>
278 279</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.