{"id":1118,"date":"2026-02-02T15:55:54","date_gmt":"2026-02-02T19:55:54","guid":{"rendered":"https:\/\/efsavage.com\/blog\/?p=1118"},"modified":"2026-02-02T15:58:11","modified_gmt":"2026-02-02T19:58:11","slug":"building-at-the-speed-of-builds","status":"publish","type":"post","link":"https:\/\/efsavage.com\/blog\/posts\/building-at-the-speed-of-builds\/","title":{"rendered":"Building at the speed of &#8230; builds"},"content":{"rendered":"\n<p>I&#8217;ve been thinking about build speed lately, usually while waiting for builds, and I think the thing that&#8217;s underappreciated isn&#8217;t the raw numbers, it&#8217;s that different speeds are qualitatively different experiences.  Faster is always better, but it&#8217;s far from a linear relationship.<\/p>\n\n\n\n<p>Working on a package that builds in 100ms is basically invisible. You don&#8217;t even notice it&#8217;s happening. The feedback loop is so tight that it feels like the code is just doing what you told it to do. You&#8217;re in conversation with the machine and you are the bottleneck, which is the goal.<\/p>\n\n\n\n<p>At 10 seconds, it&#8217;s disruptive, but if the tooling is set up well you can stay in flow. You wait. You&#8217;re still there when it finishes.  You might even find a bit of rhythm or cadence here and get a little thrill from the anticipation like hitting a long fly ball and seeing if it makes it out.<\/p>\n\n\n\n<p>At a minute, it&#8217;s more like someone tapping you on the shoulder to ask a question. Your attention wobbles. You notice you could use a coffee, or you tab over to email to check something &#8220;real quick.&#8221; Five minutes later you come back and the build failed two minutes ago. Now you&#8217;re reloading context.<\/p>\n\n\n\n<p>At 10 minutes, it changes your whole relationship with the work. You start actively avoiding triggering builds. You&#8217;re trying to see how far you can get while holding your breath. If it fails at 9:30 you&#8217;re genuinely frustrated, and maybe you&#8217;ll just go find something else to do for a while.<\/p>\n\n\n\n<p>The reason I think this matters is that people tend to look at build optimization as a spreadsheet exercise: spend 8 hours to save 30 seconds, amortize across however many builds, calculate break-even. Even if the math works out it feels tedious and while the other coders might thank you for a 5% reduction the suits won&#8217;t. <\/p>\n\n\n\n<p>I think that exercise misses the point entirely. The less quantifiable stuff pays back almost immediately. You&#8217;re more focused. You&#8217;re doing better work. You&#8217;re just happier. A developer who&#8217;s been trained by their feedback loop to flinch isn&#8217;t going to produce the same work as one who can iterate freely.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">But AI<\/h2>\n\n\n\n<p>There&#8217;s an argument to me made that AI changes this calculus, that it doesn&#8217;t matter anymore because the AI is doing the building in the background and will let you know when it&#8217;s done. But I think it actually makes build speed <em>more<\/em> important, not less.<\/p>\n\n\n\n<p>Since the flow state and focus don&#8217;t matter as much with async coding, now the math is actually meaningful and the small wins will compound even further.  If you&#8217;re coding at 1x speed and building every 10 minutes, and the build takes 2 minutes, you&#8217;re spending about 20% of your time waiting on builds. Annoying, but manageable.<\/p>\n\n\n\n<p>Now imagine an AI coding at 10x. It wants to build every minute to verify its work. But the build still takes 2 minutes. Suddenly 66% of the time is build. The AI isn&#8217;t going to get frustrated and check its email, but it&#8217;s also not doing useful work during that time. And if you&#8217;ve got multiple agents running in parallel, that bottleneck adds up and leaves even more open loops to manage.<\/p>\n\n\n\n<p>When you speed up one part of a pipeline, the bottleneck shifts somewhere else. AI sped up the coding. Now the build is often the bottleneck. If anything, that&#8217;s an argument for investing <em>more<\/em> in build speed than we did before, the returns are even higher when you&#8217;re trying to iterate faster.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve been thinking about build speed lately, usually while waiting for builds, and I think the thing that&#8217;s underappreciated isn&#8217;t the raw numbers, it&#8217;s that different speeds are qualitatively different experiences. Faster is always better, but it&#8217;s far from a linear relationship. Working on a package that builds in 100ms is basically invisible. You don&#8217;t&hellip; <\/p>\n<p class=\"simppeli-read-more\"><a href=\"https:\/\/efsavage.com\/blog\/posts\/building-at-the-speed-of-builds\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Building at the speed of &#8230; builds<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[418],"series":[],"class_list":["post-1118","post","type-post","status-publish","format-standard","hentry","category-software","tag-ai-assist"],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1AkJt-i2","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/posts\/1118","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/comments?post=1118"}],"version-history":[{"count":3,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/posts\/1118\/revisions"}],"predecessor-version":[{"id":1122,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/posts\/1118\/revisions\/1122"}],"wp:attachment":[{"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/media?parent=1118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/categories?post=1118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/tags?post=1118"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/series?post=1118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}