<?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" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Small Diffs - by Greg Foster]]></title><description><![CDATA[Insights on engineering enablement, modern DevTools, and building better software - from my reflections while cofounding Graphite.dev]]></description><link>https://smalldiffs.gmfoster.com</link><image><url>https://substackcdn.com/image/fetch/$s_!jbpo!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96331af8-47c8-4d24-8b13-ba8be3ddaa9e_542x542.png</url><title>Small Diffs - by Greg Foster</title><link>https://smalldiffs.gmfoster.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 26 Apr 2026 11:11:35 GMT</lastBuildDate><atom:link href="https://smalldiffs.gmfoster.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Greg Foster]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[fosterfriendship@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[fosterfriendship@substack.com]]></itunes:email><itunes:name><![CDATA[Greg Foster]]></itunes:name></itunes:owner><itunes:author><![CDATA[Greg Foster]]></itunes:author><googleplay:owner><![CDATA[fosterfriendship@substack.com]]></googleplay:owner><googleplay:email><![CDATA[fosterfriendship@substack.com]]></googleplay:email><googleplay:author><![CDATA[Greg Foster]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Creating a plans to spur input]]></title><description><![CDATA[When I find myself in an ambiguous situation - no clear direction, no defined success criteria - the best move is usually to create an imperfect plan.]]></description><link>https://smalldiffs.gmfoster.com/p/creating-a-plans-to-spur-input</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/creating-a-plans-to-spur-input</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Wed, 05 Nov 2025 13:20:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jbpo!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96331af8-47c8-4d24-8b13-ba8be3ddaa9e_542x542.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I find myself in an ambiguous situation - no clear direction, no defined success criteria - the best move is usually to create an imperfect plan.</p><p>I say &#8220;imperfect&#8221; because the goal isn&#8217;t to get it right. The goal is to create motion. In ambiguous moments, the problem isn&#8217;t lack of quality direction - it&#8217;s lack of any direction. The plan&#8217;s job is to break the stalemate.</p><p>So, start simple. Write down:</p><ul><li><p>What are you going to do?</p></li><li><p>What&#8217;s your team going to do?</p></li><li><p>What do you expect to achieve by the end of the quarter?</p></li><li><p>What are you explicitly not doing, and why?</p></li></ul><p>Even if the plan is a weakly held belief, it&#8217;s a starting point. Action creates information.</p><p>Next, share it. Send it to the people who could give you input but haven&#8217;t: a manager, a peer, a cross-functional partner. Do it in a lightweight, non-blocking way. Something like:</p><p>&#8220;Hey, just wanted to share what I&#8217;m planning for the team this quarter. Would love your input if you have thoughts. I&#8217;m locking this in Friday.&#8221;</p><p>Then, wait. One of two things will happen.</p><ol><li><p>They&#8217;ll rubber-stamp it. They&#8217;ll appreciate the initiative, maybe skim it, maybe even echo your clarity upward. Great, you now have alignment and a path forward.</p></li><li><p>You&#8217;ll trigger a strong reaction. This is the gold. The plan creates the contrast that was missing. Suddenly they&#8217;ll say, &#8220;No, not that, this.&#8221; That&#8217;s the moment you were waiting for. Now you have something to debate, and the discussion will be concrete, fast-moving, and productive.</p></li></ol><p>The act of writing down an imperfect plan forces others to clarify their thinking. It puts a clock on their opinion. It changes the conversation from &#8220;What should we do?&#8221; to &#8220;Should we do this or that?&#8221;</p><p>I&#8217;ve seen this work across teams and roles. PMs do it when product direction is vague. Engineers do it when requirements are fuzzy. Even execs do it when strategy is drifting. In every case, the draft plan functions like a forcing mechanism - it transforms ambiguity into energy.</p><p>Action creates information. When no one is telling you what to do, write the plan anyway. The act of doing so will often draw out the direction you were missing.</p>]]></content:encoded></item><item><title><![CDATA[The human-code-context problem]]></title><description><![CDATA[Agentic coding is creating a new problem that's not getting enough attention: human engineers are losing context.]]></description><link>https://smalldiffs.gmfoster.com/p/the-human-code-context-problem</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/the-human-code-context-problem</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Thu, 05 Jun 2025 14:48:33 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/65892af6-17b9-4812-9f83-e3ce8fa3d7df_1920x1079.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At this point, most engineers have tried "vibe-coding." You type out a prompt and repeatedly tell Claude Code to "continue, continue, continue." Soon, you're accepting each new version without carefully checking it. The quick pace pulls you in, and your carefulness fades.</p><p>Eventually, though, you hit a wall. The AI-generated code grows quickly, and small features suddenly become thousands of tokens long. Errors stack up, causing endless debugging loops. Your progress slows to a crawl.</p><p>You stop to think: your app seems to work&#8212;at least on the surface. Even the documentation feels unfamiliar, like someone else's shallow understanding of your project. It reminds you of finding a disappointing two-star GitHub repo. You wonder about the app&#8217;s structure, how parts connect, and how it can grow.</p><p>The core issue here is losing context. LLMs might manage external details well, but human understanding quickly fades when you're not actively involved with the code.</p><p>Previously, gaining context happened naturally. Hours of manual coding forced you to learn every small detail. You wrote tests, fixed logic errors, thought about state management, and carefully chose endpoint designs. You planned for future growth and built thoughtful abstractions. This careful involvement built a strong mental map of your project, making navigation easy, even months later.</p><p>Today, code created by LLMs can feel strange. Claude, your AI helper, "knows" the code briefly, but only on a shallow level. When the task ends, its brief understanding disappears. Both you and Claude approach the code fresh every time, losing all context.</p><p>Losing context matters greatly. Context makes engineers uniquely valuable. It&#8217;s why even highly skilled new engineers spend months "ramping up" when joining a new project. This period is about deeply learning the specific details, patterns, and risks of the project. Only after gaining this deep understanding can engineers contribute strong opinions, important improvements, and good strategic decisions.</p><p>Without context, engineers struggle to guide architecture or solve difficult problems, significantly reducing their value. Agentic coding risks taking away engineers' most important asset: accumulated context. This loss reduces engineers to passive reviewers, disconnected from the detailed knowledge necessary for thoughtful design and innovation.</p><p>The closest experience I have to agentic coding is when I moved from being an individual contributor to an engineering manager. In management, my hands-on involvement with the code dropped a lot. My understanding became surface-level, based mostly on short conversations, quick reviews of pull requests, and occasional bug checks. My focus shifted from technical details to people-focused concerns&#8212;a valuable but fundamentally different skill.</p><p>That's exactly how I feel when vibe-coding. I'm supervising an eager intern who quickly produces code that mostly works. Neither of us deeply understands the structure or inner workings of the application.</p><p>Some people believe future AI models will soon write flawless code. Upcoming models like Claude 5 or 6 will certainly improve. But regardless of how advanced AI gets, humans must remain the architects and final decision-makers. Security, accountability, and strategic choices require engineers to keep ultimate responsibility. Preserving context is therefore crucial. Without it, we risk blindly approving AI-written code without true oversight.</p><p>Maintaining context requires deliberate efforts. Engineers need to regularly set aside uninterrupted time to deeply read and understand AI-generated code. Writing some code yourself, even occasionally, helps embed key details in your mind. Co-writing interactively with AI, similar to traditional pair programming, ensures continued engagement. Keeping code changes small and easy to review, even if AI quickly generates larger updates, is important.</p><p>Ultimately, the engineer&#8212;not the computer&#8212;is responsible for the codebase. Keeping context isn&#8217;t just helpful; it&#8217;s essential. As agentic coding grows more common, actively investing in human understanding will become a major advantage. Engineers must protect and strengthen their roles as knowledgeable caretakers of their projects. Without deep context, engineers risk becoming passive watchers, overseeing large, unfamiliar codebases without true mastery or meaningful control.</p>]]></content:encoded></item><item><title><![CDATA[Principles for Building Hardworking, Motivated Teams]]></title><description><![CDATA[Some teams consistently accomplish feats that seem almost superhuman&#8212;think of rocket companies landing reusable boosters on floating platforms, or startups reshaping entire industries in just a few years.]]></description><link>https://smalldiffs.gmfoster.com/p/principles-for-building-hardworking</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/principles-for-building-hardworking</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Fri, 07 Feb 2025 12:29:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa025350f-55a6-4db6-9dc6-7f92b1ee8dd8_1920x1311.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Some teams consistently accomplish feats that seem almost superhuman&#8212;think of rocket companies landing reusable boosters on floating platforms, or startups reshaping entire industries in just a few years. I&#8217;m fascinated by understanding how they do it. Why are some teams <em>unbelievable</em>, while most just <em>normal</em>? While there&#8217;s no single magic trick, history shows that a specific combination of cultural principles and practices can push people to achieve at their highest level. Here I explore six of those core principles, drawn from legendary tech companies (and a few beyond tech) that have set extraordinary standards.</p><p>In brief, these principles are:</p><ol><li><p><strong>Clear, Inspiring Mission</strong> &#8211; A bold &#8220;why&#8221; galvanizes teams around a purpose larger than themselves.</p></li><li><p><strong>Talent Density and Willingness to Let People Go</strong> &#8211; Selective hiring and pruning underperformance creates a high-achieving core.</p></li><li><p><strong>Uncompromising Performance Standards</strong> &#8211; A refusal to accept mediocrity compels continual improvement.</p></li><li><p><strong>Aggressive Goals and Tight Deadlines</strong> &#8211; Urgency and ambition spark focused, innovative sprints.</p></li><li><p><strong>Culture of Accountability and Peer Pressure</strong> &#8211; Transparent progress and open feedback keep everyone on their toes.</p></li><li><p><strong>Meaningful Rewards and Recognition</strong> &#8211; Aligning incentives&#8212;financial or symbolic&#8212;fuels sustained motivation.</p></li></ol><p><em>If I were to list these even more concisely: <strong>mission, talent, standards, deadlines, accountability, and rewards.</strong></em></p><p>Of course, these elements work best when supported by additional factors like autonomy, strong leadership by example, and team camaraderie. But first things first: let&#8217;s start with the bedrock principle&#8212;crafting a mission so compelling that people can&#8217;t help but pour themselves into it.</p><div class="pullquote"><p>Some of these ideas can become cruel and unhealthy when taken to extremes. But so can almost anything. In this post, I&#8217;m going to save the discussion of &#8220;should&#8221; for another time and instead focus on the &#8220;how.&#8221; Don&#8217;t be evil, and always be kind.</p></div><h2><strong>1. Clear, Inspiring Mission</strong></h2><p>A powerful mission is the foundation for any high-octane culture. It articulates exactly <em>why</em> the team&#8217;s work matters and gives a unifying sense of purpose. When people believe they&#8217;re contributing to something truly meaningful&#8212;even &#8220;impossible&#8221;&#8212;they tend to show up with more passion, creative energy, and willingness to tackle tough obstacles. Three classic examples illustrate how a clear mission can spark extraordinary commitment:</p><h4><strong>NASA&#8217;s Apollo Program: &#8220;We Choose to Go to the Moon&#8221;</strong></h4><p>In 1961, President John F. Kennedy challenged NASA to land a person on the Moon <em>by the end of the decade</em>. This was more than a technical mandate&#8212;it was an inspiring national mission that captured imaginations around the world. At its height, Apollo involved roughly 400,000 people racing against an audacious deadline. Engineers worked nights and weekends, driven by the sheer grandeur of the goal: &#8220;We choose to go to the Moon&#8230;not because it is easy, but because it is hard.&#8221; That resonant message gave every late-night test, every engineering fix, a larger meaning. In just eight years, NASA overcame enormous hurdles to achieve the seemingly impossible: Apollo 11&#8217;s Moon landing in 1969. The bold clarity of the mission (&#8220;Moon by &#8217;69&#8221;) galvanized an entire generation of scientists and engineers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PJuB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa025350f-55a6-4db6-9dc6-7f92b1ee8dd8_1920x1311.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PJuB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa025350f-55a6-4db6-9dc6-7f92b1ee8dd8_1920x1311.jpeg 424w, https://substackcdn.com/image/fetch/$s_!PJuB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa025350f-55a6-4db6-9dc6-7f92b1ee8dd8_1920x1311.jpeg 848w, https://substackcdn.com/image/fetch/$s_!PJuB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa025350f-55a6-4db6-9dc6-7f92b1ee8dd8_1920x1311.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!PJuB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa025350f-55a6-4db6-9dc6-7f92b1ee8dd8_1920x1311.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PJuB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa025350f-55a6-4db6-9dc6-7f92b1ee8dd8_1920x1311.jpeg" width="1456" height="994" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a025350f-55a6-4db6-9dc6-7f92b1ee8dd8_1920x1311.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:994,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;We choose to go to the moon:' The text of Kennedy's speech at Rice  University in 1962&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="We choose to go to the moon:' The text of Kennedy's speech at Rice  University in 1962" title="We choose to go to the moon:' The text of Kennedy's speech at Rice  University in 1962" srcset="https://substackcdn.com/image/fetch/$s_!PJuB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa025350f-55a6-4db6-9dc6-7f92b1ee8dd8_1920x1311.jpeg 424w, https://substackcdn.com/image/fetch/$s_!PJuB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa025350f-55a6-4db6-9dc6-7f92b1ee8dd8_1920x1311.jpeg 848w, https://substackcdn.com/image/fetch/$s_!PJuB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa025350f-55a6-4db6-9dc6-7f92b1ee8dd8_1920x1311.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!PJuB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa025350f-55a6-4db6-9dc6-7f92b1ee8dd8_1920x1311.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>SpaceX: Making Humanity Multi-Planetary</strong></h4><p>Privately, Elon Musk&#8217;s space venture might have remained niche&#8212;but publicly, he declared that <em>SpaceX exists</em> to make humanity a multi-planetary species. This breathtaking vision&#8212;colonizing Mars&#8212;is more than a corporate tagline; it&#8217;s a rallying cry. The company actively seeks out &#8220;extremely passionate&#8221; people, as one former engineer put it, who <em>want</em> to devote long hours and emotional energy to pushing rocket technology forward. Nobody&#8217;s forced to do it; they just believe in that bigger story. SpaceX&#8217;s improbable achievements (like routinely landing orbital-class rockets) flow from that sense of grand purpose: employees feel they&#8217;re shaping the future of civilization, not just punching a clock.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pNvk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbb4e54-327c-4671-81d7-247bdf89d5eb_1067x600.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pNvk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbb4e54-327c-4671-81d7-247bdf89d5eb_1067x600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pNvk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbb4e54-327c-4671-81d7-247bdf89d5eb_1067x600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pNvk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbb4e54-327c-4671-81d7-247bdf89d5eb_1067x600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pNvk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbb4e54-327c-4671-81d7-247bdf89d5eb_1067x600.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pNvk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbb4e54-327c-4671-81d7-247bdf89d5eb_1067x600.jpeg" width="1067" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5fbb4e54-327c-4671-81d7-247bdf89d5eb_1067x600.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1067,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;See SpaceX 'Chopsticks' Catch Rocket In World First After Starship Launch&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="See SpaceX 'Chopsticks' Catch Rocket In World First After Starship Launch" title="See SpaceX 'Chopsticks' Catch Rocket In World First After Starship Launch" srcset="https://substackcdn.com/image/fetch/$s_!pNvk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbb4e54-327c-4671-81d7-247bdf89d5eb_1067x600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pNvk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbb4e54-327c-4671-81d7-247bdf89d5eb_1067x600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pNvk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbb4e54-327c-4671-81d7-247bdf89d5eb_1067x600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pNvk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbb4e54-327c-4671-81d7-247bdf89d5eb_1067x600.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Bell Labs: &#8220;Invent the Future&#8221;</strong></h4><p>Bell Laboratories in the mid-20th century didn&#8217;t chase a single &#8220;moonshot,&#8221; but it operated under a sweeping imperative: <em>advance communication and information technology for the future.</em> Management concentrated brilliant minds in one place and let them roam free on big problems&#8212;transistors, lasers, satellites, information theory. Bell Labs historian Jon Gertner highlights how this overarching mission (combined with autonomy and mastery) fueled relentless innovation. Researchers weren&#8217;t just improving phone lines; they believed they were inventing tomorrow&#8217;s world. That belief proved self-fulfilling: the breakthroughs from Bell Labs formed much of modern computing and telecommunications.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EJsf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54abd515-05dc-4c47-a402-97c209f06cc6_1200x630.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EJsf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54abd515-05dc-4c47-a402-97c209f06cc6_1200x630.jpeg 424w, https://substackcdn.com/image/fetch/$s_!EJsf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54abd515-05dc-4c47-a402-97c209f06cc6_1200x630.jpeg 848w, https://substackcdn.com/image/fetch/$s_!EJsf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54abd515-05dc-4c47-a402-97c209f06cc6_1200x630.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!EJsf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54abd515-05dc-4c47-a402-97c209f06cc6_1200x630.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EJsf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54abd515-05dc-4c47-a402-97c209f06cc6_1200x630.jpeg" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54abd515-05dc-4c47-a402-97c209f06cc6_1200x630.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Former Bell Labs site seeks to inspire new inventors | The Seattle Times&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Former Bell Labs site seeks to inspire new inventors | The Seattle Times" title="Former Bell Labs site seeks to inspire new inventors | The Seattle Times" srcset="https://substackcdn.com/image/fetch/$s_!EJsf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54abd515-05dc-4c47-a402-97c209f06cc6_1200x630.jpeg 424w, https://substackcdn.com/image/fetch/$s_!EJsf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54abd515-05dc-4c47-a402-97c209f06cc6_1200x630.jpeg 848w, https://substackcdn.com/image/fetch/$s_!EJsf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54abd515-05dc-4c47-a402-97c209f06cc6_1200x630.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!EJsf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54abd515-05dc-4c47-a402-97c209f06cc6_1200x630.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Why It Works</strong></h4><p>When a mission is both ambitious and crystal-clear, people see how their efforts connect to a larger narrative. They volunteer extra hours and mental bandwidth not out of obligation, but out of genuine excitement to be part of something historic. As JFK put it, &#8220;organize and measure the best of our energies and skills&#8221;&#8212;that&#8217;s exactly what a compelling mission accomplishes: it unifies and amplifies human potential. If you want a team that doesn&#8217;t need &#8220;forcing&#8221; to work hard, start by giving them a <em>great reason</em> to do it.</p><h2><strong>2. Talent Density and Willingness to Let People Go</strong></h2><p>A brilliant mission can attract people, but it&#8217;s the <em>composition</em> of the team&#8212;and the refusal to tolerate mediocrity&#8212;that truly keeps performance sky-high. Put simply, <strong>high talent density</strong> occurs when nearly everyone on the team is an &#8220;A player.&#8221; Companies that maintain this standard tend to outperform competitors, because every member is capable, motivated, and raising the bar for each other. Conversely, allowing underperformance to linger saps morale and momentum.</p><h4><strong>Apple: &#8220;A-Players Hire A-Players&#8221;</strong></h4><p>Steve Jobs famously believed that <em>&#8220;A-players hire A-players; B-players hire C-players.&#8221;</em> At Apple, he insisted on recruiting only the most talented, driven engineers and designers&#8212;often in small teams&#8212;and unhesitatingly let go of those who didn&#8217;t measure up. The result? Tightly knit groups of top performers who produced revolutionary products like the Macintosh and the iPhone, despite lean headcounts. Jobs observed that high-caliber people <em>want</em> to work alongside other top talent, and they resent mediocrity. By protecting that elite environment, Apple created a decades-long pipeline of world-changing devices.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wHks!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef7fed1-c529-427f-9d08-07f9a49159c9_532x349.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wHks!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef7fed1-c529-427f-9d08-07f9a49159c9_532x349.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wHks!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef7fed1-c529-427f-9d08-07f9a49159c9_532x349.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wHks!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef7fed1-c529-427f-9d08-07f9a49159c9_532x349.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wHks!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef7fed1-c529-427f-9d08-07f9a49159c9_532x349.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wHks!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef7fed1-c529-427f-9d08-07f9a49159c9_532x349.jpeg" width="532" height="349" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ef7fed1-c529-427f-9d08-07f9a49159c9_532x349.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:349,&quot;width&quot;:532,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Apple's 40th anniversary: Key players in company's history &#8211; The Mercury  News&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Apple's 40th anniversary: Key players in company's history &#8211; The Mercury  News" title="Apple's 40th anniversary: Key players in company's history &#8211; The Mercury  News" srcset="https://substackcdn.com/image/fetch/$s_!wHks!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef7fed1-c529-427f-9d08-07f9a49159c9_532x349.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wHks!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef7fed1-c529-427f-9d08-07f9a49159c9_532x349.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wHks!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef7fed1-c529-427f-9d08-07f9a49159c9_532x349.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wHks!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef7fed1-c529-427f-9d08-07f9a49159c9_532x349.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Netflix: &#8220;Adequate Performance Gets a Generous Severance&#8221;</strong></h4><p>Netflix codified a similar attitude in its culture deck, announcing bluntly that <em>&#8220;adequate performance gets a generous severance.&#8221;</em> This wasn&#8217;t designed to be cruel; rather, it was about creating a &#8220;dream team&#8221; of standout performers who feed off each other&#8217;s excellence. Executives apply the so-called &#8220;keeper test&#8221;: <em>&#8220;If this person resigned, would you fight to keep them?&#8221;</em> If the answer is no, Netflix parts ways&#8212;kindly, but decisively. This policy keeps talent density high, ensuring that everyone shares a common drive. In that environment, the mere presence of underperformers becomes a noticeable drag, so leaders address it quickly. The upside is a team that&#8217;s consistently top-tier&#8212;and thus more motivated to stay.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!up5T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371496c3-94ed-41ea-8db6-f33bb39bf774_720x540.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!up5T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371496c3-94ed-41ea-8db6-f33bb39bf774_720x540.jpeg 424w, https://substackcdn.com/image/fetch/$s_!up5T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371496c3-94ed-41ea-8db6-f33bb39bf774_720x540.jpeg 848w, https://substackcdn.com/image/fetch/$s_!up5T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371496c3-94ed-41ea-8db6-f33bb39bf774_720x540.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!up5T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371496c3-94ed-41ea-8db6-f33bb39bf774_720x540.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!up5T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371496c3-94ed-41ea-8db6-f33bb39bf774_720x540.jpeg" width="504" height="378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/371496c3-94ed-41ea-8db6-f33bb39bf774_720x540.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:540,&quot;width&quot;:720,&quot;resizeWidth&quot;:504,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Netflix Culture Deck: Experts Pick Top Most Impactful Slides - Business  Insider&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Netflix Culture Deck: Experts Pick Top Most Impactful Slides - Business  Insider" title="Netflix Culture Deck: Experts Pick Top Most Impactful Slides - Business  Insider" srcset="https://substackcdn.com/image/fetch/$s_!up5T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371496c3-94ed-41ea-8db6-f33bb39bf774_720x540.jpeg 424w, https://substackcdn.com/image/fetch/$s_!up5T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371496c3-94ed-41ea-8db6-f33bb39bf774_720x540.jpeg 848w, https://substackcdn.com/image/fetch/$s_!up5T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371496c3-94ed-41ea-8db6-f33bb39bf774_720x540.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!up5T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F371496c3-94ed-41ea-8db6-f33bb39bf774_720x540.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Bridgewater Associates: Radical Transparency and &#8220;Up-or-Out&#8221;</strong></h4><p>Hedge fund Bridgewater, led by Ray Dalio, takes this even further with its &#8220;radical transparency.&#8221; Every meeting is recorded; everyone constantly rates each other&#8217;s ideas and performance. It&#8217;s a crucible that quickly reveals who&#8217;s thriving and who isn&#8217;t. Underperformers or those who can&#8217;t handle the direct feedback leave rapidly&#8212;sometimes by choice. Those who remain often describe themselves as &#8220;intellectual Navy SEALs,&#8221; proud to be part of an ultra-elite environment. Bridgewater&#8217;s track record as the world&#8217;s largest hedge fund testifies to the power of <em>rigorous</em> talent curation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wUYa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d82376-efbf-4e5f-aa73-7f0bc2bc341c_700x394.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wUYa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d82376-efbf-4e5f-aa73-7f0bc2bc341c_700x394.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wUYa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d82376-efbf-4e5f-aa73-7f0bc2bc341c_700x394.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wUYa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d82376-efbf-4e5f-aa73-7f0bc2bc341c_700x394.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wUYa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d82376-efbf-4e5f-aa73-7f0bc2bc341c_700x394.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wUYa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d82376-efbf-4e5f-aa73-7f0bc2bc341c_700x394.jpeg" width="700" height="394" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44d82376-efbf-4e5f-aa73-7f0bc2bc341c_700x394.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:394,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Bridgewater is troubled over 'radical transparency'&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Bridgewater is troubled over 'radical transparency'" title="Bridgewater is troubled over 'radical transparency'" srcset="https://substackcdn.com/image/fetch/$s_!wUYa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d82376-efbf-4e5f-aa73-7f0bc2bc341c_700x394.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wUYa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d82376-efbf-4e5f-aa73-7f0bc2bc341c_700x394.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wUYa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d82376-efbf-4e5f-aa73-7f0bc2bc341c_700x394.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wUYa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d82376-efbf-4e5f-aa73-7f0bc2bc341c_700x394.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Why It Works</strong></h4><p>1. <strong>Top Talent Attracts More Top Talent</strong> &#8211; A-players love learning from and competing with peers at their level.</p><p>2. <strong>Eliminating Complacency</strong> &#8211; When everyone on the team is strong, slackers or weak contributors stand out immediately.</p><p>3. <strong>Confidence and Momentum</strong> &#8211; People in high-talent groups push each other upward; no one wants to be the limiting factor.</p><p>It can feel harsh, but when done with fairness and transparency&#8212;providing generous severance, honest feedback, and clear performance metrics&#8212;removing mediocrity <em>lifts</em> morale. Talent density becomes a self-reinforcing engine of motivation.</p><h2><strong>3. Uncompromising Performance Standards</strong></h2><p>Even a dream team can drift unless there&#8217;s a <em>culture-wide expectation of excellence</em>. When leaders insist on the highest standards&#8212;and back that up by refusing to accept shoddy work&#8212;teams rise to meet the bar. Over time, &#8220;this is how we do things&#8221; morphs into genuine pride, fueling continuous improvement.</p><h4><strong>Amazon: &#8220;Insist on the Highest Standards&#8221;</strong></h4><p>Amazon encodes high standards in one of its core leadership principles: <em>&#8220;Leaders have relentlessly high standards&#8212;many people may think these standards are unreasonably high.&#8221;</em> Jeff Bezos believed &#8220;good enough is never enough,&#8221; whether in warehouse operations or software reliability. Teams must root out problems <em>permanently</em> so they &#8220;stay fixed,&#8221; with no passing of defects downstream. This mentality helped Amazon become a logistics and e-commerce juggernaut; the unwavering bar for speed and quality forces constant innovation. Warehouse employees cut shipping times to near-zero; engineers fine-tuned AWS to handle massive workloads. The habit of <em>always</em> pushing for better results is baked into Amazon&#8217;s DNA.</p><h4><strong>Pixar: &#8220;Quality Is the Best Business Plan&#8221;</strong></h4><p>Under Steve Jobs&#8217; ownership, Pixar exemplified a refusal to ship half-baked films. A rigorous <em>peer-review</em> system&#8212;the &#8220;Braintrust&#8221;&#8212;supports this: if a story isn&#8217;t working, it gets torn apart and rebuilt, no matter how far along production is. Pixar famously scrapped and redid huge chunks of <em>Toy Story 2</em> late in the schedule to ensure it met their creative bar. While that process demands long hours and repeated rework, it also produced an unprecedented streak of award-winning animated films. Pixar&#8217;s teams know that every department&#8212;lighting, animation, narrative&#8212;must meet the same uncompromising standards. The result is a studio where &#8220;excellence or bust&#8221; is second nature.</p><h4><strong>Toyota: &#8220;Stop the Line&#8221; Culture</strong></h4><p>Beyond tech, Toyota&#8217;s legendary lean manufacturing sets near-flawless quality standards. On an assembly line, any worker can pull an <em>Andon cord</em> to halt production at the slightest defect. Instead of sending flawed parts downstream, Toyota addresses issues on the spot, preserving a &#8220;zero defects&#8221; ethos. This constant vigilance creates discipline and a spirit of continuous improvement&#8212;every shift ends a bit more efficient. The payoff? Toyota became world-renowned for reliability, reshaping global automotive standards. The lesson for tech teams is clear: when excellence is the <em>only</em> option, people proactively prevent errors rather than patching them later.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BKLi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da756fd-9138-43d0-87d5-05ba6538153e_1024x564.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BKLi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da756fd-9138-43d0-87d5-05ba6538153e_1024x564.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BKLi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da756fd-9138-43d0-87d5-05ba6538153e_1024x564.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BKLi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da756fd-9138-43d0-87d5-05ba6538153e_1024x564.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BKLi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da756fd-9138-43d0-87d5-05ba6538153e_1024x564.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BKLi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da756fd-9138-43d0-87d5-05ba6538153e_1024x564.jpeg" width="1024" height="564" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0da756fd-9138-43d0-87d5-05ba6538153e_1024x564.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:564,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Effective team culture: Five Whys &amp; Stop-the-line&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Effective team culture: Five Whys &amp; Stop-the-line" title="Effective team culture: Five Whys &amp; Stop-the-line" srcset="https://substackcdn.com/image/fetch/$s_!BKLi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da756fd-9138-43d0-87d5-05ba6538153e_1024x564.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BKLi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da756fd-9138-43d0-87d5-05ba6538153e_1024x564.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BKLi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da756fd-9138-43d0-87d5-05ba6538153e_1024x564.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BKLi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da756fd-9138-43d0-87d5-05ba6538153e_1024x564.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Why It Works</strong></h4><p>1. <strong>Shared Accountability</strong> &#8211; If the bar is uniformly high, everyone feels responsible for meeting it.</p><p>2. <strong>Positive Feedback Loop</strong> &#8211; High standards &#8594; better outcomes &#8594; team pride &#8594; even higher standards.</p><p>3. <strong>Long-Term Competitive Edge</strong> &#8211; Consistent excellence builds trust in your product or brand, which pays dividends.</p><p>Uncompromising standards do require balance&#8212;teams need enough support to hit those lofty goals without chronic burnout. But when done right, they elevate the entire operation. It&#8217;s not about perfection; it&#8217;s about refusing to settle for &#8220;just okay.&#8221;</p><h2><strong>4. Aggressive Goals and Tight Deadlines</strong></h2><p>Even highly talented teams need a tangible spark to mobilize their best efforts. <strong>Aggressive goals</strong>&#8212;paired with firm deadlines&#8212;provide that sense of urgency. When the clock is ticking and the target seems &#8220;impossible,&#8221; resourcefulness and intensity often skyrocket. In short bursts, this so-called &#8220;crunch&#8221; can yield massive leaps forward.</p><h4><strong>Tesla: &#8220;Production Hell&#8221;</strong></h4><p>Elon Musk&#8217;s Tesla Model 3 ramp in 2017&#8211;2018 is a textbook example. Musk publicly promised that Tesla would hit 5,000 Model 3s per week by Q2 2018, a figure the company had never approached. As the deadline neared, employees pulled 24/7 shifts, Musk himself slept on the factory floor, and Tesla even erected a makeshift assembly line in a tent to boost throughput. The team eventually <em>just</em> hit the goal&#8212;literally on the last day (and a few hours past midnight). Many criticized the chaos and burnout, but it&#8217;s undeniable that the looming, very public deadline spurred dramatic innovation. The company solved bottlenecks in weeks or months that might otherwise have taken years.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vds8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa018a52a-cdfa-4267-b762-34fad2692ced_634x437.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vds8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa018a52a-cdfa-4267-b762-34fad2692ced_634x437.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vds8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa018a52a-cdfa-4267-b762-34fad2692ced_634x437.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vds8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa018a52a-cdfa-4267-b762-34fad2692ced_634x437.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vds8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa018a52a-cdfa-4267-b762-34fad2692ced_634x437.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vds8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa018a52a-cdfa-4267-b762-34fad2692ced_634x437.jpeg" width="476" height="328.09463722397476" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a018a52a-cdfa-4267-b762-34fad2692ced_634x437.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:437,&quot;width&quot;:634,&quot;resizeWidth&quot;:476,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Elon Musk says he is back to sleeping on Tesla factory floor to oversee  Model 3 'production hell' | Daily Mail Online&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Elon Musk says he is back to sleeping on Tesla factory floor to oversee  Model 3 'production hell' | Daily Mail Online" title="Elon Musk says he is back to sleeping on Tesla factory floor to oversee  Model 3 'production hell' | Daily Mail Online" srcset="https://substackcdn.com/image/fetch/$s_!vds8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa018a52a-cdfa-4267-b762-34fad2692ced_634x437.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vds8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa018a52a-cdfa-4267-b762-34fad2692ced_634x437.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vds8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa018a52a-cdfa-4267-b762-34fad2692ced_634x437.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vds8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa018a52a-cdfa-4267-b762-34fad2692ced_634x437.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Microsoft in the &#8217;80s and &#8217;90s: &#8220;Ship It or Else&#8221;</strong></h4><p>Early Microsoft had an intense &#8220;ship it&#8221; culture under Bill Gates. Products like Windows and Office were assigned release dates&#8212;and teams were expected to meet them, no matter the all-nighters required. Gates himself was famously relentless, memorizing employees&#8217; license plates to see who left early. While this fostered a sometimes harsh environment, it pushed small, brilliant teams to deliver on tight schedules, making Microsoft&#8217;s OS and productivity suite dominant worldwide. The lesson? An unmoveable release date can light a fire that focuses everyone on delivering core features, fast.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TaxA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba267223-2aa3-4026-a417-83e6f7b2b421_1200x676.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TaxA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba267223-2aa3-4026-a417-83e6f7b2b421_1200x676.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TaxA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba267223-2aa3-4026-a417-83e6f7b2b421_1200x676.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TaxA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba267223-2aa3-4026-a417-83e6f7b2b421_1200x676.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TaxA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba267223-2aa3-4026-a417-83e6f7b2b421_1200x676.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TaxA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba267223-2aa3-4026-a417-83e6f7b2b421_1200x676.jpeg" width="1200" height="676" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba267223-2aa3-4026-a417-83e6f7b2b421_1200x676.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:676,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Bill Gates at 60: His ten defining moments&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Bill Gates at 60: His ten defining moments" title="Bill Gates at 60: His ten defining moments" srcset="https://substackcdn.com/image/fetch/$s_!TaxA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba267223-2aa3-4026-a417-83e6f7b2b421_1200x676.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TaxA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba267223-2aa3-4026-a417-83e6f7b2b421_1200x676.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TaxA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba267223-2aa3-4026-a417-83e6f7b2b421_1200x676.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TaxA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba267223-2aa3-4026-a417-83e6f7b2b421_1200x676.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Skunk Works: &#8220;Impossible&#8221; Aircraft in Record Time</strong></h4><p>Lockheed Martin&#8217;s Skunk Works, led by engineer Kelly Johnson, tackled ultra-ambitious aviation projects&#8212;like building the U-2 spy plane in just eight months. Johnson&#8217;s approach was to keep teams lean, cut red tape, and impose (seemingly) unrealistic timelines. This forced rapid prototyping, minimal bureaucracy, and a laser-like focus on the critical path. The result: multiple groundbreaking aircraft delivered years ahead of normal schedules. The Skunk Works model highlights how urgent deadlines, combined with autonomy, can supercharge inventive thinking.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6b5F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd335dd-6752-4525-83f1-8b51e221d87f_1200x866.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6b5F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd335dd-6752-4525-83f1-8b51e221d87f_1200x866.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6b5F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd335dd-6752-4525-83f1-8b51e221d87f_1200x866.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6b5F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd335dd-6752-4525-83f1-8b51e221d87f_1200x866.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6b5F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd335dd-6752-4525-83f1-8b51e221d87f_1200x866.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6b5F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd335dd-6752-4525-83f1-8b51e221d87f_1200x866.jpeg" width="562" height="405.57666666666665" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7cd335dd-6752-4525-83f1-8b51e221d87f_1200x866.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:866,&quot;width&quot;:1200,&quot;resizeWidth&quot;:562,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Seven decades of Lockheed Skunk Works aircraft (pictures) - CNET&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Seven decades of Lockheed Skunk Works aircraft (pictures) - CNET" title="Seven decades of Lockheed Skunk Works aircraft (pictures) - CNET" srcset="https://substackcdn.com/image/fetch/$s_!6b5F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd335dd-6752-4525-83f1-8b51e221d87f_1200x866.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6b5F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd335dd-6752-4525-83f1-8b51e221d87f_1200x866.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6b5F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd335dd-6752-4525-83f1-8b51e221d87f_1200x866.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6b5F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cd335dd-6752-4525-83f1-8b51e221d87f_1200x866.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Why It Works</strong></h4><p>1. <strong>Intense Focus</strong> &#8211; With the clock ticking, teams prioritize only what matters.</p><p>2. <strong>Crossing Psychological Barriers</strong> &#8211; Ambitious goals trigger creative problem-solving that &#8220;normal&#8221; timelines wouldn&#8217;t.</p><p>3. <strong>Morale Boost on Achievement</strong> &#8211; Hitting a tough deadline gives a powerful team-wide sense of accomplishment.</p><p>However, perpetual crunch is unsustainable. Effective leaders deploy aggressive goals in carefully timed intervals&#8212;ensuring the payoff (learning, celebration, sense of victory) balances the stress. Used wisely, deadlines can catapult a team from &#8220;good&#8221; to &#8220;astonishing.&#8221;</p><h2><strong>5. Culture of Accountability and Peer Pressure</strong></h2><p>In high-performing cultures, <strong>accountability</strong> isn&#8217;t just top-down&#8212;it&#8217;s woven into peer relationships. When progress is visible, and people know their coworkers will notice lapses, there&#8217;s a natural nudge to show up at your best. It&#8217;s less about fear and more about <em>not wanting to let the team down.</em></p><h4><strong>Facebook&#8217;s &#8220;Hacker Culture&#8221; and Transparency</strong></h4><p>Early on, Facebook championed a hacker ethos: &#8220;Move Fast,&#8221; &#8220;Keep Shipping,&#8221; and plastered motivational posters around the office. Internally, engineers had access to each other&#8217;s code repositories, and weekly Q&amp;As with Mark Zuckerberg made information flow <em>extremely</em> open. This setup fostered a sense that <em>everyone</em> knew what everyone else was working on. Shipping a useful feature on Friday led to public kudos and admiration; slacking off or failing to ship had no real hiding place. That kind of peer visibility created a healthy (and sometimes intense) pressure to deliver results&#8212;and do it quickly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q8kr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51ddf88d-13fc-43ee-9f15-cd169e71a1ef_500x330.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q8kr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51ddf88d-13fc-43ee-9f15-cd169e71a1ef_500x330.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Q8kr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51ddf88d-13fc-43ee-9f15-cd169e71a1ef_500x330.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Q8kr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51ddf88d-13fc-43ee-9f15-cd169e71a1ef_500x330.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Q8kr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51ddf88d-13fc-43ee-9f15-cd169e71a1ef_500x330.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q8kr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51ddf88d-13fc-43ee-9f15-cd169e71a1ef_500x330.jpeg" width="500" height="330" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51ddf88d-13fc-43ee-9f15-cd169e71a1ef_500x330.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:330,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How \&quot;The Hacker Way\&quot; helped propel Facebook to market dominance |  VentureBeat&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How &quot;The Hacker Way&quot; helped propel Facebook to market dominance |  VentureBeat" title="How &quot;The Hacker Way&quot; helped propel Facebook to market dominance |  VentureBeat" srcset="https://substackcdn.com/image/fetch/$s_!Q8kr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51ddf88d-13fc-43ee-9f15-cd169e71a1ef_500x330.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Q8kr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51ddf88d-13fc-43ee-9f15-cd169e71a1ef_500x330.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Q8kr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51ddf88d-13fc-43ee-9f15-cd169e71a1ef_500x330.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Q8kr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51ddf88d-13fc-43ee-9f15-cd169e71a1ef_500x330.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Stripe: Radical Internal Visibility</strong></h4><p>Payment startup Stripe takes transparency even further: nearly all project emails are CC&#8217;d to open mailing lists so anyone can track them. Team dashboards show who&#8217;s working on what, and an IRC bot regularly asks engineers for status updates, posting them company-wide. This public tracking isn&#8217;t meant to shame anyone; rather, it allows people to see where they can jump in and help. But it also gently reminds everyone: &#8220;We&#8217;re counting on you&#8212;how&#8217;s it going?&#8221; That ambient awareness incentivizes engineers to stay productive and maintain momentum.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iHJp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d8c468-776c-4bb2-90fa-11f01d2fbec8_1082x320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iHJp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d8c468-776c-4bb2-90fa-11f01d2fbec8_1082x320.png 424w, https://substackcdn.com/image/fetch/$s_!iHJp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d8c468-776c-4bb2-90fa-11f01d2fbec8_1082x320.png 848w, https://substackcdn.com/image/fetch/$s_!iHJp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d8c468-776c-4bb2-90fa-11f01d2fbec8_1082x320.png 1272w, https://substackcdn.com/image/fetch/$s_!iHJp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d8c468-776c-4bb2-90fa-11f01d2fbec8_1082x320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iHJp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d8c468-776c-4bb2-90fa-11f01d2fbec8_1082x320.png" width="1082" height="320" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13d8c468-776c-4bb2-90fa-11f01d2fbec8_1082x320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:320,&quot;width&quot;:1082,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Scaling email transparency&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Scaling email transparency" title="Scaling email transparency" srcset="https://substackcdn.com/image/fetch/$s_!iHJp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d8c468-776c-4bb2-90fa-11f01d2fbec8_1082x320.png 424w, https://substackcdn.com/image/fetch/$s_!iHJp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d8c468-776c-4bb2-90fa-11f01d2fbec8_1082x320.png 848w, https://substackcdn.com/image/fetch/$s_!iHJp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d8c468-776c-4bb2-90fa-11f01d2fbec8_1082x320.png 1272w, https://substackcdn.com/image/fetch/$s_!iHJp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d8c468-776c-4bb2-90fa-11f01d2fbec8_1082x320.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Atlassian: Peer Code Reviews and &#8220;ShipIt&#8221; Days</strong></h4><p>Atlassian, known for developer tools like Jira and Bitbucket, embeds accountability through mandatory peer code reviews&#8212;nobody merges code without a colleague&#8217;s green light. This practice keeps quality high while also encouraging collaboration. They also hold quarterly &#8220;ShipIt&#8221; hackathons where teams demo projects to the entire company. Nobody wants to stand up and demo something half-baked, so they work intensely to make it cool. Public demos harness the fun side of peer pressure&#8212;showcasing your best work to people you respect.</p><h4><strong>Why It Works</strong></h4><p>1. <strong>Social Motivation</strong> &#8211; Humans naturally care about their reputation among peers.</p><p>2. <strong>Shared Visibility</strong> &#8211; Open progress tracking means issues get noticed early, and credit is given where it&#8217;s due.</p><p>3. <strong>Mutual Support</strong> &#8211; Colleagues can rally around bottlenecks or problems, reducing the chance of quiet floundering.</p><p>This kind of peer-driven accountability tends to foster <em>both</em> performance and camaraderie. People push each other in a supportive (if sometimes intense) environment. Combined with the previous principles&#8212;like tough goals and high standards&#8212;it helps a team stay aligned and keep delivering, day in and day out.</p><p></p><h2><strong>6. Meaningful Rewards and Recognition</strong></h2><p>Even the most mission-driven team appreciates tangible proof that their efforts matter&#8212;whether in the form of financial upside, status, or simple public kudos. <strong>Meaningful</strong> rewards align personal goals with team goals, fueling sustained motivation rather than just short-term bursts. When set up correctly, this is a powerful lever to keep a high-performing team fully engaged.</p><h4><strong>Google: Transformative Equity</strong></h4><p>In its early days, Google couldn&#8217;t match competitors&#8217; salaries, so it offered substantial stock options. By the time of Google&#8217;s 2004 IPO, thousands of employees&#8212;and even support staff like the company&#8217;s chef&#8212;suddenly owned life-changing stakes in the business. This windfall converted a &#8220;job&#8221; into an entrepreneurial pursuit: every bug fix or infrastructure improvement could boost Google&#8217;s success <em>and</em> each engineer&#8217;s own net worth. That alignment led to remarkable dedication. Employees say the &#8220;startup mindset&#8221; lingered well beyond the IPO because everyone felt like owners, not clock-punchers.</p><h4><strong>Netflix: Top-of-Market Salaries</strong></h4><p>Rather than equity, Netflix focuses on <strong>paying top-of-market cash compensation</strong>. CEO Reed Hastings believes a single all-star outperforms multiple merely &#8220;good&#8221; people, so Netflix invests heavily in those top performers. Coupled with the practice of quickly letting go of &#8220;adequate&#8221; performers (Principle 2), Netflix&#8217;s approach means those who pass the high hiring bar see direct, significant financial rewards. On top of that, the culture emphasizes direct praise for standout work&#8212;recognizing individuals publicly. The result: employees feel deeply valued and push themselves to maintain &#8220;all-star&#8221; performance.</p><h4><strong>Sales Commissions &amp; Leaderboards</strong></h4><p>On the sales side, many enterprise tech firms use clear, hefty commissions or contests (think &#8220;President&#8217;s Club&#8221; trips) to drive incredible effort around quarterly targets. There&#8217;s a reason this model is common: <em>&#8220;hit your number, and you get a life-changing bonus.&#8221;</em> The extrinsic lure of big money is reinforced by the public recognition of &#8220;top closer&#8221; status. While not every role lends itself to commission structures, the takeaway is universal: if people can see a direct link between working harder (or smarter) and a <em>meaningful</em> reward, they tend to push boundaries.</p><h4><strong>Why It Works</strong></h4><p>1. <strong>Alignment of Interests</strong> &#8211; Personal success is tied to team or company success.</p><p>2. <strong>Public Celebration</strong> &#8211; Earning visible kudos from peers or leadership satisfies our innate desire for recognition.</p><p>3. <strong>Sustained Motivation</strong> &#8211; Over time, consistent and fair rewards (financial or otherwise) keep people engaged.</p><p>It&#8217;s important to combine extrinsic rewards with the intrinsic motivations from the earlier principles&#8212;such as mission, mastery, and camaraderie. When both heart (purpose) and wallet (incentive) point in the same direction, teams can sustain a high effort level without constant prodding.</p><h2><strong>Additional (Supporting) Principles</strong></h2><p>The six main pillars&#8212;mission, talent density, high standards, aggressive goals, accountability, and rewards&#8212;go a long way toward building a culture of extraordinary motivation. Yet there are other threads that consistently show up in top-performing teams. Think of these as <em>force multipliers</em> that amplify all the previous principles.</p><h4><strong>Autonomy and Ownership</strong></h4><p>Empowering talented people to decide <em>how</em> to achieve their goals can supercharge creativity and drive.</p><ul><li><p><strong>Google&#8217;s 20% Time</strong> &#8211; Not only did it produce breakthroughs like Gmail; it signaled trust in engineers to pursue big ideas.</p></li><li><p><strong>Stripe&#8217;s Self-Managed Teams</strong> &#8211; The company gives small squads wide latitude to figure out solutions. That freedom cultivates initiative and a personal sense of accountability.</p></li></ul><h4><strong>Opportunities for Mastery and Growth</strong></h4><p>Top performers love pushing themselves to master new skills. Companies that provide challenging projects, mentorship, and a learning culture see employees double down on their work.</p><ul><li><p><strong>Pixar</strong> &#8211; Constantly evolves animation technology (like new hair or water simulations), so each film pushes artists to break new ground. That quest for mastery keeps motivation high.</p></li><li><p><strong>Open Source Projects</strong> &#8211; Many contributors work tirelessly for no direct pay, driven by the desire to learn, improve, and earn peer respect.</p></li></ul><h4><strong>Strong Leadership and Leading by Example</strong></h4><p>Whether it&#8217;s Elon Musk sleeping on the factory floor or Steve Jobs agonizing over product details, leaders who &#8220;walk the talk&#8221; inspire teams to follow suit.</p><ul><li><p><strong>JFK&#8217;s Apollo Rally</strong> &#8211; A clear, galvanizing speech set the tone for NASA&#8217;s entire mission.</p></li><li><p><strong>Founders Staying Hands-On</strong> &#8211; Many successful startup founders keep direct involvement in key areas, showing that no one is &#8220;above the work.&#8221;</p></li></ul><h4><strong>Camaraderie and Team Spirit</strong></h4><p>Ultimately, many people work hardest for each other. Teams that genuinely like and trust each other build deep commitment&#8212;and that human bond fuels extra effort.</p><ul><li><p><strong>SpaceX Launch Days</strong> &#8211; Employees describe an almost &#8220;family&#8221; atmosphere, forged by mission stress and shared triumphs.</p></li><li><p><strong>High-Performing Sports Teams</strong> &#8211; From the All Blacks (rugby) to NBA champions, players often cite strong locker-room bonds as a key to success.</p></li></ul><p>These supporting factors reinforce the central cultural engine. Autonomy, personal growth, leadership role models, and genuine camaraderie help each principle&#8212;from high standards to big deadlines&#8212;land more effectively.</p><h2><strong>In conclusion</strong></h2><p>Depsite what individual annecdotes might imply, there&#8217;s no one &#8220;trick&#8221; to creating a high-output, deeply motivated team. It&#8217;s about combining <em>several</em> cultural levers, each reinforcing the others:</p><ol><li><p><strong>Mission</strong> &#8211; An inspiring &#8220;why&#8221; that compels people to go above and beyond.</p></li><li><p><strong>Talent Density</strong> &#8211; Top performers who push each other, with no room for dead weight.</p></li><li><p><strong>Uncompromising Standards</strong> &#8211; A shared expectation of excellence in every facet of the work.</p></li><li><p><strong>Aggressive Goals and Tight Deadlines</strong> &#8211; Strategic bursts of urgency that spark innovation.</p></li><li><p><strong>Culture of Accountability</strong> &#8211; Transparency and peer visibility, so everyone feels both supported and observed.</p></li><li><p><strong>Meaningful Rewards</strong> &#8211; Tangible payoffs and recognition to keep the long-term fire burning.</p></li></ol><p>Enhance all of this with <strong>autonomy, growth, leadership by example, and genuine team spirit</strong>, and you have a blueprint for extraordinary achievement. Of course, these principles can be taken to unhealthy extremes&#8212;burnout is real, and cultures can become toxic if overly rigid. But when applied thoughtfully, they create an environment where people <em>want</em> to do great work. They find purpose and pride in being part of something bigger, and that sense of meaningful challenge is exactly what unlocks the &#8220;impossible.&#8221;</p><p>If you&#8217;re aiming to build or strengthen such a culture, start by examining which principles you already excel at and which ones are underdeveloped. Even incremental shifts&#8212;raising the talent bar, clarifying the mission, celebrating the best work&#8212;can have a dramatic effect on your team&#8217;s energy and output. Over time, these cultural choices compound, and you&#8217;ll see firsthand the difference between a group that&#8217;s merely &#8220;good enough&#8221; and one that consistently operates on a higher plane.</p>]]></content:encoded></item><item><title><![CDATA[From Table Layouts to Tailwind: The Evolution of Front-End Styling (1995–2025)]]></title><description><![CDATA[A long history of CSS, Sass, Tailwind, and more]]></description><link>https://smalldiffs.gmfoster.com/p/from-table-layouts-to-tailwind-the</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/from-table-layouts-to-tailwind-the</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Mon, 03 Feb 2025 22:56:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZKdS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469c588-5dea-497d-9560-8f857aa2a0e0_1606x1224.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the rapidly changing world of front-end development, few areas have evolved as dramatically as CSS and web styling. Today&#8217;s engineers can choose from classic CSS, preprocessors, utility-first libraries, CSS-in-JS, and more &#8211; a dizzying array of options. How did we get here? I sometimes feel lost among the years of accumulated options. So, to parse through everything, I want to take a minute and chronical look at the history of CSS styling patterns and how we got to where we are. Along the way, we&#8217;ll see how styling practices shifted from <code>&lt;table&gt;</code>-based layouts to CSS Zen Garden, from CSS preprocessors to BEM, and from component frameworks to utility-first approaches. By understanding this history and the lessons learned, hopefully, folks can be better equipped to choose the right styling approach for their own projects.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZKdS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469c588-5dea-497d-9560-8f857aa2a0e0_1606x1224.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZKdS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469c588-5dea-497d-9560-8f857aa2a0e0_1606x1224.png 424w, https://substackcdn.com/image/fetch/$s_!ZKdS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469c588-5dea-497d-9560-8f857aa2a0e0_1606x1224.png 848w, https://substackcdn.com/image/fetch/$s_!ZKdS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469c588-5dea-497d-9560-8f857aa2a0e0_1606x1224.png 1272w, https://substackcdn.com/image/fetch/$s_!ZKdS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469c588-5dea-497d-9560-8f857aa2a0e0_1606x1224.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZKdS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469c588-5dea-497d-9560-8f857aa2a0e0_1606x1224.png" width="1456" height="1110" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e469c588-5dea-497d-9560-8f857aa2a0e0_1606x1224.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1110,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:329475,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZKdS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469c588-5dea-497d-9560-8f857aa2a0e0_1606x1224.png 424w, https://substackcdn.com/image/fetch/$s_!ZKdS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469c588-5dea-497d-9560-8f857aa2a0e0_1606x1224.png 848w, https://substackcdn.com/image/fetch/$s_!ZKdS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469c588-5dea-497d-9560-8f857aa2a0e0_1606x1224.png 1272w, https://substackcdn.com/image/fetch/$s_!ZKdS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469c588-5dea-497d-9560-8f857aa2a0e0_1606x1224.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The Early Web: Presentational HTML and Table-Based Layouts</h2><p>Let&#8217;s go way back to the beginning. In the mid-1990s, <strong>styling web pages was a wild west</strong>. Early HTML offered almost no separation of style and content &#8211; developers used presentational tags like <code>&lt;font&gt;</code> and attributes like <code>bgcolor</code> to tweak appearance. Layouts were often achieved with nested HTML tables and 1px transparent spacer GIFs. This &#8220;tag soup&#8221; approach was messy and hard to maintain, but at the time it was the only way to control design in browsers. As one web designer from that era quipped, when asked how to change fonts or layouts on the web, <a href="https://www.w3.org/Style/CSS20/history.html#:~:text=,Sorry%2C%20you%27re%20screwed">&#8220;Sorry, you&#8217;re screwed&#8221;&#8203;</a></p><p> <em>&#8211; in other words, HTML alone couldn&#8217;t do it.</em></p><p><strong>The idea of Cascading Style Sheets (CSS) emerged in 1994</strong>. H&#229;kon Wium Lie, working at CERN, proposed a stylesheet language to decouple presentation from HTML content.&#8203; This concept gained traction, and by December 1996 CSS Level 1 became a W3C recommendation. CSS promised a better way: authors could write rules in a separate stylesheet to control layout, typography, and colors, while keeping HTML semantic and focused on structure.</p><p><strong>Adoption of CSS was slow at first.</strong> Browser support in the late &#8217;90s was incomplete and inconsistent &#8211; the era infamously known as the <strong>&#8220;Browser Wars.&#8221;</strong> Internet Explorer 3 (1996) and Netscape 4 (1997) both introduced CSS support, but each had bugs and proprietary quirks&#8203;. Because <a href="https://thehistoryoftheweb.com/tables-layout-absurd/#:~:text=development%20of%20the%20HTML%20standard,best%20practice%20or%20dependable%20standard">CSS was &#8220;far from a best practice&#8221;</a> due to spotty support&#8203;, many developers stuck with what worked: HTML tables for layout and deprecated tags for styling. In 1996, designer David Siegel even published <em>&#8220;Creating Killer Websites,&#8221;</em> a guide advocating table layouts and spacer hacks to achieve precise designs&#8203;. By the late &#8217;90s, most sites were still using table-based layouts and inline styling hacks; CSS existed, but it wasn&#8217;t yet dependable across browsers&#8203;.</p><h2>Early 2000s: CSS Matures and Table Layouts Fade</h2><p>As the web community pushed for standards, the early 2000s saw a turning point. <strong>Web standards evangelists</strong> like Jeffrey Zeldman championed the separation of content and presentation. In 2002, major websites began to prove that CSS-centric design was not only possible but advantageous. <em>Wired</em> magazine&#8217;s web team, led by Douglas Bowman, <a href="https://css-tricks.com/look-back-history-css/#:~:text=Douglas%20Bowman%20was%20in%20charge,The%20site%20even%20validated">launched a complete CSS-based redesign in 2002,</a> at a time when virtually no other large site was using CSS for layout&#8203;. Just months later, ESPN followed with its own CSS-driven redesign&#8203;. These high-profile launches demonstrated that modern, complex layouts could be achieved with standard CSS instead of <code>&lt;table&gt;</code> grids. The benefits were immediately clear &#8211; leaner pages, easier updates, and a cleaner separation of concerns.</p><p>In 2003, the movement gained further steam. Zeldman published <em>&#8220;Designing with Web Standards,&#8221;</em> a book that became a manifesto for moving away from tag-soup HTML. Around the same time, <strong>Dave Shea&#8217;s CSS Zen Garden (2003)</strong> became a revelation: it showcased dozens of beautiful designs all achieved by styling the exact same HTML differently. This proved the power of CSS in capable hands, and convinced many developers that it was time to ditch old hacks. As historical accounts note, CSS Zen Garden &#8220;went a long way towards convincing folks it was time for standards.&#8221; By the mid-2000s, the web industry was firmly embracing semantic HTML and external CSS. Table-based layouts began to disappear, relegated to the history books of &#8220;how we used to do it.&#8221;</p><p>Several technical advancements around this time helped CSS turn the corner from novelty to norm:</p><ul><li><p><strong>Better Browser Support:</strong> Internet Explorer 6 (2001) and 7 (2006), Firefox (from 2004), and other browsers gradually improved their CSS compliance. The Web Standards Project (WaSP) pressured vendors to fix CSS bugs&#8203;. Consistent support for CSS2 features (like the box model, positioning, etc.) meant developers could trust CSS more.</p></li><li><p><strong>CSS2 and Early CSS3:</strong> CSS Level 2 became a W3C Recommendation in 1998&#8203;, adding features like absolute/relative positioning and media types. In the 2000s, work began on &#8220;CSS3&#8221; &#8211; an iterative evolution split into modules (selectors, color, etc.). New capabilities like media queries (for responsive design) and improved selectors started appearing, making CSS even more powerful for layouts.</p></li><li><p><strong>Community Resources:</strong> Blogs and sites like A List Apart shared techniques for CSS layout, while &#8220;CSS resets&#8221; (like Eric Meyer&#8217;s Reset CSS) emerged to normalize styles across browsers. Frameworks like Blueprint CSS (2007) or YAML provided pre-made grid systems using CSS, easing the transition from tables to CSS-based grid layouts.</p></li></ul><p>By the late 2000s, using semantic HTML with CSS for layout and design was considered a best practice. The dreaded <code>&lt;font&gt;</code> tag was retired, and CSS-based, <strong>standards-compliant design had become the new normal</strong>. This era set the stage for the next wave of innovation: making CSS easier to write and maintain for increasingly complex projects.</p><h2>The Rise of CSS Preprocessors (Late 2000s)</h2><p>As websites grew more complex, developers began to hit the limits of vanilla CSS. Large style sheets became difficult to maintain. <strong>CSS has no native variables, functions, or math</strong>, and its syntax, while simple, can lead to repetition. To address these pain points, the late 2000s introduced <strong>CSS preprocessors</strong> &#8211; languages that extend CSS with programming-like features and compile down to standard CSS.</p><p><strong>Sass (Syntactically Awesome Style Sheets)</strong>, released in 2006, was the first major preprocessor. Created by Hampton Catlin and further developed by Natalie Weizenbaum, <a href="https://en.wikipedia.org/wiki/Sass_(style_sheet_language)#:~:text=First%C2%A0appeared%20November%C2%A028%2C%202006%3B%2018%20years,28%29%20Stable%20release">Sass</a> introduced features like variables, nested selectors, mixins (reusable chunks of CSS), and functions for color manipulation and calculations&#8203;. Sass initially had its own indented syntax, but later added an &#8220;SCSS&#8221; syntax that looked more like traditional CSS, making adoption easier. In practice, Sass allowed developers to keep their styles DRY (Don&#8217;t Repeat Yourself) and better-organized. Need to use the same color in multiple places? Define a variable once. Want to lighten or darken a color? Use a built-in function. Such capabilities were revolutionary for the time.</p><p>Hot on Sass&#8217;s heels, <strong><a href="https://en.wikipedia.org/wiki/Less_(style_sheet_language)#:~:text=Less,2009%29%20Stable%20release">Less</a> (Leaner Style Sheets)</strong> was released in 2009 by Alexis Sellier&#8203;. Less had a similar feature set (variables, nesting, mixins) but could run in the browser via JavaScript or on the server, which lowered the barrier to entry. Developers could include less.js and write Less code directly, which would be converted to CSS on the fly. This client-side compilation wasn&#8217;t very performant for large projects, but it helped popularize the preprocessor concept.</p><p>Other preprocessors also emerged (Stylus in 2010, for example), but Sass and Less dominated. Each had its fans &#8211; Sass was powerful and had frameworks like Compass for added utilities; Less was simpler and was used in early versions of the popular Bootstrap framework. <strong>Twitter Bootstrap (2011)</strong> chose Less for its CSS source, demonstrating how preprocessors could streamline framework development and theming. By the early 2010s, many teams had adopted Sass or Less in their build workflows to manage their CSS for large applications.</p><p>Key advantages brought by preprocessors:</p><ul><li><p><strong>Variables and Constants:</strong> Define a value (colors, spacing, font-sizes) once and reuse, which improves consistency across a site.</p></li><li><p><strong>Nesting and Scope:</strong> Write styles nested under their parent selectors, which mirrors HTML structure and avoids repetitive selectors &#8211; though over-nesting became a known pitfall (more on that later).</p></li><li><p><strong>Mixins and Functions:</strong> Package up reusable styles (like a button gradient or a clearfix) into a mixin, or use logic to generate repetitive CSS (loops, calculations for grid widths, etc.).</p></li><li><p><strong>Organized Files:</strong> Preprocessors allowed splitting CSS into multiple files and importing them, which vanilla CSS didn&#8217;t support at the time. This modularizes code by component or section.</p></li></ul><p>All these features made CSS more maintainable as projects scaled. However, they also introduced a new compilation step and some complexity in the toolchain (Ruby or Node needed to compile Sass/Less to CSS). Still, by the early 2010s, preprocessors were a standard part of the front-end toolkit for many developers.</p><h2>Organized CSS: BEM, OOCSS, and Friends (2010&#8211;2014)</h2><p>Preprocessors helped with syntax, but they didn&#8217;t enforce <em>how to structure your CSS overall</em>. As teams collaborated on ever-larger stylesheets, they encountered familiar problems: overly specific selectors, style conflicts, and difficulty maintaining consistency. In response, the community developed <strong>CSS architecture methodologies</strong> &#8211; essentially guidelines or conventions to write cleaner, more modular CSS.</p><p>One of the earliest was <strong>Object-Oriented CSS (OOCSS)</strong>, advocated by Nicole Sullivan around 2008&#8211;2009. OOCSS proposed treating CSS classes like &#8220;objects&#8221; &#8211; reusable chunks that are independent of context. For example, a generic <code>.media</code> class could define a block of media and text, and it could be reused in different places with minimal changes. Sullivan&#8217;s approach aimed to increase reuse and decrease redundancy: think of styling in terms of visual components (like modules) rather than individual pages. OOCSS planted the seeds for many techniques to come.</p><p>Around 2010, a team at Yandex in Russia introduced <strong>BEM (Block-Element-Modifier)</strong> methodology. BEM provided a structured, naming-convention-driven approach to CSS. In BEM, a <strong>&#8220;Block&#8221;</strong> is an independent component (like a navbar, card, or button), an <strong>&#8220;Element&#8221;</strong> is a part of that block (like an item in the navbar, or the title of the card), and a <strong>&#8220;Modifier&#8221;</strong> is a variant or state (like a large version of a button, or a highlighted card). These concepts are reflected in naming, e.g. <code>card__title--highlighted</code> might refer to a title element of a card block, in a highlighted state. BEM&#8217;s strict naming scheme (block__element--modifier) creates clarity about hierarchy and prevents clashing selectors by scoping names to a block. First <a href="https://www.pivale.co/blog/bem-css-abem-bbem#:~:text=BEM%20is%20an%20acronym%20for,maintainable%20approach%20to%20writing%20CSS">introduced by Yandex in 2010</a>&#8203;, BEM gained global popularity a few years later as developers saw its benefits for large projects. By encapsulating styles per component and avoiding generic class names, BEM made CSS more maintainable and scalable across big teams.</p><p>Another influential guide was <strong>SMACSS (Scalable and Modular Architecture for CSS)</strong>, created by Jonathan Snook in 2011. SMACSS isn&#8217;t a library but a style guide taxonomy: it categorizes your CSS rules into five types &#8211; Base, Layout, Module, State, and Theme. For example, base styles are default element styles (e.g., <code>h1</code>, <code>a</code>), layout styles define major page regions, module styles are for reusable components, state styles are for dynamic states (like .is-hidden, .is-active), and theme styles handle alternate themes or skins. This categorization helps developers reason about their styles and where certain rules should live. <a href="https://smacss.com/book/#:~:text=URL%3A%20https%3A%2F%2Fsmacss,for%20archival%20and%20educational%20purposes">Snook&#8217;s SMACSS (written in 2011&#8203;) </a>was one of several attempts to bring more discipline to CSS in an era when projects were only getting larger.</p><p>These methodologies shared some common goals:</p><ul><li><p><strong>Modularity:</strong> Treat CSS not as one big global sheet, but as pieces tied to components or purposes.</p></li><li><p><strong>Reusability:</strong> Encourage writing a style once (for a &#8220;component&#8221;) and reusing it, rather than rewriting similar styles in many places.</p></li><li><p><strong>Explicitness:</strong> Through naming conventions (like BEM&#8217;s long class names) or structured rules (SMACSS categories), make the intent of styles explicit. This helps new team members understand the code and prevents accidental style overrides.</p></li><li><p><strong>Team Collaboration:</strong> By having agreed-upon conventions, teams avoid stepping on each other&#8217;s toes in CSS. If everyone follows BEM, the chance of two developers creating conflicting class names is low. If following SMACSS, one knows where to add a new state style versus a base style.</p></li></ul><p>Not every team formally adopted BEM or SMACSS, but the influence of these ideas is widespread. Even today, many CSS codebases use BEM naming or similar, and concepts like separating style concerns (structure vs skin vs state) are considered best practice. These methodologies were a direct response to &#8220;CSS sprawl&#8221; &#8211; without them, large CSS files can become brittle and hard to maintain. By the mid-2010s, using a CSS methodology was common on big projects, whether it was an official one like BEM/SMACSS or a team&#8217;s own conventions influenced by them.</p><h2>The Component Era: Frameworks Change How We Style (2015+)</h2><p>Around the same time that CSS architects were wrangling stylesheets, a broader revolution was happening in front-end development: the rise of <strong>JavaScript frameworks and component-based architecture</strong>. AngularJS (by Google) gained popularity circa 2010, React (by Facebook) launched in 2013, and Vue.js in 2014. These frameworks encouraged developers to build UIs as collections of components &#8211; self-contained pieces of UI that manage their own logic and (often) their own styling. This shift had a profound impact on styling practices.</p><p>In traditional multi-page websites, you might have one large CSS file (or a few) loaded across all pages. But in a <strong>single-page application (SPA)</strong> with components, it made sense for each component to carry some styles with it, to avoid interference with others. Frameworks began offering solutions for <strong>encapsulating styles</strong> at the component level:</p><ul><li><p><strong>Angular (2+):</strong> Angular (from version 2 in 2016 onward) introduced the concept of component-scoped styles. By default, Angular components use <strong>View Encapsulation</strong>, which in practice means the styles you write for a component are applied to that component&#8217;s template and <em>do not leak out</em>. Under the hood, Angular can emulate this by adding unique attributes to elements and matching those in CSS, or use Shadow DOM when available. The result is that with Angular 2+, &#8220;<a href="https://www.digitalocean.com/community/tutorials/angular-styles-between-components-angular#:~:text=,in%20Angular%202">component styles are protected and won&#8217;t bleed into other components by default</a>.&#8221;&#8203; This was a game-changer: you could write simple CSS selectors in a component&#8217;s stylesheet (.css or .scss file) without fear that they would accidentally target the wrong element elsewhere in the app &#8211; something not possible with plain global CSS unless you were very careful with naming. Angular&#8217;s approach brought the benefit of BEM (encapsulation) without the need to manually name-space everything &#8211; the framework did it for you.</p></li><li><p><strong>React:</strong> React took a more library-like approach &#8211; it didn&#8217;t dictate styles, but its philosophy of building UIs encouraged new styling solutions. Early React apps often still used global CSS or CSS modules, but many React developers sought to co-locate styles with components. One approach was <strong>CSS Modules</strong> (first popularized around 2015), which let you write CSS in a file and import it into your component; the build tool ensures that class names are locally scoped (e.g., <code>.button</code> in <code>ComponentA.css</code> gets transformed into a unique <code>.ComponentA_button__abc123</code> in the final CSS). This gives isolation similar to Angular&#8217;s, but via a build step. Another approach, which really took off in the React community, was writing styles in JavaScript, aka <strong>CSS-in-JS</strong> (next section will dive into this). React&#8217;s flexibility spawned a plethora of styling strategies, but the key trend was <strong>encapsulation</strong> &#8211; whether via modules, in-JS, or BEM conventions, React apps typically avoid global CSS leakage by scoping styles per component.</p></li><li><p><strong>Vue.js:</strong> Vue single-file components (SFCs) encapsulate HTML, JS, and CSS in one <code>.vue</code> file. Vue allows a <code>&lt;style scoped&gt;</code> tag which, like Angular, automatically scopes the CSS to that component only. This provides convenience similar to Angular&#8217;s approach. Vue developers can also choose to use global CSS or module systems, but the single-file component format encourages keeping the CSS close to the markup it styles.</p></li><li><p><strong>Web Components:</strong> In parallel to framework-specific solutions, the web platform itself introduced Web Components, which include the Shadow DOM for native style encapsulation. Web Components became a W3C standard in 2019 (with roots in earlier specs), and allow developers to create custom elements with truly isolated styles (the Shadow DOM ensures styles defined in a shadow root don&#8217;t affect the outside, and vice versa). While Web Components aren&#8217;t as widely used as React/Angular/Vue, they influenced the idea that styling can be bundled with components.</p></li></ul><p>Overall, by the late 2010s, <strong>the paradigm had shifted</strong>: thinking in terms of components (and their styles) rather than pages. This meant a few things for styling:</p><ul><li><p>Developers began splitting CSS by component, either manually (one file per component) or by using the framework&#8217;s mechanism (CSS Modules, SFCs, etc.). The days of one gigantic <code>.css</code> file with thousands of lines for the whole site were fading.</p></li><li><p>Global styles were still used (for base styles, common typography, theme colors), but most new development happened in a component scope. This reduced the risk of unintended side effects &#8211; a core principle from the earlier methodologies taken to the next level.</p></li><li><p>Because components could be assembled like lego blocks, a <strong>design system</strong> mindset emerged: teams created sets of standardized components (buttons, cards, modals, etc.) each with their own styles, ensuring consistency across the application.</p></li></ul><p>By embracing components, frameworks also set the stage for new ways to author CSS that fit better in a JavaScript-heavy workflow &#8211; most notably, the rise of CSS-in-JS.</p><h2>The Rise of CSS-in-JS (Late 2010s)</h2><p>As React and other component frameworks rose in popularity, developers looked for ways to simplify styling in these environments. Enter <strong>CSS-in-JS</strong>, a paradigm where CSS is written in JavaScript (or TypeScript) instead of in <code>.css</code> files. This approach initially sounded heretical to some &#8211; after all, separating CSS from JS had been a longstanding best practice. But CSS-in-JS came with compelling advantages for component-based systems, and it quickly gained a following.</p><p>One of the breakthrough libraries was <strong>styled-components</strong>, released in 2016. This library (along with others like Emotion, JSS, and Radium in that era) enabled developers to define styled React components using JavaScript template literals that contained CSS syntax. For example, you could write:</p><p><code>import styled from 'styled-components'; <br>const Button = styled.button` background: ${props =&gt; props.primary ? "blue" : "gray"}; <br>color: white; padding: 10px; `;</code></p><p>This defines a <code>Button</code> component with styles that change based on props (here, if <code>primary</code> prop is true, use blue background). Styled-components would then ensure those styles are applied and scoped only to that component. The popularity of this approach exploded &#8211; by the end of 2016, styled-components &#8220;<a href="https://medium.com/free-code-camp/visual-variants-for-react-components-with-styled-components-dfaff6a76273#:~:text=How%20to%20create%20visual%20variants,at%20the%20end%20of%202016">took the React world by storm</a>,&#8221; and in the following years many React apps adopted CSS-in-JS libraries. According to the State of JS survey, by 2021 <a href="https://blog.bitsrc.io/css-vs-css-in-js-what-you-should-choose-in-2023-392a600cb977#:~:text=There%20are%20various%20methods%20for,JS%20library">over half of surveyed developers</a> had used styled-components&#8203;, a testament to how mainstream this approach became in the React ecosystem.</p><p><strong>Why CSS-in-JS?</strong> Several reasons drove its adoption:</p><ul><li><p><em>Co-location:</em> Write styles in the same file as your component logic. This makes it easy to keep a component&#8217;s implementation self-contained. No need to switch between JS and CSS files &#8211; one less context switch for developers.</p></li><li><p><em>Dynamic styling:</em> Because it&#8217;s JavaScript, you can use all the power of JS to compute styles. The example above shows prop-based styles; you can also do themes via React Context, calculate widths, use loops, etc. Without a preprocessor, CSS can&#8217;t easily do logic based on runtime data &#8211; CSS-in-JS can.</p></li><li><p><em>Avoiding specificity issues:</em> CSS-in-JS often generates unique class names (much like CSS Modules) for each styled component, so you don&#8217;t worry about one component&#8217;s styles interfering with another&#8217;s. This is very appealing in large apps &#8211; it&#8217;s essentially an automatic BEM-like scoping without you needing to manually write BEM classes.</p></li><li><p><em>Better developer experience:</em> Many CSS-in-JS libraries provide features like automatic vendor prefixing (so you don&#8217;t need something like Autoprefixer), and some ensure that only the styles for rendered components are injected on the page (critical CSS). This can optimize performance and avoid loading unused styles.</p></li></ul><p>Of course, CSS-in-JS has its tradeoffs. A common criticism is <strong>performance</strong>: injecting styles via JavaScript can be slower than having all styles in a static CSS file, especially if done at runtime. Early CSS-in-JS libraries would insert <code>&lt;style&gt;</code> tags dynamically and often recalc styles on the fly, which for very large apps could cause noticeable jank. There&#8217;s also the concern of bundle size &#8211; adding a JS library to handle styling comes at a cost. Over time, many CSS-in-JS solutions addressed these issues by using <strong>compile-time extraction</strong> (turning the styles into static CSS during the build, as in newer libraries like Linaria or compiled CSS-in-JS frameworks) or other optimizations.</p><p>Nonetheless, by the late 2010s, CSS-in-JS was a major trend. It fit particularly well with React&#8217;s component structure (and similarly in Vue or Svelte, though less dominant there). It also sparked debates in the community &#8211; some developers loved the convenience, while others felt it was an overreach, complicating CSS which is a fundamentally simple, declarative language. We even started to see some &#8220;<a href="https://dev.to/srmagura/why-were-breaking-up-wiht-css-in-js-4g9b#:~:text=This%20article%20focused%20on%20runtime,These%20include">backlash</a>&#8221; by the early 2020s, where certain teams that had gone all-in on CSS-in-JS decided to revert to simpler approaches for performance or simplicity&#8203;. This highlights an important lesson: no approach is one-size-fits-all, and what&#8217;s fashionable in one era might be re-evaluated in the next. We&#8217;ll discuss how to choose among these approaches later on.</p><p>Before that, there was another orthogonal trend happening in CSS around the same time &#8211; a shift toward <strong>utility-first CSS</strong>, which took a very different philosophy than component-specific styles or CSS-in-JS.</p><h2>Utility-First CSS and Atomic Design (Late 2010s)</h2><p>While many developers were co-locating styles with components or using methodologies to carefully structure CSS, another school of thought was emerging: <strong>What if we don&#8217;t write custom CSS for each component at all?</strong> Instead, what if we had a predefined set of tiny utility classes for common styles (like <code>.mt-4</code> for margin-top or <code>.text-center</code> for centering text) and we build our UI by composing these in our HTML? This idea isn&#8217;t entirely new &#8211; it traces back to concepts like <em>Atomic CSS</em> or functional CSS from the mid-2010s &#8211; but it really took off with modern tooling in the late 2010s.</p><p>A pivotal project in this space is <strong>Tailwind CSS</strong>, a utility-first framework <a href="https://adamwathan.me/going-full-time-on-tailwind-css/#:~:text=Going%20Full">first released in late 2017</a>&#8203;. Tailwind provides a comprehensive set of small classes that each apply a single CSS declaration (or a small group). For example, Tailwind&#8217;s <code>.bg-blue-500</code> sets a background color, <code>.px-4</code> adds horizontal padding, <code>.flex</code> makes an element a flex container, etc. Instead of writing a new CSS class for your &#8220;Card&#8221; component, a developer using Tailwind might write <code>&lt;div class="bg-white text-gray-800 p-6 rounded shadow-md"&gt;</code> directly in their HTML/JSX &#8211; applying a bunch of utility classes to get the desired appearance.</p><p><strong>Why do this?</strong> The utility-first approach offers several benefits:</p><ul><li><p><em>Speed of Development:</em> You don&#8217;t have to name or define new CSS classes for every element. You pick from a palette of existing utilities to style something on the fly. This can be very fast once you&#8217;re familiar with the classes. It also avoids the mental overhead of context-switching between HTML and CSS files; you style as you build the markup.</p></li><li><p><em>Consistency:</em> Because the utility classes are pre-defined (often based on a design system scale for colors, spacing, etc.), using them promotes consistency. If every margin is one of a set of values (e.g., 0.5rem, 1rem, 2rem, etc. via classes) and every color is from a standardized palette, your UI is less likely to have arbitrary, inconsistent values.</p></li><li><p><em>Small CSS Bundle (with Purging):</em> Utility frameworks like Tailwind can generate thousands of classes, but modern build tools can &#8220;purge&#8221; (tree-shake) the ones you don&#8217;t use. The result is your production CSS contains only the classes actually used in your HTML. This can be surprisingly efficient &#8211; many Tailwind projects end up with smaller CSS files than an equivalent hand-written stylesheet that might include unused styles or overlapping rules.</p></li><li><p><em>Design Systems and Teams:</em> Utility classes can serve as the primitive building blocks for a design system. Designers can work with developers to decide on the scale of spacing, colors, etc., and those become the utility classes. Team members then have a common language: a developer sees <code>class="text-lg font-semibold text-blue-600"</code> and can immediately understand the visual outcome without hunting through CSS files.</p></li></ul><p>However, utility-first CSS also has its downsides and critics. The most common critique is that it bloats HTML and mixes concerns: the HTML structure is littered with what essentially are styling instructions. Detractors argue this is similar to inline styles or the old presentational markup days. <a href="https://news.ycombinator.com/item?id=24034453#:~:text=I%20don%27t%20understand%20tailwind,using%20HTML%20attributes%20for%20styling">As one developer questioned</a>, <em>&#8220;The entire point of CSS is to separate style from structure. How does applying composable utility classes to all of your HTML elements differ from the old days of using HTML attributes for styling?&#8221;</em>&#8203;</p><p>This captures the initial skepticism many had &#8211; are we undoing the separation of concerns that CSS was meant to achieve?</p><p>Proponents of utility-first respond that these classes are an abstraction <em>of CSS</em>, not a return to <code>&lt;font&gt;</code> tags. They point out that utility classes are still defined in CSS &#8211; the style rules are just applied via reusable classes rather than unique selectors. Also, since the classes are thoughtfully chosen and systematized, the approach remains maintainable. In fact, many who actually try utility-first styling report a boost in productivity. As <a href="https://news.ycombinator.com/item?id=24034453#:~:text=Once%20you%20get%20over%20the,to%20abstract%20further%20with%20%40apply">one Tailwind user noted</a>, once you learn the syntax, <em>&#8220;it gets to be VERY productive&#8230; like writing CSS at a slightly higher level of abstraction,&#8221;</em> largely because you &#8220;don&#8217;t have to edit two separate files&#8221; (HTML and CSS) for styling&#8203;. The ability to rapidly prototype designs by composing utilities can be empowering.</p><p>The utility-first vs. custom CSS debate often comes down to preference and context. Some teams love that their markup is self-descriptive (you can often guess the look from the class names) and that they rarely write CSS from scratch. Others prefer the semantic clarity of naming a class for what the component <strong>is</strong> (e.g., <code>.card</code> or <code>.navbar</code>) rather than what it looks like. One compromise is to use utilities for spacing and small tweaks but still have semantic component classes for higher-level styling. Tailwind even allows extracting components (using <code>@apply</code> or just creating new classes that compose utilities) when needed, so it&#8217;s not an all-or-nothing proposition.</p><p>By the early 2020s, <strong>Tailwind CSS skyrocketed in popularity</strong>, joining the likes of Bootstrap and Foundation as one of the go-to CSS frameworks, but with a very different philosophy from those older UI component frameworks. Utility-first CSS became a mainstream option, especially in new projects and startups that valued speed. It&#8217;s worth noting that even some teams that previously went all-in on CSS-in-JS <a href="https://dev.to/srmagura/why-were-breaking-up-wiht-css-in-js-4g9b#:~:text=Utility%20Classes">shifted to a hybrid approach</a>: using a utility class system alongside simpler CSS modules, to get the best of both worlds (fast development, good runtime performance)&#8203;.</p><h2>Modern Best Practices, Pitfalls, and Anti-Patterns</h2><p>With so many approaches in play &#8211; from BEM to Tailwind, Sass to styled-components &#8211; the state of front-end styling in 2025 is incredibly rich. Yet, regardless of approach, there are <strong>common pitfalls and anti-patterns</strong> that engineers should watch out for. Many lessons have been learned over the past two decades of CSS evolution:</p><ol><li><p><strong>Global Scope &amp; Specificity Wars:</strong> One classic CSS pitfall is relying on overly broad or overly specific selectors in the global scope. For example, using an <code>#id</code> selector or a long chain like <code>#main .content .profile .details p</code> will make it hard to override styles later. Overly specific selectors lead to what&#8217;s known as specificity wars &#8211; you end up needing <code>!important</code> or even more specific rules to counteract earlier styles. A notorious anti-pattern is liberally using <code>!important</code> to force styles; this often <a href="https://dev.to/codeparrot/how-not-to-do-css-1cop#:~:text=The%20%21important%20rule%20in%20CSS,manage%20stylesheet">cascades into a mess</a> where &#8220;the only way to override a style is by using another <code>!important</code>, leading to a messy, hard-to-manage stylesheet.&#8221;&#8203; Modern methodology (BEM, etc.) and encapsulation are partial solutions: they encourage focusing on classes with moderate specificity and avoid ids or element selectors for styling. To avoid this pitfall: keep selectors as simple as needed, prefer classes over ids, and use the cascade intentionally (or not at all, if you encapsulate).</p></li><li><p><strong>Over-Nesting in Preprocessors:</strong> Sass and Less made nesting selectors convenient &#8211; perhaps <em>too</em> convenient. It&#8217;s easy to create deeply nested rules mirroring HTML structure, but this often yields very specific CSS and large selectors that are hard to maintain. For instance, nesting five levels deep in Sass will generate a selector like <code>.nav ul li a span { ... }</code>, which is brittle. This is such a common mistake that it&#8217;s explicitly <a href="https://dev.to/codeparrot/how-not-to-do-css-1cop#:~:text=match%20at%20L135%20Over,Preprocessors">called out</a> as an anti-pattern&#8203;. The fix is straightforward: limit nesting, ideally no more than 2 levels deep in most cases. If you find yourself writing Sass with heavy indentation, consider refactoring using BEM (so you can flatten the structure).</p></li><li><p><strong>Inline Styles and DOM Manipulation of Styles:</strong> In modern frameworks, we rarely see <code>&lt;div style="..."&gt;</code> in markup for primary styling, because it mixes content and style. This is considered an anti-pattern except for dynamic or one-off cases. The same goes for using JavaScript to set CSS properties on elements one by one &#8211; it&#8217;s usually better to toggle classes (perhaps via a framework) and have those classes defined in CSS. Inline styles also don&#8217;t take advantage of CSS cascade or media queries easily, and can&#8217;t be reused. An excessive use of inline styles <a href="https://dev.to/codeparrot/how-not-to-do-css-1cop#:~:text=Using%20Inline%20Styles%20Excessively">is highlighted</a> as a &#8220;how not to do CSS&#8221; mistake&#8203;.</p></li><li><p><strong>Not Leveraging Modern Layouts:</strong> A historical pitfall was sticking to outdated techniques like floats for layout well past their prime. As of 2025, CSS Grid and Flexbox are well-supported and vastly simplify layout compared to float/clear hacks or early frameworks. Using floats for whole-page layout today is an anti-pattern &#8211; it results in more markup (clearing elements, etc.) and fragile design. If you catch yourself adding a clearfix, ask if a flexbox or grid could achieve the layout more cleanly. Modern CSS capabilities (flex, grid, multi-column, container queries) exist to make these older approaches obsolete. As a solution, continuously update your CSS knowledge to avoid clinging to workarounds that CSS no longer needs.</p></li><li><p><strong>Over-Reliance on Frameworks Without Understanding:</strong> Whether it&#8217;s Bootstrap, Tailwind, or Material UI, using a framework blindly can lead to problems. Common issues include overriding a framework&#8217;s styles in many places (if you find yourself writing a lot of <code>!important</code> to override Bootstrap, you might be fighting the framework too much), or not customizing it (leading to a &#8220;Bootstrap look&#8221; that doesn&#8217;t match your brand). It&#8217;s an anti-pattern if your team cannot debug CSS issues because they originate in a black-box framework. The remedy is to treat frameworks as helpers, not crutches: read their docs, use their patterns, but also know CSS fundamentals to extend or override properly when needed. Also, purge or remove unused parts of frameworks in production to avoid bloat.</p></li><li><p><strong>Ignoring Performance of Styles:</strong> We think of performance mostly in terms of JavaScript, but CSS can impact it too. Huge CSS files (500KB+ of CSS) can slow initial page rendering, and heavy use of complex selectors (e.g., universal selectors or very nested ones) can marginally affect style calculation. More critically, some CSS-in-JS (if not optimized) can delay styles from applying, causing flashes of unstyled content. And large numbers of DOM elements with individual style tags (in extreme CSS-in-JS cases or poorly managed Shadow DOM) can tax the browser. The pitfall is not considering these aspects. The guidance: measure and optimize CSS delivery &#8211; e.g., use critical CSS, code-split your styles if using a SPA, and prefer simpler selectors. If you use CSS-in-JS, consider libraries that compile to static CSS or use it sparingly for dynamic parts.</p></li><li><p><strong>Lack of Naming Conventions or Consistency:</strong> This is more subjective, but a codebase where one developer uses <code>.red-btn</code> class, another uses <code>.button-primary</code>, and another uses <code>#submit</code> for the same kind of element is clearly unmaintainable. Having no agreed-upon approach is an anti-pattern in itself. It leads to duplicate styles, dead code, and confusion. The fix is choosing <em>some</em> methodology (even a lightweight one): maybe it&#8217;s BEM, maybe it&#8217;s &#8220;component-name__element&#8221; convention, or maybe it&#8217;s simply &#8220;all classes must be lowercase and use dashes and reflect purpose.&#8221; Consistency is key. Modern tooling can help enforce this (style linters, etc.), but it largely comes down to team agreement.</p></li><li><p><strong>Over-engineering or Under-engineering Styles:</strong> We&#8217;ve seen both ends. Over-engineering: creating a complex build with five different preprocessors and frameworks when a simple CSS file would do, or abstracting every little style into CSS variables and mixins even when not truly needed &#8211; this can make simple things hard to follow. Under-engineering: dumping thousands of lines in one file with no structure at all. The sweet spot is <em>pragmatism</em>. Use methodologies and tools that provide clear value (e.g., a design system, a good naming scheme), but don&#8217;t introduce complexity for its own sake. For instance, if you have a small site, you probably don&#8217;t need CSS-in-JS or a utility framework &#8211; plain well-structured CSS might be fine. Conversely, if you have a large application with multiple themes, using CSS variables and a methodology is almost a must.</p></li></ol><p>Being aware of these pitfalls will help you avoid common mistakes, regardless of which styling approach or framework you use. The good news is that the community has already identified many of these, and both practices and tools have evolved to mitigate them (for example, CSS cascade layers introduced in 2022 can help manage specificity across large projects; autoprefixer tools handle vendor issues; linters can catch things like !important usage, etc.). As you build, keep these lessons in mind and you&#8217;ll sidestep a lot of technical debt in your CSS.</p><h2>Choosing the Right Styling Approach for a Project</h2><p>Given the rich history and myriad options, how should an engineer in 2025 decide on a styling approach for a new project (or a major revamp)? The truth is, <strong>there is no one-size-fits-all answer</strong> &#8211; it depends on your team, project requirements, and even personal or organizational preferences. Here are some practical insights and considerations to help guide the decision:</p><ol><li><p><strong>Team Expertise and Preference:</strong> Assess what your team is familiar with. If you have CSS veterans who have long used Sass + BEM, that combo might be very productive for you &#8211; there&#8217;s little learning curve and many gotchas are already known. On the other hand, if your team is full of React developers who think in JavaScript, CSS-in-JS or styled-components might click more naturally for them. A solution that the team <em>knows</em> (or is eager to learn) will likely be executed better than something foreign, even if the foreign option is trendy. Leverage your team&#8217;s strengths.</p></li><li><p><strong>Project Size and Longevity:</strong> The larger and longer-lived a project is, the more you benefit from formal structure. For a small marketing website or a quick prototype, you might not need a heavy architecture &#8211; a few well-organized CSS files or a utility framework to move fast could be fine. But for a big application that will be maintained over years, investing in a scalable methodology (BEM/SMACSS or a design system with utilities) pays off. For long-term projects, also consider maintainability: Will new team members understand the approach? Is there documentation (internal or community) to help them get up to speed? Established methodologies have the advantage here.</p></li><li><p><strong>Design Consistency vs. Flexibility:</strong> If your project has a strong design system or needs pixel-perfect consistency, you may lean towards approaches that enforce consistency. Utility-first frameworks shine here because they literally encode the design system into class names &#8211; deviating requires effort. Likewise, a component library (like using Material UI or Ant Design) provides consistency out-of-the-box. On the other hand, if your project is more free-form or creative, and you expect unique styles and custom layouts, a utility framework might feel too constraining and verbose. You might prefer writing bespoke CSS for each component (perhaps with BEM and Sass to assist). Consider how much of the UI can be standardized. Many projects benefit from a hybrid: standardize the basics (colors, spacing, common components) and allow custom styling for unique features.</p></li><li><p><strong>Development Speed Needs:</strong> Sometimes you need to crank out a UI quickly &#8211; startup culture and MVPs value this. Utility-first can be very fast once you know it, as can using a ready-made CSS framework (like Bootstrap&#8217;s components). If time-to-market is critical, choose something enabling rapid development (Tailwind, Bootstrap, or even plain CSS with quick-and-dirty classes). Conversely, if you have time to engineer carefully or the project demands very clean separation (e.g., in a large enterprise with strict code standards), you might favor a more structured approach even if initial development is slower.</p></li><li><p><strong>Framework Integration:</strong> The choice might be influenced by the primary JavaScript framework you use. For example, if you&#8217;re deep in the React ecosystem, CSS-in-JS libraries or CSS Modules will integrate seamlessly, and there&#8217;s plenty of community support for them. If you&#8217;re using Angular, the framework already gives you style encapsulation &#8211; so you might just use simple Sass files per component and call it a day (Angular also has good support for Tailwind or global styles, but many Angular devs find less need for CSS-in-JS). Vue offers scoped styles in SFCs, which might reduce the need for something like styled-components (though you can still use them if desired). In short, align with your tech stack: each framework has known best practices for styling; it&#8217;s wise to at least consider those conventions unless you have strong reasons not to.</p></li><li><p><strong>Performance Considerations:</strong> If your application is performance-sensitive (e.g., a complex web app that needs to run on low-end devices, or an app where initial load time is critical), be mindful of the styling approach&#8217;s impact. Traditional external CSS files are very performant once loaded (CSS is parsed once, and applying classes is cheap). Approaches that generate styles at runtime or inject lots of style tags (some older CSS-in-JS, heavy Shadow DOM usage) might incur a cost. This doesn&#8217;t mean avoid them at all costs &#8211; just be sure to measure and, if needed, use modern variants that mitigate issues (like using CSS-in-JS libraries that compile to CSS, or splitting your styles). If you anticipate thousands of components on screen (like a data grid or big dashboard), a utility-first approach might actually be beneficial to avoid a huge stylesheet, or a well-structured BEM CSS might be easier to debug &#8211; weigh these factors with performance in mind.</p></li><li><p><strong>Tooling and Workflow:</strong> Another practical factor is your build process and tools. If your project is set up with Webpack/Vite etc., adding Sass is trivial &#8211; so using a preprocessor is a non-issue. But if you&#8217;re working in a more barebones environment or something like a CMS with limited build steps, maybe adding a build step for Sass is not worth it and plain CSS or a simple PostCSS pipeline is better. If you use TypeScript heavily, you might appreciate typed CSS Modules (there are libraries that generate <code>.d.ts</code> for CSS classes), which nudge you to use CSS Modules approach. Or if you love using design tokens (perhaps coming from a design tools integration), using CSS variables in plain CSS might suffice. Essentially: consider what your existing toolchain supports readily and what fits naturally.</p></li><li><p><strong>Community and Future-Proofing:</strong> It can be risky to adopt a very niche styling approach that few others use, as you might struggle to find help or hiring people experienced in it. Approaches like BEM, Sass, CSS-in-JS, Tailwind &#8211; these are widespread enough that you&#8217;ll find plenty of resources and contributors who know them. But a very custom in-house methodology or an obscure library could pose challenges. Also, consider the longevity: CSS itself is not going anywhere, but specific libraries can rise and fall. (For instance, if you were betting on Stylus preprocessor, note that it&#8217;s far less used now than Sass/Less). If you choose a newer approach, have a fallback plan or ensure the CSS it produces is clean so you could maintain it even if the tool is gone. On the flip side, don&#8217;t be afraid to try modern techniques that solve real problems &#8211; just be conscious of their maturity.</p></li></ol><p>Finally, remember that <strong>you can mix and match approaches</strong> to some extent. Many large applications use a combination: perhaps legacy pages still use BEM CSS, new components use CSS-in-JS, and utility classes are used for spacing and layout helpers. It&#8217;s okay to not be purist. The key is managing this complexity &#8211; for example, you might enforce that <em>new</em> code should follow the new approach, and gradually refactor old code. Just avoid mixing in the <em>same component</em> or context unless you know what you&#8217;re doing (it can be confusing if some styles come from global CSS and some from CSS-in-JS for the same element).</p><p>In summary, choosing the best styling approach is about finding the right balance for <em>your situation</em>. Use the historical context and lessons to inform your choice: for instance, if you know your team struggled with specificity issues in the past, maybe a utility-first or CSS-in-JS approach that limits cascade could help. If you experienced a messy global CSS file, maybe adopting BEM with a build process will instill order. And if you&#8217;ve felt slowed down by too much ceremony in CSS, a lightweight approach with just Tailwind or just raw CSS might speed you up. Weigh the pros and cons in light of your project&#8217;s needs.</p><h2>Looking Forward: Beyond 2025</h2><p>Front-end styling has come a long way in 30 years, but the evolution is not done. What might the future hold for CSS and styling techniques beyond 2025? While it&#8217;s hard to predict precisely, a few trends and emerging technologies hint at where we might be heading:</p><ul><li><p><strong>Native CSS Enhancements:</strong> The CSS standards continue to grow more powerful, potentially reducing the need for external tooling. Features like <strong>CSS Cascade Layers (2021)</strong> help developers manage specificity in large projects by creating explicit style layers (e.g., one for base styles, one for components, one for overrides) &#8211; this is like an answer to the specificity wars at the language level. <strong>Container Queries (2022)</strong> allow components to style themselves based on their container size, not just the viewport, which could reduce the need for some JavaScript layout hacks or complex responsive logic. There&#8217;s also talk of a future **<code>:has()</code> selector (now available in some browsers) enabling parent-selectors which could simplify certain patterns. As these features become widely supported, some tasks we used frameworks or scripts for might be achievable with pure CSS. For example, a lot of &#8220;responsive component&#8221; patterns that resorted to JS could be done with container queries + Flexbox/Grid alone. We might see developers relying more on raw CSS capabilities and simplifying their toolchains when possible.</p></li><li><p><strong>Design Systems &amp; Tokens:</strong> The industry trend toward design systems means more standardization in how styles are defined and shared. Technologies around <strong>design tokens</strong> (platform-agnostic variables for colors, spacing, etc.) are evolving. It&#8217;s possible that standards will emerge to make using design tokens in CSS easier (some of this can be done with CSS custom properties today). We may see more integration between design tools (like Figma, Sketch) and code &#8211; for instance, design tokens exported directly to CSS or JS, closing the gap between design and development. As more companies adopt design systems, the styling approach often becomes a part of that system (whether it&#8217;s a custom CSS framework or guidelines on using Tailwind or a component library). This could lead to more <em>consistency</em> across the industry, where certain patterns become defaults.</p></li><li><p><strong>Continued Refinement of CSS-in-JS and Alternatives:</strong> CSS-in-JS is not static; it has been undergoing its own evolution. The newer generation of CSS-in-JS libraries performs compilation at build time (no runtime injection) and smartly output static CSS files. This approach gives many benefits of CSS-in-JS (scoping, using JS logic for styles) without the performance cost. We might see these compile-time CSS-in-JS tools become the norm, or even get absorbed into framework tooling. For example, frameworks could natively support something like &#8220;scoped CSS with JS expressions&#8221; that compiles away. On the other hand, the boundaries between &#8220;just CSS&#8221; and &#8220;CSS-in-JS&#8221; might blur: with proposals like the CSS <code>@when</code> rule (conditional rules in CSS) or more powerful native capabilities, developers might not need JavaScript to achieve dynamic styling. In React, there&#8217;s talk about evolving the styling story (perhaps a future React CSS runtime or better SSR integration). By 2030, it wouldn&#8217;t be surprising if the concept of CSS-in-JS either becomes so standard that it&#8217;s just a checkbox in your framework, or it gets replaced by something new that addresses its shortcomings while preserving its strengths.</p></li><li><p><strong>Web Components &amp; Interoperability:</strong> If Web Components gain more traction, styling might standardize around them for certain use cases. The Shadow DOM gives a built-in way to avoid style leakage, which was one big reason for many methodologies. As developers get more comfortable with Shadow DOM (even when using frameworks &#8211; e.g., Angular can use native Shadow DOM, Lightning Web Components in Salesforce use it, etc.), we may see styling strategies that leverage this. Perhaps design systems will ship as Web Components with encapsulated styles, so you just use the component and don&#8217;t worry about CSS conflicts at all. This could complement frameworks, providing standard base components that work anywhere.</p></li><li><p><strong>Tooling and AI:</strong> On the tooling front, we might see smarter CSS linters and refactoring tools that can manage large codebases, or even AI-assisted styling. Imagine an AI that can analyze your CSS and suggest a refactor to BEM, or identify all those unused styles (some tools do this statically, but AI could be more context aware). AI might also help bridge design and code &#8211; e.g., generating CSS from design mockups with better accuracy, or suggesting class name conventions based on project context. It&#8217;s speculative, but given the rise of AI in coding assistance, CSS could benefit too (perhaps by suggesting tailwind class combinations or writing media queries for you).</p></li><li><p><strong>Performance and Platform Changes:</strong> As devices evolve (AR/VR, foldable screens, etc.), CSS will adapt. Responsive design might need to consider new dimensions. Also, with increasing emphasis on performance and Core Web Vitals, there&#8217;s a push to ensure styles (like any resource) are delivered optimally. Techniques like extracting critical CSS might become default in frameworks. There&#8217;s already a move in React frameworks (Next.js, Remix) to do style splitting automatically. By 2025 and beyond, more of these optimizations could be baked in, so developers focus on writing styles and the tools ensure they load efficiently.</p></li></ul><p>In essence, the future will likely bring <strong>more convergence</strong> in some areas (perhaps a set of best practices that most projects follow, much like how component-based UI is now standard) and <strong>more innovation</strong> in others (new CSS features, new libraries). As an engineer, staying informed and adaptable is key. What remains constant is the core goal: making it easier to style applications in a maintainable, efficient way. The specifics of <em>how</em> will continue to evolve.</p><h2>Now you know</h2><p>Front-end styling has journeyed from humble beginnings &#8211; tweaking fonts on static pages &#8211; to a sophisticated discipline with multiple paradigms. We&#8217;ve seen how early hacks gave way to CSS, how the community tamed the cascade with methodologies, and how the component revolution upended our approach to organizing CSS. Today, engineers have more choices than ever: whether to write styles in a CSS file or in JavaScript, whether to adopt a utility-first library or craft a bespoke design system, whether to lean on classic Sass or modern CSS variables.</p><p>Understanding this history isn&#8217;t just an academic exercise; it&#8217;s practical knowledge. It reveals <em>why</em> certain best practices exist &#8211; why we avoid IDs in CSS (a lesson from specificity fights), or why BEM came about (to enable large teams to collaborate without collision), or why Tailwind&#8217;s approach resonated (speed and consistency). With this context, you can make more informed decisions. Perhaps you&#8217;ll realize your small project doesn&#8217;t need the heavyweight approach you were considering, or conversely, that your growing app would benefit from a methodology you hadn&#8217;t tried. You might combine ideas &#8211; using BEM naming within a CSS-in-JS setup, for example &#8211; to get the best of both.</p><p>Crucially, <strong>there&#8217;s no silver bullet</strong>. Every approach has pros and cons, and what works for one project/team might not for another. What the evolution teaches us is to be intentional: choose a strategy that addresses the challenges you anticipate, and be ready to adapt as needs change. And don&#8217;t be afraid to evolve your styling approach over time, just as the industry has. Legacy code can be refactored (gradually) toward better patterns, and new features can pilot new techniques.</p><p>In a field that changes as quickly as front-end development, having this historical perspective is like having a map. It won&#8217;t tell you exactly where to go, but it shows you the terrain and the paths others have taken &#8211; including where they stumbled. As we step beyond 2025, new tools and techniques will emerge, but they&#8217;ll build on the foundations we&#8217;ve discussed. By keeping these lessons in mind, you as an engineer can confidently navigate the future of CSS, crafting UIs that are not only beautiful and responsive but also maintainable and efficient.</p>]]></content:encoded></item><item><title><![CDATA[‘Spawn Me a PR’ Isn't Ready for Large Codebases: The Context Barrier to AI Code Generation]]></title><description><![CDATA[Practical, production-useful code generation is a famously thorny challenge - yet if you browse X or LinkedIn, you might get the impression that we&#8217;re mere weeks away from end-to-end AI solutions taking the place of entire dev teams.]]></description><link>https://smalldiffs.gmfoster.com/p/why-spawn-me-a-pr-is-still-a-dream</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/why-spawn-me-a-pr-is-still-a-dream</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Thu, 23 Jan 2025 21:59:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tzpH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0093d7-616c-416b-ac4a-f693cb389147_2434x1824.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Practical, production-useful code generation is a famously thorny challenge - yet if you browse X or LinkedIn, you might get the impression that we&#8217;re mere weeks away from end-to-end AI solutions taking the place of entire dev teams. After all, LLMs can already spit out functional, clean-looking code samples. That part is undeniably cool.</p><p>And yet&#8230; we can&#8217;t simply ask an LLM, &#8220;Create a PR with a new login endpoint for my enterprise codebase,&#8221; and watch it handle everything automatically - at least not in any general, reliable way. Why? Because for serious, real-world development, <em>context is everything</em>. Production environments are full of intricate domain logic, legacy architecture quirks, and business-specific constraints that a model just can&#8217;t absorb with a single prompt.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tzpH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0093d7-616c-416b-ac4a-f693cb389147_2434x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tzpH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0093d7-616c-416b-ac4a-f693cb389147_2434x1824.png 424w, https://substackcdn.com/image/fetch/$s_!tzpH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0093d7-616c-416b-ac4a-f693cb389147_2434x1824.png 848w, https://substackcdn.com/image/fetch/$s_!tzpH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0093d7-616c-416b-ac4a-f693cb389147_2434x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!tzpH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0093d7-616c-416b-ac4a-f693cb389147_2434x1824.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tzpH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0093d7-616c-416b-ac4a-f693cb389147_2434x1824.png" width="1456" height="1091" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e0093d7-616c-416b-ac4a-f693cb389147_2434x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1091,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:268970,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tzpH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0093d7-616c-416b-ac4a-f693cb389147_2434x1824.png 424w, https://substackcdn.com/image/fetch/$s_!tzpH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0093d7-616c-416b-ac4a-f693cb389147_2434x1824.png 848w, https://substackcdn.com/image/fetch/$s_!tzpH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0093d7-616c-416b-ac4a-f693cb389147_2434x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!tzpH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0093d7-616c-416b-ac4a-f693cb389147_2434x1824.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p> A few AI-driven products have made headlines by claiming major revenue or funding: <a href="https://www.nytimes.com/2025/01/14/business/dealbook/anysphere-cursor-25-billion-valuation.html">Cursor hitting impressive ARR</a>, <a href="https://x.com/boltdotnew/status/1882106655258894390">Bolt.new raising nine-figure rounds</a>, or Vercel V0 launching with big hype. These tools do create meaningful value, but they&#8217;re still fundamentally constrained by how they handle context. To me, that&#8217;s the real story: an ongoing search for how best to feed large, complex codebases into AI while preserving nuance. Until then, these are better fitting for spinning up weekend side projects than for building features at 100+ engineer companies.</p><div id="youtube2-927W6zzvV-c" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;927W6zzvV-c&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/927W6zzvV-c?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p><em>^ Primagen showcasing the woeful current practical state of Devin. The Devin-dream is interesting, but the current real-world value appears weak.</em></p><h2><strong>Three Patterns of AI Code Generation</strong></h2><p>I&#8217;ve been observing three distinct approaches in the market. Each wrestles with the context problem in its own way.</p><h4><strong>1. &#8220;New Project&#8221; Generators (<a href="https://bolt.new/">Bolt.new</a>, <a href="https://lovable.app/">Lovable</a>, <a href="https://v0.dev/">V0</a>, etc.)</strong></h4><p>One category is focused on spinning up new codebases from scratch. You provide a prompt like, &#8220;Build me a minimal Rails app with user registration,&#8221; and - boom - a service stitches together a few templated modules, dropping in some boilerplate code to get you started.</p><p><strong>Strengths:</strong></p><ul><li><p>By only dealing with <em>greenfield</em> scenarios, these tools dodge the complexities of preexisting architecture. No legacy schemas or cryptic internal APIs.</p></li><li><p>It&#8217;s like the AI version of create-react-app: quick, practical, and surprisingly helpful if your aim is a demo or weekend project.</p></li></ul><p><strong>Limitations:</strong></p><ul><li><p>For any medium-to-large organization, the real challenge isn&#8217;t spinning up something brand new; it&#8217;s integrating new features into an existing labyrinth of code.</p></li><li><p>Even in modest codebases, they can&#8217;t parse years of domain-specific logic or data schemas. That remains a manual task - one that grows exponentially with project size.</p></li></ul><h4><strong>2. IDE-Based Assistants (<a href="https://www.cursor.com/">Cursor</a>, <a href="https://github.com/features/copilot">Copilot</a>, <a href="https://codeium.com/windsurf">Windsurf</a>, etc.)</strong></h4><p>The second category fits neatly into a developer&#8217;s daily workflow. You&#8217;ve likely seen tools like GitHub Copilot: they integrate directly into your IDE and generate code suggestions as you type.</p><p><strong>Strengths:</strong></p><ul><li><p>They work well in complex codebases because the <em>human developer</em> guides the AI by opening relevant files, highlighting specific contexts, and verifying suggestions.</p></li><li><p>This has proven to be the most successful short-term strategy for enterprise use. Engineers already live in their IDEs, so it&#8217;s an easy add-on with tangible benefits.</p></li></ul><p><strong>Limitations:</strong></p><ul><li><p>Although these tools are genuinely helpful, they still rely on the human to supply context incrementally. It&#8217;s not a &#8220;fire-and-forget&#8221; solution.</p></li><li><p>You&#8217;re not asking the AI to read the entire codebase at once. You open a handful of files, the AI sees them, and that&#8217;s it. For big, cross-cutting features, you end up doing a lot of manual bridging.</p></li></ul><h4><strong>3. &#8220;Headless Agent&#8221; Solutions (<a href="https://devin.ai/">Devin</a>, <a href="https://www.factory.ai/">Factory</a>, etc.)</strong></h4><p>The third approach is more ambitious: these tools aim to operate in the background, ingesting your entire repo and waiting for tasks. For instance, you create a GitHub issue or a Linear ticket, the AI sees it, tries to figure out the relevant code, and then automatically opens a PR with a fix or new feature.</p><p><strong>Strengths:</strong></p><ul><li><p>This is the ultimate vision of code generation: ask for a high-level outcome (&#8220;add a new authentication method&#8221;), and the system scours the repo, hunts down relevant sections, and implements changes.</p></li><li><p>Could save developers from drudgery and context-switching if it worked perfectly.</p></li></ul><p><strong>Limitations:</strong></p><ul><li><p>The context gap is still huge. For large codebases, it&#8217;s nearly impossible to incorporate all relevant details without constant back-and-forth guidance.</p></li><li><p>Right now, these tools reliably handle only small bug fixes or housekeeping tasks. For anything bigger, they tend to produce broken or incomplete solutions.</p></li></ul><h2><strong>Where Do We Go From Here?</strong></h2><p>A lot of people are betting that models will get orders of magnitude smarter, cheaper, and more context-aware over the next 12 to 24 months. I&#8217;m generally in that camp - I do think we&#8217;ll see exponential improvements in areas like context window size and inference speed.</p><p>In that world, you might imagine entire codebases being shoved into a single context window, letting the AI reason about thousands of files at once. That brute-force approach could eventually erode the need for an IDE-based pattern, because the AI would &#8220;just know&#8221; everything about your project after one big prompt. Sam Altman has openly hinted that the complicated retrieval-augmented generation (RAG) we use today might end up a footnote, superseded by bigger, cheaper models that can ingest everything at once.</p><p>But I&#8217;m cautious for three reasons:</p><ol><li><p><strong>Learning On the Fly:</strong> Human brains train and infer simultaneously. Today&#8217;s AI models are not good at actively re-training when they encounter new domain concepts. They infer from a static knowledge state. <a href="https://www.forbes.com/sites/craigsmith/2025/01/19/googles-titans-give-ai-human-like-memory/">Maybe Google&#8217;s new Titan transformers will help?</a></p></li><li><p><strong>Context Windows Are Finite:</strong> Even a &#8220;two-million-token&#8221; model is dwarfed by the kind of data a developer might hold in their head or the version control history that spans years and millions of lines.</p></li><li><p><strong>Signal vs. Noise:</strong> Dumping an entire codebase into a model&#8217;s prompt can drown the signal in a sea of irrelevant details. Performance often degrades when the input is cluttered.</p></li></ol><h2><strong>A Practical Approach for Today</strong></h2><p>Given these constraints, if I were to build an AI code-generation product right now (targeted at large, real-world codebases), I&#8217;d lean on a few design choices:</p><p><strong>Background Analysis</strong></p><ul><li><p>Set up a process that regularly scans the codebase, file by file, building a robust index of references and dependencies. It can do this asynchronously, so users aren&#8217;t waiting around.</p></li><li><p>Over time, accumulate a detailed &#8220;map&#8221; of the code&#8217;s structure, pulling in only the most relevant context for each potential fix.</p></li></ul><p><strong>Small, High-Confidence Fixes</strong></p><ul><li><p>Focus on specific, repeated patterns - like deprecation warnings, unsafe patterns, or functions that are obviously inefficient.</p></li><li><p>When the system is sure it has a valid fix or optimization, it opens a small PR. If it&#8217;s not sure, it does nothing. This avoids spamming developers with half-baked ideas.</p></li></ul><p><strong>Limit the Scope</strong></p><ul><li><p>Don&#8217;t attempt net-new features or major refactors unless the confidence is rock-solid. For those tasks, an IDE-based approach or a human-led design cycle is still safer.</p></li><li><p>Accept that some big changes are simply out of scope, at least until the model (and context windows) get significantly more advanced.</p></li></ul><p><strong>Learn from PR Interactions</strong></p><ul><li><p>Treat every acceptance or rejection of an AI-generated PR as a data point. Slowly, the system can refine its sense of what &#8220;good&#8221; or &#8220;acceptable&#8221; changes look like in your specific codebase.</p></li></ul><p><strong>Incremental Upgrade Path</strong></p><ul><li><p>When bigger, better models become available, swap them in under the hood. If eventually the model <em>can</em> handle broader changes, that&#8217;s great - but you don&#8217;t have to overhaul the user experience.</p></li><li><p>The key is to keep building user trust along the way. A developer who sees five high-quality fixes is more likely to trust the sixth, even if it&#8217;s bigger.</p><p></p></li></ul><p>Right now, the sweet spot for code generation in large, messy codebases is the IDE-based pattern. It&#8217;s the easiest for real teams to adopt, and it has a track record of success because humans remain in the loop. But it&#8217;s also likely to be a transitional stage. If context windows and model intelligence progress as fast as people expect, the notion of pointing and steering an AI line by line may fade. We&#8217;ll just trust the AI as if it were a well-informed teammate.</p><p>Yet I&#8217;m not convinced we&#8217;ll see &#8220;ask for a new feature in Slack, get a perfect PR&#8221; across a multi-million-line codebase next week or even next quarter. There&#8217;s a gap between today&#8217;s demos and a truly robust solution for large-scale production systems. That&#8217;s why I believe a more methodical, iterative approach - focusing on small, high-value fixes first - might actually yield the most tangible short-term impact.</p>]]></content:encoded></item><item><title><![CDATA[Takehomes & Algos are Both Evil - And Other Lessons from 1000+ SWE Interviews]]></title><description><![CDATA[To hire exceptional engineers, prioritize signal clarity in your interviews, match them tightly to your company&#8217;s true needs, and leverage blind reference checks.]]></description><link>https://smalldiffs.gmfoster.com/p/takehomes-and-algos-are-both-evil</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/takehomes-and-algos-are-both-evil</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Mon, 13 Jan 2025 15:43:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZfEj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0dfa74-c555-4d88-9122-c08c49bd3be0_1642x624.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve spent an inordinate amount of time and mental energy on recruiting top software engineers&#8212;first as an IC interviewing at Airbnb, and later while founding Graphite. Over the last few years, Graphite&#8217;s grown to around thirty people and continues to scale. This means I&#8217;ve coordinated and run interviews for 1,000+ candidates, primarily full-stack software engineers.</p><p>That grind has forced me to reflect on what works and doesn&#8217;t in the recruiting process&#8212;and I want to share some of those reflections. They&#8217;re cobbled together from long conversations with other engineering leaders, talent leads, and a ton of personal experimentation.</p><h2><strong>What Interviews to Run (They&#8217;re All Imperfect)</strong></h2><p>The first realization I&#8217;ve come to is that the specific interviews you run don&#8217;t matter too much. You&#8217;ll find entire threads of angry diatribes online about why &#8220;this&#8221; or &#8220;that&#8221; kind of interview sucks. At some point, you just have to pick a poison and calibrate consistently on it. The industry is famously fractured on how to assess technical skill; if there were a perfect solution, we&#8217;d have settled on it by now.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZfEj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0dfa74-c555-4d88-9122-c08c49bd3be0_1642x624.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZfEj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0dfa74-c555-4d88-9122-c08c49bd3be0_1642x624.png 424w, https://substackcdn.com/image/fetch/$s_!ZfEj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0dfa74-c555-4d88-9122-c08c49bd3be0_1642x624.png 848w, https://substackcdn.com/image/fetch/$s_!ZfEj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0dfa74-c555-4d88-9122-c08c49bd3be0_1642x624.png 1272w, https://substackcdn.com/image/fetch/$s_!ZfEj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0dfa74-c555-4d88-9122-c08c49bd3be0_1642x624.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZfEj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0dfa74-c555-4d88-9122-c08c49bd3be0_1642x624.png" width="1456" height="553" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd0dfa74-c555-4d88-9122-c08c49bd3be0_1642x624.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:553,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:202600,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZfEj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0dfa74-c555-4d88-9122-c08c49bd3be0_1642x624.png 424w, https://substackcdn.com/image/fetch/$s_!ZfEj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0dfa74-c555-4d88-9122-c08c49bd3be0_1642x624.png 848w, https://substackcdn.com/image/fetch/$s_!ZfEj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0dfa74-c555-4d88-9122-c08c49bd3be0_1642x624.png 1272w, https://substackcdn.com/image/fetch/$s_!ZfEj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0dfa74-c555-4d88-9122-c08c49bd3be0_1642x624.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!obHK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dad9f87-8fc1-4101-af8d-7fd6d720b542_1598x612.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!obHK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dad9f87-8fc1-4101-af8d-7fd6d720b542_1598x612.png 424w, https://substackcdn.com/image/fetch/$s_!obHK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dad9f87-8fc1-4101-af8d-7fd6d720b542_1598x612.png 848w, https://substackcdn.com/image/fetch/$s_!obHK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dad9f87-8fc1-4101-af8d-7fd6d720b542_1598x612.png 1272w, https://substackcdn.com/image/fetch/$s_!obHK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dad9f87-8fc1-4101-af8d-7fd6d720b542_1598x612.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!obHK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dad9f87-8fc1-4101-af8d-7fd6d720b542_1598x612.png" width="1456" height="558" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3dad9f87-8fc1-4101-af8d-7fd6d720b542_1598x612.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:558,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:202668,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!obHK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dad9f87-8fc1-4101-af8d-7fd6d720b542_1598x612.png 424w, https://substackcdn.com/image/fetch/$s_!obHK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dad9f87-8fc1-4101-af8d-7fd6d720b542_1598x612.png 848w, https://substackcdn.com/image/fetch/$s_!obHK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dad9f87-8fc1-4101-af8d-7fd6d720b542_1598x612.png 1272w, https://substackcdn.com/image/fetch/$s_!obHK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dad9f87-8fc1-4101-af8d-7fd6d720b542_1598x612.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hyvX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f4ac82-d5e7-430a-93fe-42ff515c12b8_1724x448.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hyvX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f4ac82-d5e7-430a-93fe-42ff515c12b8_1724x448.png 424w, https://substackcdn.com/image/fetch/$s_!hyvX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f4ac82-d5e7-430a-93fe-42ff515c12b8_1724x448.png 848w, https://substackcdn.com/image/fetch/$s_!hyvX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f4ac82-d5e7-430a-93fe-42ff515c12b8_1724x448.png 1272w, https://substackcdn.com/image/fetch/$s_!hyvX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f4ac82-d5e7-430a-93fe-42ff515c12b8_1724x448.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hyvX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f4ac82-d5e7-430a-93fe-42ff515c12b8_1724x448.png" width="1456" height="378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25f4ac82-d5e7-430a-93fe-42ff515c12b8_1724x448.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:378,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109892,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hyvX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f4ac82-d5e7-430a-93fe-42ff515c12b8_1724x448.png 424w, https://substackcdn.com/image/fetch/$s_!hyvX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f4ac82-d5e7-430a-93fe-42ff515c12b8_1724x448.png 848w, https://substackcdn.com/image/fetch/$s_!hyvX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f4ac82-d5e7-430a-93fe-42ff515c12b8_1724x448.png 1272w, https://substackcdn.com/image/fetch/$s_!hyvX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f4ac82-d5e7-430a-93fe-42ff515c12b8_1724x448.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I&#8217;ve tried all variations at Graphite. My main takeaway is that algo-style coding interviews, while imperfect, have been the most consistently useful. Take-homes demand a ton of candidate time, are often cheatable (especially with AI), and produce results whose quality can vary widely based on how much effort someone invests. Did a candidate submit an amazing project because they spent 20 hours on it or because they&#8217;re exceptionally talented? Hard to say. On the other hand, here&#8217;s where algo-style interviews deliver:</p><ol><li><p><strong>They&#8217;re tried and tested.</strong> There&#8217;s a well-established format that&#8217;s understood across our industry.</p></li><li><p><strong>They&#8217;re easily preparable (and beatable).</strong> Both new grads and seasoned engineers can practice and feel some level of control over their fate. It&#8217;s a more level playing field.</p></li><li><p><strong>They can fit into 45 minutes.</strong> You get a tight, controlled environment to glean nuanced signal.</p></li><li><p><strong>They have a correct answer.</strong> That reduces variance and personal bias when deciding pass/fail.</p></li></ol><p>At Graphite, we often run <strong>two separate algo interviews</strong>, each with a different interviewer. That helps mitigate random flukes: even if someone completely chokes on a question in one interview, they still have a second shot. Interestingly, I don&#8217;t see huge divergence in how candidates perform across those two interviews&#8212;but it&#8217;s a good safety net. In the future, I aspire to experiment more with 45-minute-long practical-style interviews.</p><p>Beyond those, I typically run:</p><ul><li><p>A <strong>systems architecture</strong> whiteboarding interview</p></li><li><p>An <strong>experience</strong> interview</p></li><li><p>An interview led by cross-functional stakeholders (e.g., Product or Design)</p></li></ul><h2><strong>I Love the Architecture Interview</strong></h2><p>I find the architecture interview provides most of the deeper signal I need. It tests fluency, reasoning, and open-ended technical thinking. A great candidate might discuss tradeoffs between REST, GraphQL, gRPC, or event-driven APIs, while also touching on how they&#8217;d handle load balancing, caching, or security concerns. The point isn&#8217;t to complete a &#8220;correct solution.&#8221; It&#8217;s about articulating tradeoffs, constraints, and thoughtful decisions&#8212;whether it&#8217;s frontend design, backend scaling, or security hardening.</p><p>A bad candidate might not even know what an API is. A passable candidate will say &#8220;we should use REST.&#8221; But the truly outstanding candidate will say, &#8220;We could use REST, GraphQL, or WebSockets, depending on X, Y, and Z, and here&#8217;s the risk-reward of each.&#8221;</p><h2><strong>The Experience Interview is for Leveling</strong></h2><p>The experience interview is usually the candidate&#8217;s chance to walk through a real project they&#8217;ve built or owned. I&#8217;ll ask questions like: Who came up with the idea? How many people were on the team? Were there any big missteps? How did you handle them? By exploring how they collaborated, how they solved problems, and what they learned, I get a sense of their leadership potential, growth trajectory, and overall maturity. Airbnb taught me that <em>coding alone</em> can&#8217;t distinguish a new grad from a staff engineer&#8212;real past experience usually can.</p><p>So in short, I want these interviews to answer:</p><ol><li><p><strong>Can the candidate code&#8212;and how strong are they at it?</strong></p></li><li><p><strong>Are they fluent in architectural reasoning?</strong></p></li><li><p><strong>How seasoned are they, and at what level of responsibility have they operated?</strong></p></li><li><p><strong>Are they disciplined, clear communicators, and generally courteous?</strong></p></li></ol><p>That&#8217;s all I really need for a reliable hiring decision. Our scorecard, like many other companies&#8217;, is simple: pass each individual interview and earn at least one strong pass from the loop.</p><p><strong>But again:</strong> the specific interviews themselves matter far less than the clarity of the signal. A &#8220;good&#8221; interview gives you a crisp read. A &#8220;bad&#8221; interview yields a bunch of &#8220;meh&#8221; signals that fail to differentiate among the candidates. If five people come through and they&#8217;re all scored as &#8220;slight pass,&#8221; you haven&#8217;t learned anything truly decisive. We killed our longer take-home format precisely because the signal was often muddy. Meanwhile, algorithm interviews, for all their controversy, consistently generate a clear pass/fail/strong pass distribution&#8212;and that matters.</p><h2><strong>Values Interviews: My Evolving Perspective</strong></h2><p>I used to be a volunteer interviewer for Airbnb&#8217;s core values process. It was a robust, multi-day training and something I took pride in. When I started Graphite, I initially cloned that system. But over time, I phased it out for engineering hires&#8212;at least in that official capacity&#8212;because it wasn&#8217;t failing enough candidates who needed to be failed, nor rescuing borderline candidates who might have soared. I wouldn&#8217;t pass someone who bombs every technical and architectural interview just because they told a great story about living the company values. Conversely, if they aced everything else, I&#8217;m not going to fail them for not delivering a perfect values anecdote.</p><p>Today, I still care deeply about kindness, work ethic, and collaboration, but I watch for signs of that during the experience interview (and, honestly, throughout the loop in general). If there&#8217;s a glaring red flag, that&#8217;s easy to handle. No specialized interview needed. Someday, I might refine or reintroduce a formal values screen, but for now, this simpler approach has worked well.</p><h2><strong>The Hiring Bar vs. a Hiring Bullseye</strong></h2><p>There&#8217;s a mythic, invisible entity in the recruiting world called &#8220;the hiring bar.&#8221; Nobody can say exactly what it is, or write it down, yet everyone references it. People wonder, &#8220;Are we lowering the bar too much?&#8221; or &#8220;Is this candidate a bar-raiser?&#8221; It&#8217;s reminiscent of big tech hiring&#8212;Google, Meta, Amazon&#8212;where you hire for &#8220;generic greatness&#8221; rather than specific team needs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mmc0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeba425f-dcc8-4cd0-9435-fef7b88419bc_1824x732.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mmc0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeba425f-dcc8-4cd0-9435-fef7b88419bc_1824x732.png 424w, https://substackcdn.com/image/fetch/$s_!Mmc0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeba425f-dcc8-4cd0-9435-fef7b88419bc_1824x732.png 848w, https://substackcdn.com/image/fetch/$s_!Mmc0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeba425f-dcc8-4cd0-9435-fef7b88419bc_1824x732.png 1272w, https://substackcdn.com/image/fetch/$s_!Mmc0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeba425f-dcc8-4cd0-9435-fef7b88419bc_1824x732.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mmc0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeba425f-dcc8-4cd0-9435-fef7b88419bc_1824x732.png" width="1456" height="584" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/feba425f-dcc8-4cd0-9435-fef7b88419bc_1824x732.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:584,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64451,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Mmc0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeba425f-dcc8-4cd0-9435-fef7b88419bc_1824x732.png 424w, https://substackcdn.com/image/fetch/$s_!Mmc0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeba425f-dcc8-4cd0-9435-fef7b88419bc_1824x732.png 848w, https://substackcdn.com/image/fetch/$s_!Mmc0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeba425f-dcc8-4cd0-9435-fef7b88419bc_1824x732.png 1272w, https://substackcdn.com/image/fetch/$s_!Mmc0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeba425f-dcc8-4cd0-9435-fef7b88419bc_1824x732.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But this can be problematic if the &#8220;bar&#8221; becomes disconnected from the actual business problem. If you&#8217;re not hiring for a specific need&#8212;or you simply want to land the best possible people no matter what&#8212;then fine, the bar metaphor might sort of work. But for most of us, especially at startups or on smaller teams, we have immediate business challenges that need solving. We&#8217;re not just collecting &#8220;10X engineers&#8221; to keep in a back room; we need real solutions, pronto.</p><p>That&#8217;s why I prefer a <strong>bullseye</strong> metaphor:</p><ul><li><p><strong>Need (the center).</strong> What job or jobs are you trying to fill, and what&#8217;s the urgency? If your site keeps going down due to Postgres issues, you might need a database expert <em>yesterday.</em> If you have a year to find a security lead, maybe you can be more patient. The clarity around the need shapes everything.</p></li><li><p><strong>Risk (the scatter).</strong> Even well-designed interviews aren&#8217;t perfect. You could end up with a candidate who&#8217;s &#8220;spiky&#8221; and excels in the exact skillset you need&#8212;but there&#8217;s also a chance they might have big blind spots. If your timeframe is tight, you might be willing to take more risk. If not, you can hold out for a unicorn who checks every box.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zG6o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F071b8a9f-a348-49fc-a57e-c2dac800ee78_2266x1190.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zG6o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F071b8a9f-a348-49fc-a57e-c2dac800ee78_2266x1190.png 424w, https://substackcdn.com/image/fetch/$s_!zG6o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F071b8a9f-a348-49fc-a57e-c2dac800ee78_2266x1190.png 848w, https://substackcdn.com/image/fetch/$s_!zG6o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F071b8a9f-a348-49fc-a57e-c2dac800ee78_2266x1190.png 1272w, https://substackcdn.com/image/fetch/$s_!zG6o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F071b8a9f-a348-49fc-a57e-c2dac800ee78_2266x1190.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zG6o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F071b8a9f-a348-49fc-a57e-c2dac800ee78_2266x1190.png" width="1456" height="765" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/071b8a9f-a348-49fc-a57e-c2dac800ee78_2266x1190.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:765,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:162743,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zG6o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F071b8a9f-a348-49fc-a57e-c2dac800ee78_2266x1190.png 424w, https://substackcdn.com/image/fetch/$s_!zG6o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F071b8a9f-a348-49fc-a57e-c2dac800ee78_2266x1190.png 848w, https://substackcdn.com/image/fetch/$s_!zG6o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F071b8a9f-a348-49fc-a57e-c2dac800ee78_2266x1190.png 1272w, https://substackcdn.com/image/fetch/$s_!zG6o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F071b8a9f-a348-49fc-a57e-c2dac800ee78_2266x1190.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The bullseye approach frames hiring as a balance of specificity and risk tolerance, rather than &#8220;we have one gold standard bar that we never compromise on.&#8221; In fact, a candidate who&#8217;s &#8220;spiky&#8221;&#8212;with some yes/no signals&#8212;can sometimes be better than a lukewarm, well-rounded candidate if their spikes align perfectly with your need.</p><h2><strong>Reference Checks: Do Them</strong></h2><p>Reference checks are often underleveraged because they can be tedious, and hiring managers frequently run out of time or skip them. But they can be invaluable for clarifying uncertainties or revealing hidden red flags.</p><p>I think every hire should have at least <strong>two named references</strong> plus <strong>a few blind references</strong> (with the candidate&#8217;s permission). That might sound like a lot, but here&#8217;s why:</p><ol><li><p><strong>Named references</strong> verify the candidate&#8217;s role, anecdotes, and achievements. Did they truly lead that project? Or were they a minor contributor? They also confirm that someone out there is willing to endorse them wholeheartedly.</p></li><li><p><strong>Blind references</strong> can deliver incredible insight when they work out. A trusted mutual contact can provide an unfiltered read on strengths and weaknesses, or even share a horror story that won&#8217;t come through in a normal loop.</p></li></ol><p>If you&#8217;re going to do references, invest the time to ask nuanced questions. And remember: for top candidates, references are also <em>interviewing your company.</em> They&#8217;ll often share their impressions with the candidate, so bring your A-game and be consistently thoughtful and kind.</p><h2><strong>Don&#8217;t Hide That Your Process Is Hard</strong></h2><p>We&#8217;re in an era where more companies are vocal about having a rigorous or &#8220;high bar&#8221; interview process. It might run counter to the typical recruiter instincts of casting the widest net possible, but I&#8217;ve found that many of the best engineers <em>want</em> a challenge. They&#8217;re selective about teammates and don&#8217;t want to be in a place where someone who can barely code is passed along for convenience&#8217;s sake.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4gXY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e5f9d2-3d6d-44b4-8148-a33c062ec23d_2944x1442.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4gXY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e5f9d2-3d6d-44b4-8148-a33c062ec23d_2944x1442.png 424w, https://substackcdn.com/image/fetch/$s_!4gXY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e5f9d2-3d6d-44b4-8148-a33c062ec23d_2944x1442.png 848w, https://substackcdn.com/image/fetch/$s_!4gXY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e5f9d2-3d6d-44b4-8148-a33c062ec23d_2944x1442.png 1272w, https://substackcdn.com/image/fetch/$s_!4gXY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e5f9d2-3d6d-44b4-8148-a33c062ec23d_2944x1442.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4gXY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e5f9d2-3d6d-44b4-8148-a33c062ec23d_2944x1442.png" width="1456" height="713" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64e5f9d2-3d6d-44b4-8148-a33c062ec23d_2944x1442.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:713,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:778438,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4gXY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e5f9d2-3d6d-44b4-8148-a33c062ec23d_2944x1442.png 424w, https://substackcdn.com/image/fetch/$s_!4gXY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e5f9d2-3d6d-44b4-8148-a33c062ec23d_2944x1442.png 848w, https://substackcdn.com/image/fetch/$s_!4gXY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e5f9d2-3d6d-44b4-8148-a33c062ec23d_2944x1442.png 1272w, https://substackcdn.com/image/fetch/$s_!4gXY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e5f9d2-3d6d-44b4-8148-a33c062ec23d_2944x1442.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Being upfront about having a difficult process can actually attract certain high-performers&#8212;<em>if</em> you back it up with what one of my favorite recruiters calls &#8220;the brilliant basics.&#8221; That means you:</p><ul><li><p>Respond quickly</p></li><li><p>Provide a clear schedule and materials in advance</p></li><li><p>Treat the candidate with respect</p></li><li><p>Give feedback or decisions promptly</p></li><li><p>Offer a competitive package at the end</p></li></ul><p>In short, if you&#8217;re going to make them jump through hoops, at least hold up your end and run a smooth, respectful process. It&#8217;s basic decency, but it also confirms what great candidates are hoping to see: a company run by professionals who care deeply about every detail.</p><h2><strong>Final Thoughts</strong></h2><p>Recruiting&#8212;especially at scale&#8212;is fundamentally about discovering truth and reducing risk. We&#8217;re trying to figure out if someone can solve our problems, fit our culture, and thrive long-term. A strong interview loop isn&#8217;t about showing off the &#8220;correct&#8221; method or adopting the hottest new assessment trend. It&#8217;s about generating clear signals with minimal noise.</p><p>When in doubt, remember:</p><ol><li><p>The <em>specific</em> format of your interviews matters less than the clarity of the signal you get.</p></li><li><p>Customize your process to the <em>actual need</em> of the role, not some arbitrary &#8220;hiring bar.&#8221;</p></li><li><p>Reference checks can be a superpower if you use them intentionally.</p></li><li><p>Don&#8217;t be shy about having a &#8220;tough&#8221; loop&#8212;just make sure you execute your end flawlessly.</p></li></ol><p>Ultimately, a robust, fair, and well-structured interview process not only helps you find amazing new colleagues, but it also reassures candidates that your company is serious, intentional, and worth joining. In my experience, that&#8217;s the real key to hiring success.</p><div class="pullquote"><p>I imagine I&#8217;ll remain obsessed with hiring well long into the future. If you have deep questions and hot takes here, I&#8217;d be happy to talk and share notes! Message me on <a href="https://x.com/gregmfoster">X</a>.</p></div>]]></content:encoded></item><item><title><![CDATA[What Happened to Lightweight Desktop Apps? History of Electron’s Rise]]></title><description><![CDATA[It had one key killer feature: "embedding Node.js and Chromium to provide a powerful desktop runtime for web technologies." But is that worth a world of bloated desktop apps?]]></description><link>https://smalldiffs.gmfoster.com/p/what-happened-to-lightweight-desktop</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/what-happened-to-lightweight-desktop</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Thu, 09 Jan 2025 19:11:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49ba175f-e713-4a56-a650-8495385261f0_1040x900.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://www.electronjs.org/">Electron</a> is one of the more notorious tools in the modern developer&#8217;s toolbox. If you squint, it&#8217;s a cousin to React Native - promising &#8220;write once, ship everywhere&#8221; - but with far less painful build-and-release overhead than mobile development. Its killer feature is bundling Node.js and Chromium together to create a powerful desktop runtime for web technologies. The official Electron blog recently marked its 10-year anniversary, which is wild considering how deeply it&#8217;s permeated developer culture.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PkdD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d1ecd30-85c1-47f5-a58b-396663749fee_2542x1712.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PkdD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d1ecd30-85c1-47f5-a58b-396663749fee_2542x1712.png 424w, https://substackcdn.com/image/fetch/$s_!PkdD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d1ecd30-85c1-47f5-a58b-396663749fee_2542x1712.png 848w, https://substackcdn.com/image/fetch/$s_!PkdD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d1ecd30-85c1-47f5-a58b-396663749fee_2542x1712.png 1272w, https://substackcdn.com/image/fetch/$s_!PkdD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d1ecd30-85c1-47f5-a58b-396663749fee_2542x1712.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PkdD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d1ecd30-85c1-47f5-a58b-396663749fee_2542x1712.png" width="593" height="399.5418956043956" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d1ecd30-85c1-47f5-a58b-396663749fee_2542x1712.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:981,&quot;width&quot;:1456,&quot;resizeWidth&quot;:593,&quot;bytes&quot;:368968,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PkdD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d1ecd30-85c1-47f5-a58b-396663749fee_2542x1712.png 424w, https://substackcdn.com/image/fetch/$s_!PkdD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d1ecd30-85c1-47f5-a58b-396663749fee_2542x1712.png 848w, https://substackcdn.com/image/fetch/$s_!PkdD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d1ecd30-85c1-47f5-a58b-396663749fee_2542x1712.png 1272w, https://substackcdn.com/image/fetch/$s_!PkdD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d1ecd30-85c1-47f5-a58b-396663749fee_2542x1712.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>By the mid-2020s, we&#8217;ve reached a point where most new software starts as a website (with the typical HTML/JS stack) and later expands to desktop for better ergonomics - whether that&#8217;s a direct dock icon, easier OS-level integrations, or just a more focused workspace. Tools like ChatGPT and Perplexity followed this pattern, even if they didn&#8217;t necessarily jump on Electron. Still, for many teams wanting to quickly bundle an app, Electron offers near-instant cross-platform support plus coveted &#8220;web-style&#8221; benefits like automatic updates and zero-friction releases.</p><p>When our engineering team at Graphite needed a lightweight desktop extension, we also gravitated to Electron in no time - especially once we saw the auto-updater. But I&#8217;ve often wondered: for a framework with such dominance, where exactly did it come from? Turns out the answer is somewhat surprising - GitHub created it.</p><div class="pullquote"><p><em><strong>I&#8217;m <a href="https://www.linkedin.com/in/gregmfoster/">Greg</a>, cofounder and CTO at Graphite</strong>&#8212;a code review platform trusted by teams at Snowflake, Asana, Brex, Ramp, Square, and many more. Follow to make your doom-scrolling more technical:<br><br><a href="https://x.com/gregmfoster">X.com</a> | <a href="https://www.linkedin.com/in/gregmfoster">LinkedIn</a> | <a href="https://www.threads.net/@fosterfriendship">Threads</a> | <a href="https://bsky.app/profile/fosterfriendship.bsky.social">Bluesky</a></em></p></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u2Po!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e2136e9-c459-4bb6-9191-686d6b7261fa_144x144.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u2Po!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e2136e9-c459-4bb6-9191-686d6b7261fa_144x144.png 424w, https://substackcdn.com/image/fetch/$s_!u2Po!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e2136e9-c459-4bb6-9191-686d6b7261fa_144x144.png 848w, https://substackcdn.com/image/fetch/$s_!u2Po!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e2136e9-c459-4bb6-9191-686d6b7261fa_144x144.png 1272w, https://substackcdn.com/image/fetch/$s_!u2Po!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e2136e9-c459-4bb6-9191-686d6b7261fa_144x144.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u2Po!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e2136e9-c459-4bb6-9191-686d6b7261fa_144x144.png" width="144" height="144" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e2136e9-c459-4bb6-9191-686d6b7261fa_144x144.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:144,&quot;width&quot;:144,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!u2Po!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e2136e9-c459-4bb6-9191-686d6b7261fa_144x144.png 424w, https://substackcdn.com/image/fetch/$s_!u2Po!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e2136e9-c459-4bb6-9191-686d6b7261fa_144x144.png 848w, https://substackcdn.com/image/fetch/$s_!u2Po!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e2136e9-c459-4bb6-9191-686d6b7261fa_144x144.png 1272w, https://substackcdn.com/image/fetch/$s_!u2Po!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e2136e9-c459-4bb6-9191-686d6b7261fa_144x144.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><h2><strong>The Pre-Electron Era</strong></h2><p>Electron only dates back to 2013, which is not that long ago. Before shipping web apps in desktop wrappers was a thing, developers typically coded fully separate native applications for each platform. Want Mac support? Write Objective-C or Swift and deal with Cocoa. Want Windows support? Roll up your sleeves for C++, C#, or .NET. Linux? Even more configuration fun. Each platform had distinct UI paradigms, code idioms, and build pipelines, so maintaining consistency was a headache. Many teams ended up maintaining two or three codebases, each with its own subtle differences.</p><p>A few cross-platform toolkits, like Qt or JavaFX, offered partial solutions but often came with complicated integration layers, inconsistent UI experiences, and occasionally awkward performance. Meanwhile, Java via the JVM was powerful but never felt particularly seamless for consumer-facing desktop apps. Sure, it let you &#8220;write once, run anywhere,&#8221; but not everyone wanted to wrangle Swing or JavaFX to build a modern UI. And if you needed to ship to the web itself, the JVM wasn&#8217;t going to help.</p><p>So if you go back to, say, 2010, building a cross-platform desktop app often felt like trudging uphill in two feet of snow.</p><h2><strong>How Electron Emerged</strong></h2><p>Enter 2013: Electron, initially called &#8220;Atom Shell,&#8221; was created by Cheng Zhao, an engineer at GitHub. It wasn&#8217;t some altruistic open-source gift - rather, it was purpose-built to power the Atom editor, GitHub&#8217;s new &#8220;hackable&#8221; text editor that relied on web technologies (HTML, CSS, JS) but needed to run on desktop. GitHub funded and nurtured the framework from the start. As a result, Electron quickly benefited from real-world testing, consistent developer feedback, and a large user base - essentially, the Atom community.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vFw2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49ba175f-e713-4a56-a650-8495385261f0_1040x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vFw2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49ba175f-e713-4a56-a650-8495385261f0_1040x900.png 424w, https://substackcdn.com/image/fetch/$s_!vFw2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49ba175f-e713-4a56-a650-8495385261f0_1040x900.png 848w, https://substackcdn.com/image/fetch/$s_!vFw2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49ba175f-e713-4a56-a650-8495385261f0_1040x900.png 1272w, https://substackcdn.com/image/fetch/$s_!vFw2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49ba175f-e713-4a56-a650-8495385261f0_1040x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vFw2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49ba175f-e713-4a56-a650-8495385261f0_1040x900.png" width="600" height="519.2307692307693" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49ba175f-e713-4a56-a650-8495385261f0_1040x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:900,&quot;width&quot;:1040,&quot;resizeWidth&quot;:600,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Installing Atom&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Installing Atom" title="Installing Atom" srcset="https://substackcdn.com/image/fetch/$s_!vFw2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49ba175f-e713-4a56-a650-8495385261f0_1040x900.png 424w, https://substackcdn.com/image/fetch/$s_!vFw2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49ba175f-e713-4a56-a650-8495385261f0_1040x900.png 848w, https://substackcdn.com/image/fetch/$s_!vFw2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49ba175f-e713-4a56-a650-8495385261f0_1040x900.png 1272w, https://substackcdn.com/image/fetch/$s_!vFw2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49ba175f-e713-4a56-a650-8495385261f0_1040x900.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ironically, while Atom itself has been overshadowed by Visual Studio Code, its underlying framework grew stronger and more general-purpose. Within a few years, &#8220;Atom Shell&#8221; was renamed Electron and reached a solid 1.0 release in 2016. By that point, Slack and GitKraken (among others) had already adopted it. And then came the big one: Microsoft shipped VSCode on top of Electron. That alone legitimized Electron for many enterprise teams.</p><h2><strong>Under the Hood: Key Technical Choices</strong></h2><p>Electron&#8217;s real breakthrough was embedding both Node.js and Chromium. That allows JavaScript to communicate directly with native OS capabilities while simultaneously rendering a browser-based UI - an irresistible combo for many web developers. The multi-process architecture is roughly modeled on Chromium&#8217;s:</p><ol><li><p><strong>Main Process: </strong>Handles app-level concerns such as creating windows, tying into OS-level APIs, and managing the overall lifecycle. It&#8217;s effectively the &#8220;brains&#8221; of your Electron app.</p></li><li><p><strong>Renderer Processes: </strong>Each window or &#8220;view&#8221; runs in its own process, rendering HTML, CSS, and JavaScript. This isolation boosts stability since a renderer crash won&#8217;t necessarily take down the entire app.</p></li><li><p><strong>Auto-Updater: </strong>Electron ships with a built-in autoUpdater module. It&#8217;s easy to forget that automatic updates have historically been non-trivial in native software. With Electron, you get it with minimal fuss, which is a huge boon for shipping frequent patches or incremental new features.</p></li></ol><p>This structure means a front-end-heavy dev team can push out a desktop version of their web app with minimal friction. It&#8217;s precisely why so many startups lean on Electron: time-to-market is usually more critical than memory footprint.</p><h2><strong>Developer Gripes: Bloat and Redundancy</strong></h2><p>Electron has faced its fair share of criticism - especially around bloat. Each Electron application bundles its own Chromium instance, so if you&#8217;ve got Slack, VSCode, and Discord all open, you&#8217;re essentially running three copies of Chrome in parallel. That leads to massive memory usage and large app binaries. A trivial &#8220;Hello, world&#8221; in Electron might weigh in at over 100MB, which is considered downright monstrous by some purists.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3515!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cbc913-5172-4536-9168-aad3455b392b_936x164.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3515!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cbc913-5172-4536-9168-aad3455b392b_936x164.png 424w, https://substackcdn.com/image/fetch/$s_!3515!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cbc913-5172-4536-9168-aad3455b392b_936x164.png 848w, https://substackcdn.com/image/fetch/$s_!3515!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cbc913-5172-4536-9168-aad3455b392b_936x164.png 1272w, https://substackcdn.com/image/fetch/$s_!3515!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cbc913-5172-4536-9168-aad3455b392b_936x164.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3515!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cbc913-5172-4536-9168-aad3455b392b_936x164.png" width="936" height="164" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67cbc913-5172-4536-9168-aad3455b392b_936x164.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:164,&quot;width&quot;:936,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128338,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3515!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cbc913-5172-4536-9168-aad3455b392b_936x164.png 424w, https://substackcdn.com/image/fetch/$s_!3515!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cbc913-5172-4536-9168-aad3455b392b_936x164.png 848w, https://substackcdn.com/image/fetch/$s_!3515!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cbc913-5172-4536-9168-aad3455b392b_936x164.png 1272w, https://substackcdn.com/image/fetch/$s_!3515!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67cbc913-5172-4536-9168-aad3455b392b_936x164.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Back in the early days, Electron also had some stability hiccups. Users occasionally encountered &#8220;white screens of death&#8221; if the renderer crashed. The community eventually hammered away at these, and modern Electron is much more robust. Still, the overhead can be a deal-breaker for teams prioritizing performance and resource usage.</p><p>From a security standpoint, Electron apps aren&#8217;t typically sandboxed like a modern browser tab. One unscrupulous dependency or an insecurely loaded script could give an attacker deeper access to the OS. For that reason, it&#8217;s critical to treat Electron development with the same seriousness you&#8217;d apply to native app security: enable contextIsolation, restrict remote code execution, be diligent about packages, and so on. It&#8217;s not insurmountable - just requires discipline.</p><p>Interestingly, some well-funded apps explicitly avoid Electron. ChatGPT is the best recent example: given that OpenAI has the engineering bandwidth, they built native clients for Windows, macOS, iOS, etc. Some suspect they wanted a deeply integrated experience or better performance (and, let&#8217;s be real, if your app name has &#8220;AI&#8221; in it, you likely care about not wasting cycles). It&#8217;s a big ask for a smaller team, though. Most of us don&#8217;t have the resources to build and maintain multiple native implementations - hence, Electron remains popular.</p><h2><strong>Tauri and the Future</strong></h2><p>Over the years, Electron has radically lowered the barrier to entry for building desktop software. Developers who were once confined to web technologies could suddenly package their work as a native-feeling app - no separate codebases required. That approach sparked new ideas and quick prototypes, brought fresh voices into desktop software, and gave us a wave of tools like Atom, Slack, and VSCode that might have been too expensive to build natively for three platforms. From my perspective, Electron&#8217;s real success is how it turned &#8220;let&#8217;s make a desktop client&#8221; from a dreaded, specialized endeavor into just another feasible weekend project.</p><p>Of course, not everyone has embraced the memory overhead or the cost of shipping a full Chromium instance with each app. In response, frameworks like <a href="https://v2.tauri.app/">Tauri</a> have emerged to solve these exact pain points. Tauri, for instance, relies on the operating system&#8217;s native webview instead of bundling its own browser engine. That alone can shrink a basic app&#8217;s size from over 100 MB to under 1 MB in some cases. Its backend is written in Rust, which promotes both performance and memory safety, and it enforces more explicit boundaries for which OS-level features the app can access. This is appealing for teams that value security or simply can&#8217;t abide a big memory footprint. Tauri is still maturing, but it hints at an intriguing future: one where the convenience of &#8220;web tech on desktop&#8221; can coexist with smaller binaries and more efficient resource use.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ba6w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e9ea4b-813a-4fb1-aaa2-dd0bc6313b05_2370x1680.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ba6w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e9ea4b-813a-4fb1-aaa2-dd0bc6313b05_2370x1680.png 424w, https://substackcdn.com/image/fetch/$s_!ba6w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e9ea4b-813a-4fb1-aaa2-dd0bc6313b05_2370x1680.png 848w, https://substackcdn.com/image/fetch/$s_!ba6w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e9ea4b-813a-4fb1-aaa2-dd0bc6313b05_2370x1680.png 1272w, https://substackcdn.com/image/fetch/$s_!ba6w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e9ea4b-813a-4fb1-aaa2-dd0bc6313b05_2370x1680.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ba6w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e9ea4b-813a-4fb1-aaa2-dd0bc6313b05_2370x1680.png" width="619" height="438.74175824175825" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87e9ea4b-813a-4fb1-aaa2-dd0bc6313b05_2370x1680.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1032,&quot;width&quot;:1456,&quot;resizeWidth&quot;:619,&quot;bytes&quot;:917638,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ba6w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e9ea4b-813a-4fb1-aaa2-dd0bc6313b05_2370x1680.png 424w, https://substackcdn.com/image/fetch/$s_!ba6w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e9ea4b-813a-4fb1-aaa2-dd0bc6313b05_2370x1680.png 848w, https://substackcdn.com/image/fetch/$s_!ba6w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e9ea4b-813a-4fb1-aaa2-dd0bc6313b05_2370x1680.png 1272w, https://substackcdn.com/image/fetch/$s_!ba6w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e9ea4b-813a-4fb1-aaa2-dd0bc6313b05_2370x1680.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As someone who has followed Electron from its Atom Shell days, I&#8217;m struck by its staying power despite these criticisms. For most organizations, time-to-market remains a more pressing concern than raw efficiency, so Electron will likely stay dominant in the near term. That said, the conversation is already shifting. Developers are growing more aware of the trade-offs between convenience and performance, and alternatives like Tauri are stepping up to challenge the status quo. Whether Electron retains its crown or cedes ground over the next few years, it has already changed how we think about desktop apps. It made cross-platform development feel intuitive - even fun - and that&#8217;s no small feat.</p><div class="pullquote"><p><em>Enjoy content about startups and dev-productivity? Follow and make your scrolling timelines more technical</em></p><p><em><a href="https://x.com/gregmfoster">X.com</a> | <a href="https://www.linkedin.com/in/gregmfoster">LinkedIn</a> | <a href="https://www.threads.net/@fosterfriendship">Threads</a> | <a href="https://bsky.app/profile/fosterfriendship.bsky.social">Bluesky</a></em></p></div>]]></content:encoded></item><item><title><![CDATA[Are you having any fun?]]></title><description><![CDATA[The journey is the whole thing. Great things do take a long time, but fun is what keeps you motivated for the long haul.]]></description><link>https://smalldiffs.gmfoster.com/p/are-you-having-any-fun</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/are-you-having-any-fun</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Thu, 09 Jan 2025 01:56:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3814f9d-541c-4245-9ef1-5e121d161a1b_2064x1516.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div id="youtube2-68gnYCznvYs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;68gnYCznvYs&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/68gnYCznvYs?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>There&#8217;s a myth that building something big&#8212;like a company, an open-source project, or any ambitious goal&#8212;must feel soul-sucking. That if you&#8217;re enjoying yourself, then maybe you&#8217;re not grinding hard enough. That perhaps you&#8217;re being na&#239;ve or soft.</p><p>I think that&#8217;s backward. Great things do take a long time, but fun is what keeps you motivated for the long haul. Fun is like fuel. It powers you through the late nights, the rough patches, the big pivots&#8212;<em>without</em> leaving you burned out, resentful, or at risk of just giving up.</p><h3><strong>The Biggest Risk: Quitting</strong></h3><p>Most startups (or big creative undertakings) don&#8217;t fail because of lack of money, or a competitor coming out of nowhere. They fail because the people running them give up. And why do founders give up? They&#8217;re miserable. They spent years living in a grinding, joyless environment, waiting for some distant milestone to validate all the pain. When the milestone doesn&#8217;t arrive on schedule&#8212;or arrives and feels anticlimactic&#8212;disillusionment sets in. The founder flame goes out.</p><p>But what if you never hated the journey? What if you actually had fun building your company or your project? You&#8217;d be way less likely to quit, more likely to maintain your energy, and ironically, more likely to <em>reach</em> those ambitious milestones. Because a happy team sticks it out.</p><h3><strong>Fun in Action: From Apple to Atlassian</strong></h3><p>If you think fun is a distraction, look at some of the most storied tech teams in history:</p><ul><li><p><strong>Apple&#8217;s Macintosh Team:</strong> They worked insane hours, yet they raised a pirate flag above their building and pulled pranks on each other. Even in a pressure-cooker environment, that playful energy helped them produce one of the most revolutionary products in computing.</p></li><li><p><strong>Pixar:</strong> Scooters in the halls, Nerf battles in the office&#8212;they&#8217;ve created an entire campus designed to encourage collisions of creativity. Their teams work ridiculously hard under tight movie-production deadlines, but they keep each other&#8217;s spirits up and create hits over and over.</p></li><li><p><strong>Atlassian&#8217;s &#8220;ShipIt Days&#8221;:</strong> Periodically, Atlassian lets employees spend 24 hours building <em>anything</em> they&#8217;re passionate about. People form spontaneous teams, eat pizza all night, and ship prototype features. It&#8217;s intense, <em>but it&#8217;s also fun.</em> Some of their best product innovations originated here.</p></li></ul><h3><strong>My Friend Davide</strong></h3><p>I grabbed coffee with my friend Davide today, a hardware startup founder. He&#8217;s about to turn 30, has a long-term girlfriend, and is racing to build something the world needs (he&#8217;s even applying learnings from the <em>Mom Test</em>). He&#8217;s hustling on every front&#8212;building, marketing, selling, hiring. The road ahead looks brutal: the next four years are make-or-break for the company, but they&#8217;re also make-or-break for his personal life.</p><p>Anyone in his shoes is at risk of doing that &#8220;black out and wake up&#8221; in a four-year scenario, with 50 employees, a company worth hundreds of millions, but no real&nbsp;<em>lived</em>&nbsp;memories. Conventional success&#8230; minus any joy. (Luckily, I think Davide is self-aware enough to avoid this fate - but even then, it&#8217;s a risk).</p><p>This is the trap. I&#8217;ve reached a few &#8220;milestones&#8221; in my own journey, only to realize how fleeting the celebration feels&#8212;sometimes you&#8217;re only elated for an hour or two. If you&#8217;ve deprived yourself of happiness along the way, the payoff can feel strangely hollow.</p><h3><strong>My Own Journey Having Fun</strong></h3><p>I co-founded my current company, Graphite, at the start of the pandemic. It was a weird time: everyone was stuck indoors, often feeling isolated. We <em>could</em> have forced ourselves into a drab, 24/7 grind. But we made it a point to keep it fun.</p><ul><li><p>We&#8217;d go on socially distanced runs together.</p></li><li><p>We&#8217;d break up workdays with StarCraft II matches&#8212;laughing and trash-talking each other, even if it meant staying up late to code afterward.</p></li><li><p>We pranked each other by adding hidden memes to the website.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tmiV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3814f9d-541c-4245-9ef1-5e121d161a1b_2064x1516.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tmiV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3814f9d-541c-4245-9ef1-5e121d161a1b_2064x1516.png 424w, https://substackcdn.com/image/fetch/$s_!tmiV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3814f9d-541c-4245-9ef1-5e121d161a1b_2064x1516.png 848w, https://substackcdn.com/image/fetch/$s_!tmiV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3814f9d-541c-4245-9ef1-5e121d161a1b_2064x1516.png 1272w, https://substackcdn.com/image/fetch/$s_!tmiV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3814f9d-541c-4245-9ef1-5e121d161a1b_2064x1516.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tmiV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3814f9d-541c-4245-9ef1-5e121d161a1b_2064x1516.png" width="603" height="442.7245879120879" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3814f9d-541c-4245-9ef1-5e121d161a1b_2064x1516.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1069,&quot;width&quot;:1456,&quot;resizeWidth&quot;:603,&quot;bytes&quot;:4846999,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tmiV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3814f9d-541c-4245-9ef1-5e121d161a1b_2064x1516.png 424w, https://substackcdn.com/image/fetch/$s_!tmiV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3814f9d-541c-4245-9ef1-5e121d161a1b_2064x1516.png 848w, https://substackcdn.com/image/fetch/$s_!tmiV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3814f9d-541c-4245-9ef1-5e121d161a1b_2064x1516.png 1272w, https://substackcdn.com/image/fetch/$s_!tmiV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3814f9d-541c-4245-9ef1-5e121d161a1b_2064x1516.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">We lost. A lot.</figcaption></figure></div><p>One time, two of us snuck a cartoon weasel into the code so it would flash across the site <em>only</em> for our unsuspecting CEO. Whenever he complained about the bug, we acted like we had no idea what he was talking about. This went on for a month, until a customer demo was interrupted by the little blue weasel. We had to come clean, but it was worth it&#8212;everyone had a blast, and we still got our work done, sometimes staying even later <em>because</em> we were enjoying ourselves.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p_T8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ea02c8-53e2-47bd-a2a0-147c323b9134_510x418.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p_T8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ea02c8-53e2-47bd-a2a0-147c323b9134_510x418.png 424w, https://substackcdn.com/image/fetch/$s_!p_T8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ea02c8-53e2-47bd-a2a0-147c323b9134_510x418.png 848w, https://substackcdn.com/image/fetch/$s_!p_T8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ea02c8-53e2-47bd-a2a0-147c323b9134_510x418.png 1272w, https://substackcdn.com/image/fetch/$s_!p_T8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ea02c8-53e2-47bd-a2a0-147c323b9134_510x418.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p_T8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ea02c8-53e2-47bd-a2a0-147c323b9134_510x418.png" width="478" height="391.7725490196078" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/08ea02c8-53e2-47bd-a2a0-147c323b9134_510x418.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:418,&quot;width&quot;:510,&quot;resizeWidth&quot;:478,&quot;bytes&quot;:79763,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!p_T8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ea02c8-53e2-47bd-a2a0-147c323b9134_510x418.png 424w, https://substackcdn.com/image/fetch/$s_!p_T8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ea02c8-53e2-47bd-a2a0-147c323b9134_510x418.png 848w, https://substackcdn.com/image/fetch/$s_!p_T8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ea02c8-53e2-47bd-a2a0-147c323b9134_510x418.png 1272w, https://substackcdn.com/image/fetch/$s_!p_T8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ea02c8-53e2-47bd-a2a0-147c323b9134_510x418.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3><strong>Strength in Positive Rituals</strong></h3><p>It doesn&#8217;t have to be elaborate or expensive. Just do small things that break up the monotony:</p><ul><li><p><strong>Work a week from Mexico</strong>: New sights, sounds, food, and cheap flights can recharge everyone&#8217;s creative batteries.</p></li><li><p><strong>Team Meals</strong>: Order good takeout or open a bar tab after hitting a milestone.</p></li><li><p><strong>Healthy Social Activities</strong>: My cofounders and I used to do a weekly $100 shared restaurant meal to talk openly about our biggest challenges. Now, we&#8217;ve upgraded it to a regular bathhouse hang&#8212;three hours of sauna, cold plunges, and conversation. We usually keep talking and working until 10 pm because <em>we want to</em>.</p></li><li><p><strong>Random Hackathons</strong>: Let your engineering or design team drop what they&#8217;re doing for a day and build something fun, weird, or purely experimental. One engineer on our team built a Resy bot that we all abused for a year to get the best Soho reservations.</p></li><li><p><strong>Pranks &amp; Inside Jokes</strong>: They&#8217;re silly, but they build trust and lighten the mood.</p></li></ul><p>Think of these moments as <em>insurance</em> against burnout. Fun is not fluff&#8212;it&#8217;s an asset that keeps morale high, fosters tighter bonds, and extends your team&#8217;s runway.</p><h3><strong>The Goal: Don&#8217;t Die (and Don&#8217;t Quit)</strong></h3><p>Plenty of legendary companies faced extended slowdowns or near-death experiences. HP started in a garage, Google took a while before AdWords became a big moneymaker, and countless open-source projects simmer for years before they blossom. The founders who stuck around weren&#8217;t necessarily the ones who loved stress; they were the ones who made life sustainable.</p><ul><li><p>If you stall out for a year or two, do you <em>really</em> want to keep pushing if every day is joyless? Probably not.</p></li><li><p>But if you and your cofounders are still having the occasional laugh, still doing weekly runs or monthly pranks, the idea of continuing feels a lot less painful.</p></li></ul><p>The &#8220;fun factor&#8221; is a hedge against the single greatest threat to any big venture: <em>giving up.</em></p><div class="pullquote"><p><em>Enjoy content about startups and dev-productivity? Follow me and make your scrolling timelines more technical<br><br><a href="https://x.com/gregmfoster">X.com</a> | <a href="https://www.linkedin.com/in/gregmfoster">LinkedIn</a> | <a href="https://www.threads.net/@fosterfriendship">Threads</a> | <a href="https://bsky.app/profile/fosterfriendship.bsky.social">Bluesky</a></em></p></div><h3><strong>Hard Work Doesn&#8217;t Have to Be Joyless</strong></h3><p>None of this is to say that real grind and intensity aren&#8217;t part of the journey. You might be pulling all-nighters, shipping code at 2 am, or traveling nonstop to meet investors. That&#8217;s part of the deal. But it&#8217;s <em>orthogonal</em> to having fun. You can do both simultaneously. If Pixar can animate blockbuster films under insane deadlines <em>and</em> still ride scooters in the halls, if the original Mac team could brand themselves as &#8220;pirates&#8221; while cramming for product demos, there&#8217;s proof it&#8217;s possible.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XKI0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb89bf71-7ca2-4732-9444-fa332ccdb9f0_1134x1508.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XKI0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb89bf71-7ca2-4732-9444-fa332ccdb9f0_1134x1508.png 424w, https://substackcdn.com/image/fetch/$s_!XKI0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb89bf71-7ca2-4732-9444-fa332ccdb9f0_1134x1508.png 848w, https://substackcdn.com/image/fetch/$s_!XKI0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb89bf71-7ca2-4732-9444-fa332ccdb9f0_1134x1508.png 1272w, https://substackcdn.com/image/fetch/$s_!XKI0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb89bf71-7ca2-4732-9444-fa332ccdb9f0_1134x1508.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XKI0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb89bf71-7ca2-4732-9444-fa332ccdb9f0_1134x1508.png" width="505" height="671.5520282186949" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb89bf71-7ca2-4732-9444-fa332ccdb9f0_1134x1508.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1508,&quot;width&quot;:1134,&quot;resizeWidth&quot;:505,&quot;bytes&quot;:2845564,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XKI0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb89bf71-7ca2-4732-9444-fa332ccdb9f0_1134x1508.png 424w, https://substackcdn.com/image/fetch/$s_!XKI0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb89bf71-7ca2-4732-9444-fa332ccdb9f0_1134x1508.png 848w, https://substackcdn.com/image/fetch/$s_!XKI0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb89bf71-7ca2-4732-9444-fa332ccdb9f0_1134x1508.png 1272w, https://substackcdn.com/image/fetch/$s_!XKI0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb89bf71-7ca2-4732-9444-fa332ccdb9f0_1134x1508.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">This image has several levels of inside jokes. But I can assure you, it was fun.</figcaption></figure></div><p>In fact, the positivity might even <em>enhance</em> the grind: if you genuinely enjoy being around your team, you&#8217;re more likely to work those extra hours without resentment.</p><ol><li><p><strong>Life is Short</strong>: The journey <em>is</em> everything. If you hate the journey, you might hate your life.</p></li><li><p><strong>Fun Powers Momentum</strong>: Tiny doses of fun&#8212;an hour at the gym, a bar tab, a hackathon, a silly meme in the code&#8212;can keep you going through tough times.</p></li><li><p><strong>Less Likely to Quit</strong>: A culture that embraces fun is infinitely more sustainable and less prone to founder or team burnout.</p></li></ol><p>So I&#8217;ll say it again: <em>Make your work fun</em>. Try a new environment, plan a team-building prank, or schedule a &#8220;ShipIt Day.&#8221; If you&#8217;re working on something great, you want every advantage to keep you going for years. And if you end up missing the milestone? At least you won&#8217;t regret the time you spent&#8212;and you might even surprise yourself by persevering until the big win finally hits.</p><div class="pullquote"><p><em>If you have your own tips or hilarious team stories, I&#8217;d love to know. We can all use a little more fun in our lives.</em></p></div>]]></content:encoded></item><item><title><![CDATA[The Most Important Part of Engineering Management: Context]]></title><description><![CDATA[BLUF: A good EM's job is, fundamentally, to spend most their time building broad context so that they can tactfully reshare it out in the right way at the right moments.]]></description><link>https://smalldiffs.gmfoster.com/p/the-most-important-part-engineering</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/the-most-important-part-engineering</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Tue, 07 Jan 2025 19:40:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8462a372-f0ab-4921-afb9-859b6d3e16e1_2354x1396.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>From IC to EM</strong></h2><p>I began my career as a new-grad software engineer at Airbnb, where I got a crash course in all things tech: building new services from scratch, refactoring old systems nobody wanted to touch, getting paged at 2 a.m. to fix production outages, collaborating with PMs and designers, and yes, inevitably breaking the site more times than I&#8217;d care to admit. I loved it. As an IC, you learn to focus on <em>shipping code</em>. Whether you&#8217;re writing design docs or squashing bugs, there&#8217;s always the tangible thrill of solving a problem by turning it into a neat little pull request.</p><p>Eventually, though, I realized my passion wasn&#8217;t just about making good software&#8212;it was about <em>building the team</em> that makes software. I found my way toward co-founding a company, Graphite, where our mission is to create developer tooling that helps other teams ship better code. That means we&#8217;re essentially an engineering team that builds software to help other engineering teams build their software. My parents may never understand what that means, but I find it incredibly rewarding.</p><p>As Graphite grew, I noticed that the scope of my responsibilities had shifted. I was no longer just heads-down coding. Instead, I found myself reading up on management best practices, talking to seasoned engineering managers, and even hiring a leadership coach, all to help me become an effective leader for our growing team. Over the past few years, I&#8217;ve hired, let people go, coded in the trenches, run weekly standups, delivered tough-love feedback, dealt with product and roadmap debates, and everything else you can imagine. Now, I&#8217;m lucky enough to be mentoring two of our own engineers in their journey to become managers themselves, which has forced me to articulate the often fuzzy question: <em>&#8220;What is the job of an engineering manager, really?&#8221;</em></p><p>Below is my best attempt at answering that question from the vantage point of an early-stage startup environment. It won&#8217;t be the last word on the subject, but if you&#8217;re navigating or considering the leap from IC to EM, I hope this helps.</p><h2><strong>The Real Job of an Engineering Manager</strong></h2><p><strong>An IC&#8217;s job is to build things.</strong> It might sound obvious, but it&#8217;s worth stating explicitly: the primary responsibility of an individual contributor is to write, review, and ship meaningful code. While collaboration, design reviews, and planning are all critical, the fundamental output of an IC is the codebase changes that push the product forward.</p><p><strong>A manager&#8217;s job, by contrast, is twofold: (1) build and maintain context, and (2) apply that context to help the team make better decisions.</strong> That&#8217;s it in a nutshell. But what does &#8220;context&#8221; really mean, and why can&#8217;t an IC just keep track of it themselves?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ATN2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019b6f07-30a5-4fed-9374-ea259f4a8379_2490x954.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ATN2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019b6f07-30a5-4fed-9374-ea259f4a8379_2490x954.png 424w, https://substackcdn.com/image/fetch/$s_!ATN2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019b6f07-30a5-4fed-9374-ea259f4a8379_2490x954.png 848w, https://substackcdn.com/image/fetch/$s_!ATN2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019b6f07-30a5-4fed-9374-ea259f4a8379_2490x954.png 1272w, https://substackcdn.com/image/fetch/$s_!ATN2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019b6f07-30a5-4fed-9374-ea259f4a8379_2490x954.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ATN2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019b6f07-30a5-4fed-9374-ea259f4a8379_2490x954.png" width="1456" height="558" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/019b6f07-30a5-4fed-9374-ea259f4a8379_2490x954.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:558,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:121285,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ATN2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019b6f07-30a5-4fed-9374-ea259f4a8379_2490x954.png 424w, https://substackcdn.com/image/fetch/$s_!ATN2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019b6f07-30a5-4fed-9374-ea259f4a8379_2490x954.png 848w, https://substackcdn.com/image/fetch/$s_!ATN2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019b6f07-30a5-4fed-9374-ea259f4a8379_2490x954.png 1272w, https://substackcdn.com/image/fetch/$s_!ATN2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019b6f07-30a5-4fed-9374-ea259f4a8379_2490x954.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Building and Maintaining Context</strong></h4><p>A manager should have a bird&#8217;s-eye view of the organization: upcoming product launches, the company&#8217;s financial outlook, the top priorities of adjacent teams, the morale and burnout levels on their own team, as well as the big architectural pain points lurking in the codebase. You become something of a &#8220;information sponge.&#8221; You&#8217;re reading Slack threads, attending product reviews, talking with design, keeping an eye on bug metrics, and noticing who might be hitting a wall or feeling frustrated.</p><p>It might take half of your week to keep up with this swirl of information. Maybe more. Early in my own transition, I felt uncomfortable spending too much time in meetings or Slack. But the reality is that building this context is <em>the</em> core part of the manager&#8217;s job. If an IC tried to absorb all of these details, they would never have time to get into the flow state required for deep, productive coding. That&#8217;s why the org <em>needs</em> a manager to do the heavy lifting of data collection and synthesis.</p><p>Where do you get this information? From team standups, one-on-ones, coffee chats, incident postmortems, and countless impromptu conversations. You read design specs, watch product demos, and poke around your analytics dashboards. You also need to invest in genuine human relationships. People will share crucial, often delicate tidbits of information only if they trust you. That trust is built over time, through honest conversations and genuine care.</p><h4><strong>Applying That Context</strong></h4><p>Once you&#8217;ve built a robust picture of what&#8217;s going on, you deploy that context in targeted moments. You might be in a planning meeting where people are debating whether to tackle a new feature or refactor an old system. Drawing on your knowledge of the product roadmap, the team&#8217;s workload, and the relative importance of tech debt, you can cut through the noise to advocate for the best course of action. You might be sitting down with a high-potential IC who wants to grow into bigger responsibilities; your breadth of perspective helps you give pointed feedback on where they should focus their efforts. Or you might sense that morale is dipping because the team hasn&#8217;t shipped something exciting in a while, so you convene a brainstorming session to get people jazzed about a new initiative.</p><p>A manager who fails to build context can only offer generalities, like &#8220;Let&#8217;s just do what&#8217;s best for the user.&#8221; But a manager with deep context can back up their decisions with specifics: <em>&#8220;We can&#8217;t prioritize this new feature right now because we&#8217;re already committed to a major migration by the end of the quarter, and if we delay that, we&#8217;ll blow up next quarter&#8217;s product timeline. Plus, I know half the team&#8217;s been on-call too often, so adding more complexity now would risk burnout.&#8221;</em> That&#8217;s powerful, targeted leadership&#8212;only possible when you thoroughly understand the landscape.</p><h2><strong>The Path to Mastery (and a Beating Heart to the Team)</strong></h2><p>Becoming truly great at engineering management means refining those two skills&#8212;context-building and context-application&#8212;until it looks almost effortless. You arrive at meetings armed with detailed knowledge, but you don&#8217;t bury people in it. Instead, you deliver the critical points with clarity and tact. You sense when someone&#8217;s on the verge of feeling overwhelmed and schedule a quick check-in, or you notice that a project is behind schedule but also see that your PM is overcommitted, so you jump in to realign resources and reset expectations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9XpE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56ceb3a5-616c-43dc-ac70-c3e7f4b4d90d_2412x1562.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9XpE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56ceb3a5-616c-43dc-ac70-c3e7f4b4d90d_2412x1562.png 424w, https://substackcdn.com/image/fetch/$s_!9XpE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56ceb3a5-616c-43dc-ac70-c3e7f4b4d90d_2412x1562.png 848w, https://substackcdn.com/image/fetch/$s_!9XpE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56ceb3a5-616c-43dc-ac70-c3e7f4b4d90d_2412x1562.png 1272w, https://substackcdn.com/image/fetch/$s_!9XpE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56ceb3a5-616c-43dc-ac70-c3e7f4b4d90d_2412x1562.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9XpE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56ceb3a5-616c-43dc-ac70-c3e7f4b4d90d_2412x1562.png" width="1456" height="943" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/56ceb3a5-616c-43dc-ac70-c3e7f4b4d90d_2412x1562.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:943,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:239579,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9XpE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56ceb3a5-616c-43dc-ac70-c3e7f4b4d90d_2412x1562.png 424w, https://substackcdn.com/image/fetch/$s_!9XpE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56ceb3a5-616c-43dc-ac70-c3e7f4b4d90d_2412x1562.png 848w, https://substackcdn.com/image/fetch/$s_!9XpE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56ceb3a5-616c-43dc-ac70-c3e7f4b4d90d_2412x1562.png 1272w, https://substackcdn.com/image/fetch/$s_!9XpE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56ceb3a5-616c-43dc-ac70-c3e7f4b4d90d_2412x1562.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Managers often shoulder the formal processes that come with running a team&#8212;performance reviews, hiring decisions, roadmap planning, conflict resolution&#8212;and these tasks can feel large and intimidating. Yet they are fundamentally just high-leverage moments to apply your context. If someone isn&#8217;t hitting expectations, you have the bigger picture of why. If a key candidate is on the fence about joining the team, you can share insights on future product vision and the cultural environment. If a product manager wants to double down on a risky feature, you can offer data on capacity, highlight morale concerns, or compare the opportunity cost with other initiatives. Good managers are always integrating the specifics of the situation with the broader narrative, ensuring decisions serve both immediate goals and the company&#8217;s long-term health.</p><p>At times, you&#8217;ll hear the analogy that a manager is like the &#8220;beating heart&#8221; of the team, circulating information around the organization the way a heart pumps blood to the limbs. ICs are the &#8220;hands and feet&#8221; doing the visible work that moves the product forward. Without the manager&#8217;s steady circulation of context, the system would lack coordination, starve for resources, or chase conflicting priorities. Conversely, a heart without limbs wouldn&#8217;t accomplish much in the real world.</p><p>What makes a manager &#8220;amazing&#8221; is the ability to blend those big-picture insights with genuine human connection. People trust you to represent them well in leadership discussions. They know you&#8217;ll catch subtle signals&#8212;like a developer who&#8217;s close to burnout or a new hire who&#8217;s still unsure about their place on the team&#8212;and offer targeted support. Over time, your calls on hiring, promotions, or roadmap decisions earn a reputation for being smart, fair, and correct more often than not. The credibility you build in these moments leads people to share even more context with you, which further enhances the quality of your decisions. It&#8217;s a virtuous cycle where strong relationships lead to better insight, which leads to better interventions, which reinforces those relationships.</p><p>In short, an effective engineering manager is a trusted node of information flow and a decisive guide who can marry that context with good judgment&#8212;whether it&#8217;s helping a junior engineer navigate a tough design problem or steering the entire team away from a low-impact project. The closer you get to that blend of empathy, clarity, and accuracy, the more you&#8217;ll embody the heartbeat that keeps your organization healthy and thriving.</p><div class="pullquote"><p><em>Enjoy content about startups and dev-productivity? Consider following me to stay updated with reflections &amp; insights while I build Graphite</em></p><p><em><a href="https://x.com/gregmfoster">X.com</a> | <a href="https://www.linkedin.com/in/gregmfoster">LinkedIn</a> | <a href="https://www.threads.net/@fosterfriendship">Threads</a> | <a href="https://bsky.app/profile/fosterfriendship.bsky.social">Bluesky</a></em></p></div><h2><strong>Recommended Reading and Closing Thoughts</strong></h2><p>If you&#8217;re new to management (or contemplating the leap), I highly recommend reading <em>The Manager&#8217;s Path</em> by Camille Fournier for a practical roadmap of the journey from IC to CTO, as well as <em>High Output Management</em> by Andy Grove for a fundamental look at how to lead teams effectively. Books like <em>The Making of a Manager</em> by Julie Zhou can also offer valuable insights into daily leadership habits and common pitfalls.</p><p>Ultimately, if you&#8217;ve ever felt the pull to influence how your team collaborates and how decisions are made&#8212;and not just how code is written&#8212;there&#8217;s a good chance you&#8217;ll find fulfillment on this path. Yes, you&#8217;ll spend less time coding, and yes, you&#8217;ll probably spend more time in meetings than you ever thought possible. But done right, management is a profoundly creative and impactful role. You&#8217;re still &#8220;building something&#8221;&#8212;only now, instead of just writing code, you&#8217;re building and shaping the people, processes, and culture that make the code possible.</p><p>That&#8217;s the essence of being an engineering manager in an early-stage startup: <em>you&#8217;re the heart that circulates knowledge and keeps the team moving in sync, while your ICs are the skilled hands doing the bulk of the visible work.</em> Both are essential, and when done well, each amplifies the other. If you can master these complementary roles&#8212;absorbing context and delivering it at the right time&#8212;you&#8217;ll find that managing engineers can be every bit as satisfying as building the product yourself.</p>]]></content:encoded></item><item><title><![CDATA[The Bryan Johnson Approach to Eng Productivity]]></title><description><![CDATA[I recently watched Netflix&#8217;s Bryan Johnson documentary (Netflix Link) and came away both intrigued and amused by his extreme quest to maximize health and minimize biological age.]]></description><link>https://smalldiffs.gmfoster.com/p/the-brian-johnson-approach-to-eng</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/the-brian-johnson-approach-to-eng</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Mon, 06 Jan 2025 15:53:30 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9d26a743-321e-4a54-962a-cf1fb2ad8b60_790x616.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I recently watched Netflix&#8217;s Bryan Johnson documentary (<a href="https://www.netflix.com/title/81757532">Netflix Link</a>) and came away both intrigued and amused by his extreme quest to maximize health and minimize biological age.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fg1A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9827ace6-8bdf-4427-94f2-d6c99378b44d_2526x1808.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fg1A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9827ace6-8bdf-4427-94f2-d6c99378b44d_2526x1808.png 424w, https://substackcdn.com/image/fetch/$s_!Fg1A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9827ace6-8bdf-4427-94f2-d6c99378b44d_2526x1808.png 848w, https://substackcdn.com/image/fetch/$s_!Fg1A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9827ace6-8bdf-4427-94f2-d6c99378b44d_2526x1808.png 1272w, https://substackcdn.com/image/fetch/$s_!Fg1A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9827ace6-8bdf-4427-94f2-d6c99378b44d_2526x1808.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fg1A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9827ace6-8bdf-4427-94f2-d6c99378b44d_2526x1808.png" width="420" height="300.5769230769231" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9827ace6-8bdf-4427-94f2-d6c99378b44d_2526x1808.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1042,&quot;width&quot;:1456,&quot;resizeWidth&quot;:420,&quot;bytes&quot;:3699898,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fg1A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9827ace6-8bdf-4427-94f2-d6c99378b44d_2526x1808.png 424w, https://substackcdn.com/image/fetch/$s_!Fg1A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9827ace6-8bdf-4427-94f2-d6c99378b44d_2526x1808.png 848w, https://substackcdn.com/image/fetch/$s_!Fg1A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9827ace6-8bdf-4427-94f2-d6c99378b44d_2526x1808.png 1272w, https://substackcdn.com/image/fetch/$s_!Fg1A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9827ace6-8bdf-4427-94f2-d6c99378b44d_2526x1808.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It&#8217;s a story that rubs some people the wrong way: there&#8217;s a natural pushback when someone tries to defeat a universal part of the human condition (i.e., aging). And, as scientists in the documentary noted, one individual&#8217;s relentless n-of-1 experimentation doesn&#8217;t immediately revolutionize science. But if you look beyond his pursuit of &#8220;don&#8217;t die,&#8221; Johnson strikes me as someone who:</p><ul><li><p>Tries to be kind and positive. (Example of him <a href="https://x.com/bryan_johnson/status/1875402249830330863">being kind in the face of a Twitter troll</a>).</p></li><li><p>Shares what he learns but doesn&#8217;t shove it down anyone&#8217;s throat.</p></li></ul><p>In contrast, I hate reading headlines of founders bragging about how many raw hours they make their teams work. In many cases, when you dig into it, these teams are pitifully productive for their time burned. It&#8217;s unhealthy and a narrative that I hate to see perpetuated.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DCUQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd10397d8-423f-4d10-960c-1c755aab0de9_1782x1884.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DCUQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd10397d8-423f-4d10-960c-1c755aab0de9_1782x1884.png 424w, https://substackcdn.com/image/fetch/$s_!DCUQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd10397d8-423f-4d10-960c-1c755aab0de9_1782x1884.png 848w, https://substackcdn.com/image/fetch/$s_!DCUQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd10397d8-423f-4d10-960c-1c755aab0de9_1782x1884.png 1272w, https://substackcdn.com/image/fetch/$s_!DCUQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd10397d8-423f-4d10-960c-1c755aab0de9_1782x1884.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DCUQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd10397d8-423f-4d10-960c-1c755aab0de9_1782x1884.png" width="386" height="408.0041208791209" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d10397d8-423f-4d10-960c-1c755aab0de9_1782x1884.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1539,&quot;width&quot;:1456,&quot;resizeWidth&quot;:386,&quot;bytes&quot;:1331000,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DCUQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd10397d8-423f-4d10-960c-1c755aab0de9_1782x1884.png 424w, https://substackcdn.com/image/fetch/$s_!DCUQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd10397d8-423f-4d10-960c-1c755aab0de9_1782x1884.png 848w, https://substackcdn.com/image/fetch/$s_!DCUQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd10397d8-423f-4d10-960c-1c755aab0de9_1782x1884.png 1272w, https://substackcdn.com/image/fetch/$s_!DCUQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd10397d8-423f-4d10-960c-1c755aab0de9_1782x1884.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Bryan Johnson opens up about the same topic in the documentary. When reflecting on his grinding work ethic at Braintree, he talks about how the unhealthy culture led him to dark depression and suicidal thoughts:</p><blockquote><p>I do not fear death. I sat at its doorstep for a decade alongside chronic depression. Desperately wishing I didn&#8217;t exist. Had it not been for my three children, I probably would have taken my life.<br><a href="https://x.com/bryan_johnson/status/1683261029281861632">https://x.com/bryan_johnson/status/1683261029281861632 </a></p></blockquote><p>By this measure, I don&#8217;t find him offensive. If anything, I admire his curiosity and his advocacy for general health. The controversy arises when you take something as fundamental as aging and say, &#8220;Let&#8217;s see how far we can push this.&#8221; And yet, it also made me ask a fun question: <strong>What would the engineering equivalent be?</strong></p><p>I spend a lot of time working on developer tools&#8212;things that measure productivity, help teams ship better code, and encourage best practices. So naturally, when I see Bryan Johnson pushing the limits of human health, I start to wonder: How far can we push the &#8220;health&#8221; of an engineering organization?</p><h2><strong>The (Sometimes Awkward) Parallels</strong></h2><p>In health, you&#8217;ve got the Hubermans and Bryan Johnsons of the world bringing attention to metrics, interventions, and ways to improve longevity. In software, many of us are doing the same for engineering velocity. It&#8217;s nowhere near as existential as not aging&#8212;but the desire to &#8220;ship fast&#8221; and find new productivity frontiers does mirror the relentless optimization we see in health circles.</p><p>There&#8217;s an obvious counter-critique to chasing engineering productivity: &#8220;Why are you obsessing over metrics and throughput? The point of software isn&#8217;t just to do more, it&#8217;s to build something valuable.&#8221; Fair question&#8212;just like people ask whether the obsession with living longer comes at the cost of living well. We see it in Bryan Johnson&#8217;s lifestyle: is the joy of daily life compromised by 100 pills and rigid routines?</p><p>For an engineering team, there&#8217;s a similar risk. If you over-optimize for raw productivity (lines of code, PR count, etc.), you might forget about the delight or user value that software should bring. So if you do decide to push the limits on engineering speed, it&#8217;s important to be clear about the purpose: it&#8217;s not to create an iron-fisted roadmap that everyone must follow, but to explore what&#8217;s possible and see what useful techniques can trickle out to the broader dev community.</p><div class="pullquote"><p><em>Enjoy content about startups and dev-productivity? Consider following me to stay updated with reflections &amp; insights while I build Graphite</em></p><p><em><a href="https://x.com/gregmfoster">X.com</a> | <a href="https://www.linkedin.com/in/gregmfoster">LinkedIn</a> | <a href="https://www.threads.net/@fosterfriendship">Threads</a> | <a href="https://bsky.app/profile/fosterfriendship.bsky.social">Bluesky</a></em></p></div><h2><strong>Measuring the Extreme Edge</strong></h2><p>In practice, a quest for &#8220;the most productive engineering team&#8221; will produce tons of new questions:</p><ul><li><p><strong>What counts as productivity?</strong> Is it PRs per day, deployments per week, or something else entirely?</p></li><li><p><strong>How do we account for team happiness, code quality, or ultimate business impact?</strong></p></li><li><p><strong>Is raw speed even the right goal?</strong></p></li></ul><p>I like the analogy to Bryan Johnson because he&#8217;s not claiming everyone should mimic him. He does the wacky stuff precisely because it might illuminate a path for new discoveries and knowledge. Similarly, an engineering team that pushes extreme optimization might glean patterns&#8212;maybe around code review cadence or PR sizes&#8212;that other teams can apply in moderation.</p><p>In my own work, analyzing tens of millions of pull requests has already revealed interesting data: <a href="https://graphite.dev/guides/best-practices-managing-pr-size#guidelines-for-an-ideal-pull-request-size">the ideal median PR size for velocity</a>, <a href="https://graphite.dev/blog/how-long-should-ci-take">the sweet spot for CI duration</a>, how certain repository sizes <a href="https://graphite.dev/guides/merge-skew">benefit from ordered merges</a>, and so on. These patterns help guide how we build tools and talk about best practices. Our internal team has ended up in the top percentile of PRs-per-engineer metrics just by living these approaches day in and day out. But there&#8217;s still plenty more to learn, so I&#8217;m starting to measure productivity more systematically.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!We1S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F971a7eef-e31d-4ecb-9632-67de18900d40_1826x590.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!We1S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F971a7eef-e31d-4ecb-9632-67de18900d40_1826x590.png 424w, https://substackcdn.com/image/fetch/$s_!We1S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F971a7eef-e31d-4ecb-9632-67de18900d40_1826x590.png 848w, https://substackcdn.com/image/fetch/$s_!We1S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F971a7eef-e31d-4ecb-9632-67de18900d40_1826x590.png 1272w, https://substackcdn.com/image/fetch/$s_!We1S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F971a7eef-e31d-4ecb-9632-67de18900d40_1826x590.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!We1S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F971a7eef-e31d-4ecb-9632-67de18900d40_1826x590.png" width="1456" height="470" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/971a7eef-e31d-4ecb-9632-67de18900d40_1826x590.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:470,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:187338,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!We1S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F971a7eef-e31d-4ecb-9632-67de18900d40_1826x590.png 424w, https://substackcdn.com/image/fetch/$s_!We1S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F971a7eef-e31d-4ecb-9632-67de18900d40_1826x590.png 848w, https://substackcdn.com/image/fetch/$s_!We1S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F971a7eef-e31d-4ecb-9632-67de18900d40_1826x590.png 1272w, https://substackcdn.com/image/fetch/$s_!We1S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F971a7eef-e31d-4ecb-9632-67de18900d40_1826x590.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">https://getdx.com/research/measuring-developer-productivity-with-the-dx-core-4/</figcaption></figure></div><p>Take the &#8220;DX Core-4&#8221; from <a href="https://getdx.com/research/measuring-developer-productivity-with-the-dx-core-4/">DX</a>. Here&#8217;s a snapshot of how Graphite&#8217;s engineering team totaled up in Q4 2024:</p><ul><li><p><strong>Median diffs per engineer per day:</strong> 6</p></li><li><p><strong>Developer experience index:</strong> (still to be measured)</p></li><li><p><strong>Change failure rate:</strong> 1.05% (the probability that any single PR causes us to pause deployments)</p></li><li><p><strong>Impact:</strong> 24% (percentage of merged PRs marked as &#8220;feat&#8221; in conventional commit style)</p></li></ul><p>Even computing these numbers raised big questions: Which metrics are the best benchmarks? What&#8217;s &#8220;good&#8221; or &#8220;industry standard&#8221;? When does the quest for speed overshadow code sustainability? (Luckily, it&#8217;s easy to agree these are at least healthier measurements than hours-per-week worked.)</p><p>That&#8217;s the messy part of productivity research&#8212;every answer breeds new questions. But I do think there&#8217;s value in trying. Even if not everyone needs to be hyper-productive, a segment of teams pushing the envelope can surface best practices that benefit all. The same logic that justifies Bryan Johnson&#8217;s experimentation might justify an engineering team&#8217;s: it helps us learn, debate, and evolve.</p><p>Should anyone mimic these measures to the extreme? Probably not. Software teams exist to create value for the world; shipping speed is just a means to that end. Still, I believe in leaning into these experiments&#8212;and in sharing the results openly, the successes and the stumbles. If it helps even a fraction of teams discover ways to work more effectively (and maybe with fewer pains along the way), then the experiments are worth it.</p><p>If this post piques your curiosity&#8212;or makes you roll your eyes&#8212;great. We need the skeptics who say, &#8220;Why the obsession with shipping speed?&#8221; just as much as we need the folks who say, &#8220;What&#8217;s the absolute limit of code velocity?&#8221; Somewhere between these extremes lies a healthy middle ground, informed by the outer edges of experimentation. And if a little self-awareness can keep it from devolving into an engineering version of &#8220;don&#8217;t die,&#8221; I&#8217;ll count that as a success.</p>]]></content:encoded></item><item><title><![CDATA[U-hauling Servers on Christmas: Extreme Straight-Line Engineering]]></title><description><![CDATA[BLUF: 10x engineers find the biggest fires, and execute on extreme straight-line solutions, often stepping on toes in the process]]></description><link>https://smalldiffs.gmfoster.com/p/how-to-be-a-10x-engineer-straight</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/how-to-be-a-10x-engineer-straight</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Sat, 04 Jan 2025 19:30:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ntwH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c65117-cbe3-4ad0-8810-58d27bbb11e7_1358x779.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ntwH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c65117-cbe3-4ad0-8810-58d27bbb11e7_1358x779.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ntwH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c65117-cbe3-4ad0-8810-58d27bbb11e7_1358x779.png 424w, https://substackcdn.com/image/fetch/$s_!ntwH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c65117-cbe3-4ad0-8810-58d27bbb11e7_1358x779.png 848w, https://substackcdn.com/image/fetch/$s_!ntwH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c65117-cbe3-4ad0-8810-58d27bbb11e7_1358x779.png 1272w, https://substackcdn.com/image/fetch/$s_!ntwH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c65117-cbe3-4ad0-8810-58d27bbb11e7_1358x779.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ntwH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c65117-cbe3-4ad0-8810-58d27bbb11e7_1358x779.png" width="728" height="417.6082474226804" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63c65117-cbe3-4ad0-8810-58d27bbb11e7_1358x779.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:779,&quot;width&quot;:1358,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:1949584,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ntwH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c65117-cbe3-4ad0-8810-58d27bbb11e7_1358x779.png 424w, https://substackcdn.com/image/fetch/$s_!ntwH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c65117-cbe3-4ad0-8810-58d27bbb11e7_1358x779.png 848w, https://substackcdn.com/image/fetch/$s_!ntwH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c65117-cbe3-4ad0-8810-58d27bbb11e7_1358x779.png 1272w, https://substackcdn.com/image/fetch/$s_!ntwH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c65117-cbe3-4ad0-8810-58d27bbb11e7_1358x779.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h5><em><strong>Where&#8217;s my opinion come from?</strong></em></h5><p><em>I&#8217;m not here to claim that I&#8217;m a 10x developer&#8212;saying so would be wildly arrogant. But I&#8217;ve been around engineering for 15 years, spent time in the trenches with some absolutely brilliant ICs, and helped build engineering tools for folks at Snowflake, Asana, Brex, Ramp, and Square. I co-founded a startup dedicated to making code review faster (and hopefully less painful). Through it all, I&#8217;ve seen firsthand what separates the &#8220;good&#8221; from the unbelievably impactful.</em></p><div><hr></div><h3><strong>What Is a 10x Engineer?</strong></h3><p>When I say &#8220;10x engineer,&#8221; I don&#8217;t mean someone who writes 10 times more code or who logs the most hours. I mean someone who produces <strong>10 times the impact</strong>&#8212;on the product, the business, or the users&#8217; actual lives. It&#8217;s outcomes-focused, not input-focused.</p><p>Does a 10x engineer often crank out code faster than me? Sure.</p><p>Do they sometimes have a knack for debugging or a stellar sense of architecture? Absolutely.</p><p><em>But none of that matters if they don&#8217;t produce tangible, disproportionate <strong>impact</strong>.</em></p><h3><strong>A Crazy Elon Musk Story</strong></h3><p>Let me share a heavily condensed (but still entertaining) anecdote from Elon Musk&#8217;s takeover of Twitter/X. The company was spending a fortune on a data center in Sacramento. The internal estimate was that migrating 5,200 massive server racks to a cheaper data center in Portland would take <strong>months</strong>, because, of course, big data centers have all these security protocols, specialized moving equipment, etc.</p><p>Musk, being Musk, decided that was too slow. So, in December&#8212;right around Christmas&#8212;he and a couple of family members literally hopped on a plane, diverted to Sacramento, rented a Toyota Corolla, and started pulling servers themselves. They pried up floor panels with a pocketknife, hired a motley crew from Yelp, and strapped these 2,000-pound racks onto trucks like college kids moving out of a dorm. In a matter of days, they moved hundreds of servers (something that normally would take weeks or even months).</p><p>Of course, chaos ensued. Some servers still had user data. NTT, the company that owned the data center, wasn&#8217;t thrilled. X missed stable capacity for a bit, which caused meltdown moments&#8212;like that infamous Ron DeSantis Twitter Spaces fiasco. But from one angle, it was a 10x success: They slashed a task initially planned for months down to mere days. The cost savings were enormous, but the tradeoff in downtime, staff morale, and sleepless nights was real.</p><p>So&#8212;both inspiring <strong>and</strong> cautionary.</p><p><em>(Full story here, it&#8217;s a fun one: <a href="https://www.cnbc.com/2023/09/11/elon-musk-moved-twitter-servers-himself-in-the-night-new-biography-details-his-maniacal-sense-of-urgency.html">https://www.cnbc.com/2023/09/11/elon-musk-moved-twitter-servers-himself-in-the-night-new-biography-details-his-maniacal-sense-of-urgency.html</a>)</em></p><h3><strong>The 10x Formula</strong></h3><p>What can we take away from that story (and others like it)?</p><p>1. <strong>Start From the Biggest Problem</strong></p><p>Don&#8217;t spin your wheels on a 2% optimization if there&#8217;s a huge cost sink somewhere else. The best engineers I&#8217;ve worked with target the single most important driver of business or user pain. Then they go straight at it like a dog on a bone.</p><p>2. <strong>Rewrite the Rules (If Needed)</strong></p><p>The timeline is &#8220;6 months.&#8221; Is that actually carved in stone? Maybe if you push or skip steps, you can do it in <strong>3 weeks</strong>. Conventional thinking says you need an official moving team, or 27 approvals, or a detailed project plan. A 10x engineer questions all of those assumptions, sometimes ruthlessly.</p><p>3. <strong>A Big Appetite for Risk</strong></p><p>When Musk &amp; Co. started yanking servers, they risked data breaches, hardware damage, and definitely a few lawsuits. That&#8217;s an extreme example. But being 10x often means tolerating short-term mess or even stepping on toes if it yields enormous, disproportionate wins. (I&#8217;m not saying break the law&#8212;just know that 10x speed can come with some friction.)</p><p><em>Uber famously had <a href="https://www.businessinsider.com/uber-dara-khosrowshahi-ends-toe-stepping-practice-2017-11">an original core value of &#8220;toe stepping,&#8221;</a> but later removed it to limit asshole behavior</em></p><p>4. <strong>First-Principles Pragmatism</strong></p><p>Musk pried open the floor panel with a knife to see if it was &#8220;actually that complicated.&#8221; It wasn&#8217;t, or at least not as complicated as the vendor made it sound. Similarly, when you find yourself debugging or architecting, ask, &#8220;Is there a fundamentally simpler approach if I ignore conventional wisdom for a second?&#8221;</p><p>5. <strong>Own It, Do It, Ship It</strong></p><p>This is the difference between someone who complains about blocked JIRA tickets and someone who drives to the data center themselves at midnight. 10x engineers take personal responsibility. They embody &#8220;If it has to be done, I&#8217;ll figure it out.&#8221;</p><div class="pullquote"><p><em>Enjoying content like this? Consider following me to stay updated with new posts and writings.</em></p><p><em><a href="https://x.com/gregmfoster">X.com</a> | <a href="https://www.linkedin.com/in/gregmfoster">LinkedIn</a> | <a href="https://www.threads.net/@fosterfriendship">Threads</a> | <a href="https://bsky.app/profile/fosterfriendship.bsky.social">Bluesky</a></em></p></div><h3>Examples of Straight-Line Engineering</h3><p>The Elon story is great, but it isn&#8217;t about software engineering. Here are some more relatable examples of achieving root impact ten times faster than default.</p><p><strong>Overnight Debug</strong></p><p>Your flagship service is crashing in prod, costing thousands per hour. Instead of logging a Jira ticket and waiting for triage, you convene a quick 15-minute huddle with your manager and SRE lead to get sign-off on direct debug logs in production. By 1 a.m., you&#8217;ve identified the culprit and shipped a patch, saving days of formal process.</p><p><strong>Last-Minute Feature Demo</strong></p><p>Sales surprises you: an important client wants a specific feature demo in one week, not the planned three months. You corral product, design, and QA into a mini &#8220;war room&#8221; and strip the scope to the bare essentials. After a rapid round of Slack approvals, you ship an MVP that impresses the client&#8212;ugly corners and all.</p><p><strong>Monolith-to-Microservices Blitz</strong></p><p>Your team faces a massive, six-month plan to decompose a legacy monolith. When leadership demands tangible progress in a single sprint, you copy the entire codebase into multiple smaller repos overnight. It&#8217;s hacky, but now each squad can start carving out features on their own timeline, effectively creating a microservices setup in record time.</p><p><strong>Hotfix in Production</strong></p><p>A critical security flaw surfaces late on a Friday afternoon. Rather than scheduling an urgent sprint or forming a governance committee, you grab the security lead and DevOps for a quick risk assessment and swift approval. You patch the vulnerable code directly in prod and monitor logs over the weekend, nipping the issue before it becomes a PR nightmare.</p><p><strong>Data Pipeline &#8220;Weekend Hack&#8221;</strong></p><p>Your analytics pipeline is bogged down, threatening key reporting SLAs. The official solution&#8212;comprehensive refactoring&#8212;will take two sprints, so you pitch a fast weekend hack to the data team: bulk-export to staging servers, parallel-process, and re-import Monday morning. Everyone agrees to this duct-tape fix, restoring performance quickly while planning a better long-term approach.</p><p><strong>The Human Side Matters</strong></p><p>In all these hypotheticals, the real magic isn&#8217;t coding or hacking alone. It&#8217;s how you question default assumptions and secure rapid alignment:</p><p>&#8226; You <strong>communicate</strong> early and clearly about risks.</p><p>&#8226; You <strong>involve</strong> the key people needed for sign-off.</p><p>&#8226; You <strong>negotiate</strong> a shared understanding of what will be sacrificed short-term.</p><p>That&#8217;s often the difference between a 10x solution and a reckless one. A solution is &#8220;reckless&#8221; when you bulldoze ahead solo and surprise everyone. A &#8220;10x solution&#8221; is when you do that same direct path with your team&#8217;s backing and an agreed-upon plan to handle any fallout.</p><h3><strong>The Very Real Downsides</strong></h3><p>1. <strong>Collateral Damage</strong></p><p>Elon&#8217;s server escapade cost some employees their Christmas Eve, put user data at risk, and caused company leaders to freak out. Similarly, doing things at 10x speed can blow up your personal life, damage trust, or lead to corners cut. If everyone at your company tried to do this all the time, you&#8217;d have pure chaos.</p><p>2. <strong>Accumulated Mess</strong></p><p>Shaving 10 months off a project often means the code is loaded with duct tape. You can fix that later&#8212;hopefully&#8212;but you might end up with 100 small fires that never get the attention they deserve. If you keep sprinting from big problem to big problem, you eventually need a &#8220;cleanup day.&#8221; Or three.</p><p>3. <strong>Burnout and Thanklessness</strong></p><p>Putting in heroic hours and ignoring conventional processes can be exhilarating at first. But if you rely on external praise, you might end up feeling under-appreciated. Sometimes a 10x success will just lead people to assume that&#8217;s your normal pace and set expectations even higher next time.</p><p>4. <strong>Not for Everyone, Not All the Time</strong></p><p>Realistically, not everyone wants (or needs) to operate at 10x mania. Teams also need methodical, detail-oriented engineers who ensure quality and keep the lights on when the 10x folks inevitably break something.</p><h3><strong>Do You Even Want to Be 10x?</strong></h3><p>You don&#8217;t <strong>have</strong> to. You&#8217;re not a lesser engineer if you operate at a steady clip, write clean code, and value stable processes. Seriously. Some workplaces thrive on consistent, methodical improvement&#8212;and a 10x renegade might actually hurt them.</p><p>But if you do see a chance to drive massive impact and want to push every lever you&#8217;ve got, here&#8217;s the short version:</p><ol><li><p>Identify the biggest, hairiest problem.</p></li><li><p>Forget the usual timeline&#8212;ask how you can do it 10 times faster.</p></li><li><p>Accept the possibility of chaos, conflict, or short-term ugliness.</p></li><li><p>Get scrappy, do the work yourself if you must, and don&#8217;t stop until it&#8217;s done.</p></li></ol><p>Success here is measured by the <strong>impact</strong> on customers, revenue, or critical product metrics&#8212;not by how many new lines of code you wrote or how impressed your peers are with your commit history. And even if you choose not to execute on the straight line path, sometimes brainstorming can be a worthwhile exercise in planning.</p><p>There&#8217;s a misconception that 10x is just about being the smartest person in the room, writing immaculate code at superhuman speed. Really, it&#8217;s about focusing relentlessly on results, questioning constraints, and taking personal ownership. It can be exhilarating, disruptive, and at times disastrous.</p><p>But if you deploy it wisely&#8212;knowing the tradeoffs&#8212;you can occasionally pull off the impossible, shave months off timelines, and deliver massive wins. And if that&#8217;s something you&#8217;re itching to do, hopefully now you have a playbook. Just remember: &#8220;best practices&#8221; exist for a reason, and you&#8217;ll eventually have to come back to clean up your trail of destruction.</p><p>Pick your battles. Keep your eye on the prize. And if you decide to be a 10x engineer for a moment&#8212;do it with clear intent, accept the risks, and own the outcome. After all, <strong>impact</strong> is the name of the game. Everything else is just process.</p>]]></content:encoded></item><item><title><![CDATA[Will AI Transform—or Threaten—the Per-Seat SaaS Model?]]></title><description><![CDATA[Charging for software has always been a tricky business, and I&#8217;ve watched firsthand how it&#8217;s evolved.]]></description><link>https://smalldiffs.gmfoster.com/p/will-ai-transformor-threatenthe-per</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/will-ai-transformor-threatenthe-per</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Fri, 03 Jan 2025 14:43:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!EBq9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf04a0db-5494-4280-952e-8b38fe78b66e_1968x1136.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EBq9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf04a0db-5494-4280-952e-8b38fe78b66e_1968x1136.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EBq9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf04a0db-5494-4280-952e-8b38fe78b66e_1968x1136.png 424w, https://substackcdn.com/image/fetch/$s_!EBq9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf04a0db-5494-4280-952e-8b38fe78b66e_1968x1136.png 848w, https://substackcdn.com/image/fetch/$s_!EBq9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf04a0db-5494-4280-952e-8b38fe78b66e_1968x1136.png 1272w, https://substackcdn.com/image/fetch/$s_!EBq9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf04a0db-5494-4280-952e-8b38fe78b66e_1968x1136.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EBq9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf04a0db-5494-4280-952e-8b38fe78b66e_1968x1136.png" width="1456" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df04a0db-5494-4280-952e-8b38fe78b66e_1968x1136.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:179477,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EBq9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf04a0db-5494-4280-952e-8b38fe78b66e_1968x1136.png 424w, https://substackcdn.com/image/fetch/$s_!EBq9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf04a0db-5494-4280-952e-8b38fe78b66e_1968x1136.png 848w, https://substackcdn.com/image/fetch/$s_!EBq9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf04a0db-5494-4280-952e-8b38fe78b66e_1968x1136.png 1272w, https://substackcdn.com/image/fetch/$s_!EBq9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf04a0db-5494-4280-952e-8b38fe78b66e_1968x1136.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Charging for software has always been a tricky business, and I&#8217;ve watched firsthand how it&#8217;s evolved. In the consumer world, the early App Store days saw a quick one-time fee of a few bucks for an app, yet developers still had to shoulder an ongoing burden of updates and maintenance. We learned that subscription models often made far more sense&#8212;both for recouping the continuous costs of building software and for matching the actual value delivered over time.</p><p>In the business world, that realization hit even earlier. Microsoft and Adobe used to sell annual licenses for their products, but now pretty much everything has moved to monthly or annual subscriptions. That, in essence, is SaaS (Software-as-a-Service), where customers pay recurring fees, typically <strong>per seat</strong>, for software access, support, and upgrades.</p><h2><strong>Why Per-Seat Pricing Made Sense for So Long</strong></h2><p>Per-seat pricing took hold for a few reasons:</p><p>1. <strong>Simplicity and Alignment:</strong> Paying by user felt straightforward for both finance teams and product teams. As headcount grows, so does usage&#8212;and the bill.</p><p>2. <strong>System of Record:</strong> Many of the best SaaS products evolve into a company&#8217;s central repository (think Slack&#8217;s messages, Notion&#8217;s docs, Figma&#8217;s designs). Because that data can be mission-critical, businesses often want everyone to have a seat, ensuring no one is locked out.</p><p>3. <strong>Predictable Revenue:</strong> On the provider side, it&#8217;s fairly stable. Each new user is new revenue. That&#8217;s made planning and growth forecasts easier.</p><h2><strong>The Downside: Economic Shifts and Headcount Reductions</strong></h2><p>As great as this model seems, it can create serious vulnerabilities during economic downturns or mass layoffs:</p><p>&#8226; <strong>Immediate Revenue Loss:</strong> When a company shrinks its workforce, that triggers an automatic drop in paid seats.</p><p>&#8226; <strong>Budget Scrutiny:</strong> Tightening the belt often leads to prioritizing which tools truly matter. Anything considered non-essential can get dropped or scaled back.</p><p>We saw net-dollar-retention (NDR) dip at many SaaS companies during recent slowdowns. That&#8217;s painful because it sets off a cycle of cost-cutting on the SaaS-provider side, which doesn&#8217;t do any favors for innovation or morale. Historically, the sector bounces back once the economy recovers, but per-seat pricing remains especially exposed to workforce fluctuations.</p><h2><strong>The AI Angle: Fewer Humans, Same (or Greater) Output</strong></h2><p>An even bigger wild card now is <strong>artificial intelligence</strong>. As code generation and large language models continue improving, it&#8217;s not inconceivable that fewer engineers or analysts can accomplish the same workload. I&#8217;ve had conversations with multiple VCs about whether the widespread adoption of AI will shrink the total number of employees at a company who need access to certain tools. It&#8217;s still speculation, but I think it&#8217;s fair to say it&#8217;s where many of the biggest tech companies and investors think the market is heading.</p><p>For a per-seat SaaS vendor, this is an existential threat. If, say, a 50-person engineering department becomes a 30-person department thanks to AI boosts in productivity, that&#8217;s a 40% seat reduction. Multiply that across thousands of customers, and you suddenly have major downward pressure on the revenue model.</p><h2><strong>Rethinking the Pricing Model</strong></h2><p>If AI truly reshapes headcount, <strong>seat-based pricing might have to take a back seat</strong>. Here are a few alternative models I&#8217;ve been thinking about or observing:</p><h4>1. <strong>Usage-Based</strong></h4><p>&#8226; <strong>Datadog Example:</strong> You pay per log, metric, or trace consumed. It&#8217;s great for onboarding&#8212;minimal friction&#8212;but costs scale with usage. The risk is that some customers might try to limit usage to keep costs down, which can undercut the inherent value of the software.</p><h4>2. <strong>Compute/Consumption Model</strong></h4><p>&#8226; <strong>AWS Model:</strong> You&#8217;re billed for compute time, storage, and data transfer. If AI-driven workloads grow, they&#8217;ll naturally require more compute. This ties revenue to actual resource consumption rather than to the number of humans using the platform.</p><h4>3. <strong>Reads vs. Writes</strong></h4><p>&#8226; One idea I&#8217;ve heard (and like) is making &#8220;writes&#8221; free and then charging for &#8220;reads.&#8221; Creating and storing new data is essentially free, encouraging more data in the system, while reading or analyzing that data is where incremental costs kick in. Slack&#8217;s approach to old messages&#8212;paying for historical access&#8212;kind of nods in this direction.</p><h4>4. <strong>Freemium Hybrid</strong></h4><p>&#8226; Attract a broad user base with free or low-cost seats, but charge heavily for advanced features, more storage, or AI-driven insights. This can widen the top of the funnel without giving away too much value for free.</p><h4><strong>The Facebook/X Paradox</strong></h4><p>Though it&#8217;s a B2C example, Facebook&#8217;s model of free user creation but monetized reads (ads) is fascinating. X (formerly Twitter) is also experimenting with a subscription that effectively lets you pay for an ad-free reading experience. In the B2B world, we could see SaaS companies offering free seats for everyone to create and collaborate, yet charging heavily for higher-value interactions like analytics, AI-driven recommendations, or large-scale data queries.</p><h2><strong>Value capture will need to change</strong></h2><p>I&#8217;m personally convinced that system-of-record software will be more essential than ever, even if a company&#8217;s seat count drops. AI runs on data, and it needs somewhere to &#8220;live.&#8221; The question is how to monetize in a world where the number of human users may not be the best proxy for how much value is being created.</p><p>Sometimes, the answer might be usage-based or compute-based billing. In other cases, maybe it&#8217;s a more creative model that charges for action and insight rather than people. But if AI truly delivers on its promise to reshape the workforce, the per-seat pricing structure could look more like an artifact from a different era.</p><p>I suspect we&#8217;ll see more SaaS businesses shift to these alternative models in the next few years&#8212;partly due to macroeconomic forces and partly because AI is challenging every assumption about headcount-based metrics. If the seat count in a typical organization does begin to shrink, I believe those who adapt their pricing to reflect actual resource consumption, data access, or compute cycles will be in a better spot to survive and thrive.</p>]]></content:encoded></item><item><title><![CDATA[Should SaaS startups offer on-prem?]]></title><description><![CDATA[I get asked&#8212;a lot&#8212;to build a self-hosted or on-prem version of Graphite.]]></description><link>https://smalldiffs.gmfoster.com/p/should-saas-startups-offer-on-prem</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/should-saas-startups-offer-on-prem</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Tue, 24 Dec 2024 18:51:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Jjsf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab77c991-42a6-4c5c-a54c-f6b484ef3dee_1964x1062.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Jjsf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab77c991-42a6-4c5c-a54c-f6b484ef3dee_1964x1062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jjsf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab77c991-42a6-4c5c-a54c-f6b484ef3dee_1964x1062.png 424w, https://substackcdn.com/image/fetch/$s_!Jjsf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab77c991-42a6-4c5c-a54c-f6b484ef3dee_1964x1062.png 848w, https://substackcdn.com/image/fetch/$s_!Jjsf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab77c991-42a6-4c5c-a54c-f6b484ef3dee_1964x1062.png 1272w, https://substackcdn.com/image/fetch/$s_!Jjsf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab77c991-42a6-4c5c-a54c-f6b484ef3dee_1964x1062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jjsf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab77c991-42a6-4c5c-a54c-f6b484ef3dee_1964x1062.png" width="1456" height="787" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab77c991-42a6-4c5c-a54c-f6b484ef3dee_1964x1062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:787,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:140805,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Jjsf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab77c991-42a6-4c5c-a54c-f6b484ef3dee_1964x1062.png 424w, https://substackcdn.com/image/fetch/$s_!Jjsf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab77c991-42a6-4c5c-a54c-f6b484ef3dee_1964x1062.png 848w, https://substackcdn.com/image/fetch/$s_!Jjsf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab77c991-42a6-4c5c-a54c-f6b484ef3dee_1964x1062.png 1272w, https://substackcdn.com/image/fetch/$s_!Jjsf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab77c991-42a6-4c5c-a54c-f6b484ef3dee_1964x1062.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I get asked&#8212;<em>a lot</em>&#8212;to build a self-hosted or on-prem version of Graphite. I usually respond with a line I borrowed from Datadog&#8217;s philosophy: I&#8217;ll never say no; I&#8217;ll just quote an extremely high price. Why? I want to maximize our team&#8217;s itteration velocity. Over the years, I&#8217;ve seen how the on-prem conversation can shape product roadmaps and company trajectories. It&#8217;s rarely as simple as saying, &#8220;Sure, we&#8217;ll just let you host it yourself.&#8221;</p><p>It&#8217;s interesting how far the SaaS industry has come. In the early days of software, there was no concept of &#8220;the cloud&#8221;&#8212;everything was on-prem because that was the only way to ship code. If you look at the 1960s and &#8217;70s, entire businesses were built around selling software licenses for mainframe computers. In the &#8217;90s and 2000s, though, the internet and cheaper hardware flipped that model on its head. Companies like Concur (for expenses) and Salesforce (for CRM) opened a new world of web-based solutions, paving the way for SaaS as we know it.</p><p>These days, we think of cloud-hosted SaaS as the default. The typical benefits are pretty well-documented: no huge hardware investments, easy scalability, and remote accessibility. But that same rise of cloud-based software also created tension in industries where control, security, or compliance is paramount. While some companies (Datadog is a famous example) have maintained a hard line on staying fully cloud-hosted, many others end up building an on-prem offering as soon as a lucrative enterprise contract comes knocking.</p><p>I can relate. It stings to turn down seven-figure deals just because you don&#8217;t want to offer an on-prem deployment. But there&#8217;s a good reason so many teams hold out as long as possible: the additional complexity is enormous, and it directly impacts how quickly you can ship and iterate.</p><h2><strong>On-Prem Slows You Down</strong></h2><p>I believe that the most essential principle in software engineering is iteration speed: ship fast, learn, tweak, repeat. Software is uniquely &#8220;soft,&#8221; meaning you can push an update at almost any time&#8212;unlike physical products that are locked in once they leave the factory. On-prem, however, grinds that magical quality to a near halt. Let me explain why.</p><h4>1. <strong>Observability</strong></h4><p>In a standard cloud setup, you can instrument your application to gather metrics, logs, and performance data right in your own environment. With on-prem, you&#8217;re effectively deploying your code into someone else&#8217;s data center. You have to build custom reporting frameworks that &#8220;phone home&#8221; with usage data&#8212;or you settle for flying blind. Either way, you lose the seamless real-time insight you&#8217;d otherwise have.</p><h4>2. <strong>Debugging</strong></h4><p>This is where it gets <em>really</em> messy. If a customer hits a weird bug in an on-prem environment, maybe it&#8217;s your application logic. Or maybe their load balancer is misconfigured, or their OS is on a strange version of Linux, or the database is at capacity. Reproducing that bug often means reconstructing their entire environment, which they may not want to share. Even if they do, it&#8217;s a time sink that quickly kills your iteration speed.</p><h4>3. <strong>Shipping Updates</strong></h4><p>Let&#8217;s say you nail down the bug, fix it, and build a shiny new feature while you&#8217;re at it. How do you deliver those changes? Are you begging your customers to run manual upgrades? Automating behind the scenes? What if you need to perform a database migration&#8212;do you schedule downtime or risk doing it live? Suddenly, something that&#8217;s trivial in a SaaS world becomes a multi-step negotiation for each and every customer environment. <em>The problem is uniquely painful enough to inspire <a href="https://ryvn.ai/">startups dedicated to smoothing the process</a>.</em></p><p>All this grinds velocity to a halt. On-prem can make product iteration painfully slow, draining resources you&#8217;d rather spend building features. For most early-stage companies&#8212;startups especially&#8212;that slow speed is lethal.</p><h2><strong>Potential Workarounds</strong></h2><p>That said, I understand not all businesses don&#8217;t have the luxury of turning down self-hosting requests. There are some creative ways to satisfy the control and compliance needs of certain customers without sacrificing <em>too</em> much velocity.</p><h4><strong>Single-Tenant Cloud</strong></h4><p>You can run a dedicated instance for each customer in your own cloud environment. <a href="https://goteleport.com/blog/time-to-reconsider-going-onprem/">Teleport calls this a &#8220;private cloud&#8221; model</a>. This approach keeps your observability and debugging mostly intact and eliminates your customer&#8217;s hardware overhead. You still have multiple instances to manage, but you can generally push updates more frequently than you could with pure on-prem.</p><h4><strong>Customer VPC with Remote Ops</strong></h4><p>Sometimes you can deploy into the customer&#8217;s VPC and ask for IAM permissions so you can troubleshoot or run upgrades on their behalf. That approach offers them the comfort of hosting in their own environment while still giving you some level of access to debug.</p><h4><strong>Embedded Engineers</strong></h4><p>Palantir famously uses forward-deployed engineers who work directly inside customer organizations. This is overkill for most companies but can be worth it for a massive contract. Your team effectively becomes the ops team within the customer&#8217;s environment&#8212;solid for debugging, but not scalable for smaller deals.</p><div class="pullquote"><p><em>Enjoying content like this? Consider following me to stay updated with new posts and insights.</em></p><p><a href="https://x.com/gregmfoster">X.com</a> | <a href="https://www.linkedin.com/in/gregmfoster">LinkedIn</a> | <a href="https://www.threads.net/@fosterfriendship">Threads</a> | <a href="https://bsky.app/profile/fosterfriendship.bsky.social">Bluesky</a></p></div><h2><strong>Will On-Prem Ever Disappear?</strong></h2><p>I doubt it - though most SaaS founders would wish different. Life is easier when your code runs in one place (your own cloud infrastructure) and you can deploy updates at will. But certain industries&#8212;healthcare, military, finance, advanced AI&#8212;will always push for maximum secrecy. They&#8217;ll say, &#8220;you can&#8217;t dare see our data,&#8221; and that typically means you have to put the actual compute in their environment.</p><p>I&#8217;ve dreamed of building tools that operate on encrypted data without ever decrypting it, but it&#8217;s not generally viable for the average SaaS app right now. We do see some neat hybrid architectures emerging&#8212;like Tecton&#8217;s or Datadog&#8217;s&#8212;that split the difference by running data-processing components inside the customer&#8217;s VPC while hosting the rest of the logic in a central cloud. It&#8217;s a promising direction, but it doesn&#8217;t completely solve the fundamental tension between velocity and on-prem demands.</p><p>If you&#8217;re just getting started, my recommendation is pretty straightforward: either go all-in on on-prem as a key selling point (like Sourcegraph did) or avoid it altogether for as long as you can. The market of customers who don&#8217;t <em>require</em> on-prem is huge&#8212;often big enough to get you to product-market fit and beyond.</p><p>Introducing on-prem too early can slow you down and distract you from making your product great for the majority of your users. Eventually, you might decide it&#8217;s worth addressing specific high-paying segments, but only when you have the resources and stability to handle the complexity.</p><p>At the end of the day, iteration speed is the beating heart of a healthy software business. On-prem can be a serious drag on that heartbeat. Approach it with your eyes open, weigh the trade-offs, and decide if the revenue is truly worth the slowdown.</p>]]></content:encoded></item><item><title><![CDATA[The history of Atlassian, from the perspective of a younger developer]]></title><description><![CDATA[Disclaimer: This post is based on my own experiences and research - it&#8217;s possible I got some details wrong.]]></description><link>https://smalldiffs.gmfoster.com/p/the-history-of-atlassian-from-the</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/the-history-of-atlassian-from-the</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Mon, 23 Dec 2024 16:38:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NP7R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6345141b-c76c-435f-ae89-13152647f221_1279x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NP7R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6345141b-c76c-435f-ae89-13152647f221_1279x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NP7R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6345141b-c76c-435f-ae89-13152647f221_1279x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NP7R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6345141b-c76c-435f-ae89-13152647f221_1279x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NP7R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6345141b-c76c-435f-ae89-13152647f221_1279x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NP7R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6345141b-c76c-435f-ae89-13152647f221_1279x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NP7R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6345141b-c76c-435f-ae89-13152647f221_1279x720.jpeg" width="1279" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6345141b-c76c-435f-ae89-13152647f221_1279x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1279,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NP7R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6345141b-c76c-435f-ae89-13152647f221_1279x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NP7R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6345141b-c76c-435f-ae89-13152647f221_1279x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NP7R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6345141b-c76c-435f-ae89-13152647f221_1279x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NP7R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6345141b-c76c-435f-ae89-13152647f221_1279x720.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p><em>Disclaimer: This post is based on my own experiences and research - it&#8217;s possible I got some details wrong. Feel free to correct me on anything if you have extra historical context!</em></p></blockquote><p>When I think of Atlassian, I envision a B2B SaaS powerhouse that somehow stayed (comparatively) under my radar most of my career. Despite being around for 20-plus years, it didn&#8217;t infiltrate my daily workflows as much as you might expect for a company of its stature. Sure, I would see Jira tickets at previous jobs or occasionally spin up a free Bitbucket repo in college. But those moments were few and far between.</p><p>At Airbnb, we used Jira to keep track of infrastructure fires - everything from urgent server issues to recurring tasks. In theory, that system would have kept our entire team in sync. In practice, we were moving so fast that a lot of tickets were either skipped or closed retroactively after we&#8217;d already solved the problem. On the version control side, when I was a broke college student, Bitbucket caught my attention simply because it let me have a private Git (originally Mercurial) repo for free. That was a lifesaver for group projects and side gigs - otherwise I would&#8217;ve had to pay GitHub for private repos at the time.</p><p>For me, Atlassian was always a bit like a giant in the corner - clearly huge and successful, but not always at the forefront of my personal toolset. And yet, nearly every large enterprise I&#8217;ve encountered has some piece of the Atlassian stack. So, how did it become this quiet yet colossal force in software collaboration?</p><h2><strong>The Early Days: Bootstrapping Through the Dot-Com Bust</strong></h2><p>Atlassian&#8217;s story goes back to 2002, right on the heels of the dot-com bubble bursting. According to <a href="https://historytimelines.co/timeline/atlassian">their historical timeline</a>, the founders - Mike Cannon-Brookes and Scott Farquhar - met at the University of New South Wales and launched the company with about $10,000 of personal credit card debt. They <em>bootstrapped</em> their way through that initial period, largely because venture capital was scarce and attitudes toward risky tech investments were pretty sour.</p><blockquote><p><em>I&#8217;m unbelievably spoilt working on a startup in the 2020&#8217;s. I have massive respect for them bootstrapping Atlassian for 8 years on personal debt.</em></p></blockquote><p>At a time when many startups were either dying off or scrambling for any available funding, the founders stuck to selling on-premises licenses of their early products. They kicked things off with <strong>Jira</strong>, a bug-tracking/issue-tracking tool, and soon after introduced <strong>Confluence</strong>, a wiki-based collaboration platform. This was bold: while a lot of companies were pivoting or folding, Atlassian was doubling down on a bottom-up, product-led growth approach. Their bet was that developers and tech teams would champion the tools <em>if</em> the tools were good enough to solve real-world pains - no big sales force required.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5KvO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31f2d6ee-c239-4c03-92e0-02fdd98088aa_1448x1090.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5KvO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31f2d6ee-c239-4c03-92e0-02fdd98088aa_1448x1090.png 424w, https://substackcdn.com/image/fetch/$s_!5KvO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31f2d6ee-c239-4c03-92e0-02fdd98088aa_1448x1090.png 848w, https://substackcdn.com/image/fetch/$s_!5KvO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31f2d6ee-c239-4c03-92e0-02fdd98088aa_1448x1090.png 1272w, https://substackcdn.com/image/fetch/$s_!5KvO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31f2d6ee-c239-4c03-92e0-02fdd98088aa_1448x1090.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5KvO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31f2d6ee-c239-4c03-92e0-02fdd98088aa_1448x1090.png" width="1448" height="1090" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/31f2d6ee-c239-4c03-92e0-02fdd98088aa_1448x1090.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1090,&quot;width&quot;:1448,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:470969,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5KvO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31f2d6ee-c239-4c03-92e0-02fdd98088aa_1448x1090.png 424w, https://substackcdn.com/image/fetch/$s_!5KvO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31f2d6ee-c239-4c03-92e0-02fdd98088aa_1448x1090.png 848w, https://substackcdn.com/image/fetch/$s_!5KvO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31f2d6ee-c239-4c03-92e0-02fdd98088aa_1448x1090.png 1272w, https://substackcdn.com/image/fetch/$s_!5KvO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31f2d6ee-c239-4c03-92e0-02fdd98088aa_1448x1090.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A huge part of Jira&#8217;s success lay in its elegant concept of the &#8220;ticket&#8221; as an atomic unit of teamwork. Tickets could track bugs, tasks, or anything else that needed some measure of accountability. Competitors at the time included open-source solutions (like Bugzilla) or heavier enterprise products (like Microsoft SharePoint). But Atlassian found a sweet spot: a proprietary solution that was easier to try, cheaper to adopt, and still robust enough for serious enterprise needs.</p><h2><strong>Jira and Confluence: The Bedrock of Collaboration</strong></h2><p>Anyone who&#8217;s used <strong>Jira</strong> knows how quickly it can evolve from a simple ticketing system into a multi-layered project management engine. My old team primarily used it for firefighting (reporting critical incidents, linking them to infrastructure changes, and building out runbooks). But it could just as easily track marketing tasks, sprint boards, or product roadmaps.</p><p><strong>Confluence</strong>, on the other hand, tackled the &#8220;knowledge management&#8221; side of the equation. Instead of storing docs in email attachments or random Dropbox folders, you&#8217;d toss them into Confluence spaces. I remember first encountering Confluence at a large organization: entire runbooks, architectural diagrams, and how-to guides all lived in one place. Even though it sometimes felt a bit unwieldy, it was undeniably powerful as a central hub of knowledge.</p><p>That synergy - <strong>Jira</strong> for tasks and tickets, <strong>Confluence</strong> for team wiki-collaboration - became the bedrock for Atlassian&#8217;s early dominance. Their go-to-market model was also refreshingly simple: you&#8217;d sign up, download, or deploy it on your servers, and Atlassian would charge per user license. No big, expensive pitch. No dozens of calls with a sales rep. Just try it, buy it, and expand as needed.</p><h2><strong>Bitbucket Enters the Picture</strong></h2><p>By the late 2000s, version control systems were undergoing huge changes. <strong>GitHub</strong> had begun to capture developers&#8217; hearts and minds, showing that a hosted Git service could become a central hub for collaboration. Atlassian, recognizing that Git was the next big wave, <a href="https://en.wikipedia.org/wiki/Bitbucket">acquired Bitbucket in 2010</a>. Bitbucket at the time was smaller and focused on <strong>Mercurial</strong>. But as Git&#8217;s popularity soared, Bitbucket added full Git support, and eventually (by 2020) dropped Mercurial altogether.</p><blockquote><p>Facinating to me that BitBucket originally <em>only</em> supported Mercurial</p></blockquote><p>Nowadays, <strong>Bitbucket</strong> is heavily intertwined with Jira. You can open a ticket in Jira, link it to a pull request in Bitbucket, and get your entire code review and deployment pipeline managed under Atlassian&#8217;s broader ecosystem. In contrast, GitHub merges issues and pull requests in a single ID space, effectively blending project management directly into the code platform. Bitbucket took a more integrated, &#8220;ticket-first&#8221; approach. If you&#8217;re already paying for Jira, you might figure, &#8220;Why not just add Bitbucket, too?&#8221; Over time, that synergy led a lot of companies to adopt the Atlassian toolchain end to end.</p><p>One interesting difference: <strong>Bitbucket</strong> was faster than GitHub to add certain DevOps features (CI/CD) and to offer on-premises options (Bitbucket Data Center). So for large enterprises needing self-hosted solutions, Atlassian often became the logical choice.</p><h2><strong>Competing in a Changing Landscape</strong></h2><p>By the mid-2010s, Atlassian had established itself as the serious enterprise alternative to the more developer-community-centric GitHub. They even launched or acquired tools like <strong>Trello</strong> (for Kanban-style project management), <strong>Opsgenie</strong> (for incident response), and <strong>Stride/HipChat</strong> (for team chat) in an effort to build a one-stop shop for business collaboration.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ggoq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ed4a0a3-82e0-4116-8e2c-e058cb49f0ca_1080x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ggoq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ed4a0a3-82e0-4116-8e2c-e058cb49f0ca_1080x720.png 424w, https://substackcdn.com/image/fetch/$s_!Ggoq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ed4a0a3-82e0-4116-8e2c-e058cb49f0ca_1080x720.png 848w, https://substackcdn.com/image/fetch/$s_!Ggoq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ed4a0a3-82e0-4116-8e2c-e058cb49f0ca_1080x720.png 1272w, https://substackcdn.com/image/fetch/$s_!Ggoq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ed4a0a3-82e0-4116-8e2c-e058cb49f0ca_1080x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ggoq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ed4a0a3-82e0-4116-8e2c-e058cb49f0ca_1080x720.png" width="1080" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ed4a0a3-82e0-4116-8e2c-e058cb49f0ca_1080x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How Atlassian Grows | Startup, Growth and Business Lessons&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How Atlassian Grows | Startup, Growth and Business Lessons" title="How Atlassian Grows | Startup, Growth and Business Lessons" srcset="https://substackcdn.com/image/fetch/$s_!Ggoq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ed4a0a3-82e0-4116-8e2c-e058cb49f0ca_1080x720.png 424w, https://substackcdn.com/image/fetch/$s_!Ggoq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ed4a0a3-82e0-4116-8e2c-e058cb49f0ca_1080x720.png 848w, https://substackcdn.com/image/fetch/$s_!Ggoq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ed4a0a3-82e0-4116-8e2c-e058cb49f0ca_1080x720.png 1272w, https://substackcdn.com/image/fetch/$s_!Ggoq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ed4a0a3-82e0-4116-8e2c-e058cb49f0ca_1080x720.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But the new wave of competition started looking different. You had lighter, more design-centric tools like <strong>Linear</strong>, which showed that project tracking doesn&#8217;t have to feel so heavy. Meanwhile, Slack devoured HipChat&#8217;s share of the messaging space. In fact, Atlassian ultimately sold HipChat to Slack rather than try to compete further - a decision that felt like a rare misstep for them. And with the <em>massive</em> growth of <strong>GitHub</strong>, which had a friendlier brand for open source and small teams, Atlassian&#8217;s &#8220;all-in-one&#8221; approach sometimes felt more geared toward big companies with dedicated procurement processes.</p><p>As developer workflows became more modular, many teams began picking best-in-class solutions and stitching them together via standard APIs. You might choose <strong>Notion</strong> for docs, <strong>GitHub</strong> for version control, <strong>Slack</strong> for chat, and a new upstart like <strong>ClickUp</strong> or <strong>Linear</strong> for tickets. Ten years ago, integrating all these separate tools was painful; you&#8217;d need custom scripts or unwieldy APIs. Now, it&#8217;s far more seamless, eroding some of Atlassian&#8217;s biggest advantage in having an integrated suite.</p><h2><strong>Innovating (or Risking Obsolescence?)</strong></h2><p>That begs the question: is Atlassian doomed to become a &#8220;legacy player&#8221; - the same role it once cast its predecessors in? Possibly. But there are good reasons to think they&#8217;ll could stick around.</p><p>1. <strong>Enterprise Loyalty:</strong> Major corporations continue renewing Atlassian licenses year after year. And once a giant company&#8217;s entire ticketing and docs system is entrenched, switching away is non-trivial. The cost of migration can be scary, especially if there are thousands of employees who need retraining.</p><p>2. <strong>Massive Data Vault:</strong> Atlassian houses an incredible amount of data - tickets, wikis, PR histories - for some of the world&#8217;s most influential companies. If Atlassian integrates AI-driven insights, automated ticket triage, or advanced analytics on top of that data, it could offer enormous value that&#8217;s hard for smaller vendors to match.</p><p>3. <strong>Product-Led DNA:</strong> The founders, <a href="https://thoughteconomics.com/scott-farquhar-atlassian/">Mike Cannon-Brookes and Scott Farquhar</a>, have historically prioritized the product-first mentality. That&#8217;s how they built the business from scratch without a big sales org. If they can maintain that ethos, even at Atlassian&#8217;s size, they might keep delivering the right features at the right time.</p><p>On the flip side, new startups with ultra-modern UX, specialized features, and flexible integrations might pull younger companies away from Atlassian&#8217;s ecosystem entirely. The question: can Atlassian release fresh tools quickly enough to stay ahead of that wave?</p><h2><strong>Looking Ahead</strong></h2><p>From my vantage point, Atlassian&#8217;s next decade will hinge on whether it can adapt quickly. The boat was arguably missed with HipChat, but AI-driven collaboration and advanced knowledge management might be Atlassian&#8217;s next big frontier. Imagine a world where Jira automates your ticket updates, Confluence pre-writes your project specs, and Bitbucket uses machine learning to review your code or highlight potential issues. That&#8217;s a compelling future - <em>if</em> they can implement it smoothly and keep pace with smaller startups iterating at lightning speed.</p><p>For Atlassian&#8217;s part, they already have <a href="https://www.atlassian.com/software/rovo">Rovo and other AI initiatives</a> that hint at more advanced capabilities. They also have Atlassian Ventures, a fund investing in startups that complement or extend the Atlassian ecosystem. Perhaps that&#8217;ll help them tap fresh ideas and remain flexible amid a changing tech landscape.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AtcY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08707af0-4a16-4c9d-813b-770cd8ca6631_1632x988.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AtcY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08707af0-4a16-4c9d-813b-770cd8ca6631_1632x988.png 424w, https://substackcdn.com/image/fetch/$s_!AtcY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08707af0-4a16-4c9d-813b-770cd8ca6631_1632x988.png 848w, https://substackcdn.com/image/fetch/$s_!AtcY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08707af0-4a16-4c9d-813b-770cd8ca6631_1632x988.png 1272w, https://substackcdn.com/image/fetch/$s_!AtcY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08707af0-4a16-4c9d-813b-770cd8ca6631_1632x988.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AtcY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08707af0-4a16-4c9d-813b-770cd8ca6631_1632x988.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/08707af0-4a16-4c9d-813b-770cd8ca6631_1632x988.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:394055,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AtcY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08707af0-4a16-4c9d-813b-770cd8ca6631_1632x988.png 424w, https://substackcdn.com/image/fetch/$s_!AtcY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08707af0-4a16-4c9d-813b-770cd8ca6631_1632x988.png 848w, https://substackcdn.com/image/fetch/$s_!AtcY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08707af0-4a16-4c9d-813b-770cd8ca6631_1632x988.png 1272w, https://substackcdn.com/image/fetch/$s_!AtcY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08707af0-4a16-4c9d-813b-770cd8ca6631_1632x988.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Despite its enormous presence, Atlassian didn&#8217;t define most of my own day-to-day workflow. But I can&#8217;t ignore the huge role they play for large enterprises around the globe, or the captivating journey they took - from a $10,000 credit card bet to a publicly traded juggernaut. No matter what the future holds, it&#8217;s hard not to respect the founders for that initial leap and the self-serve model that made Jira and Confluence so ubiquitous.</p><p>Whether Atlassian will reinvent itself to stay a top choice for modern dev teams - or fade into the background as &#8220;legacy software&#8221; - is anyone&#8217;s guess. But if history is any guide, they have a knack for surprising the market. As software collaboration continues to evolve, I&#8217;m fascinated to see what Atlassian does next.</p><p></p><h4><strong>Citations &amp; Further Reading</strong></h4><p>&#8226; <a href="https://historytimelines.co/timeline/atlassian">Atlassian - History Timelines</a></p><p>&#8226; <a href="https://en.wikipedia.org/wiki/Bitbucket">Bitbucket on Wikipedia</a></p><p>&#8226; <a href="https://thoughteconomics.com/scott-farquhar-atlassian/">Thought Economics: Scott Farquhar Interview</a></p><p>&#8226; <a href="https://www.startupdaily.net/advice/atlassians-scott-farquhar-and-mike-cannon-brookes-on-20-things-theyve-learnt-in-20-years/">Atlassian Founders on 20 Things They&#8217;ve Learned in 20 Years</a></p><p>&#8226; <a href="https://www.theobservereffect.org/mikecannonbrookes.html">Deep Dive into the Characters and Values of Mike Cannon-Brookes and Scott Farquhar</a></p>]]></content:encoded></item><item><title><![CDATA[ChatGPT’s “Work With Apps”: Slowly deprecating code editors]]></title><description><![CDATA[On Thursday, OpenAI showcased improvements to ChatGPT&#8217;s &#8220;work with apps&#8221; functionality.]]></description><link>https://smalldiffs.gmfoster.com/p/chatgpts-work-with-apps-the-everything</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/chatgpts-work-with-apps-the-everything</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Fri, 20 Dec 2024 16:08:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9e5c52-752e-479c-9325-e3eb19325537_1600x900.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>On Thursday, OpenAI showcased improvements to <a href="https://help.openai.com/en/articles/10119604-work-with-apps-on-macos">ChatGPT&#8217;s &#8220;work with apps&#8221;</a> functionality. Instead of limiting interactions to a chat window, ChatGPT can now read what&#8217;s currently visible on your screen, analyze the selection, and interact directly with other applications. This is achieved by pulling context through the standard accessibility API - an approach that not only enables rich, contextual interactions but also encourages developers to uphold accessibility best practices. As tools become more adept at tapping into these standard interfaces, there&#8217;s a stronger business incentive for companies to adhere to accessibility guidelines. The result could be a more inclusive digital ecosystem where every user, regardless of their abilities, benefits from advanced interactions.</p><div id="youtube2-g_qxoznfa7E" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;g_qxoznfa7E&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/g_qxoznfa7E?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Several apps are already lining up to integrate. Notion, Warp, and others are embracing this evolution. Older, more entrenched platforms - like Microsoft Office - may initially resist. But how long can they hold out when interoperability comes through a consistent, standardized API rather than a proprietary plugin? As momentum builds, reluctance will be harder to justify.</p><p>OpenAI&#8217;s team has hinted that this is just the beginning. Instead of users copying and pasting between windows, future iterations might integrate even more fluidly with your workflow. Consider what it means for knowledge work: <a href="https://app.grammarly.com/">Grammarly</a> already suggests in-line edits and improvements without requiring us to hop between tools. Why shouldn&#8217;t our AI assistants do the same, not just for grammar or formatting, but for end-to-end creation, editing, and integration of all types of content, including code?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xS0T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9e5c52-752e-479c-9325-e3eb19325537_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xS0T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9e5c52-752e-479c-9325-e3eb19325537_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!xS0T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9e5c52-752e-479c-9325-e3eb19325537_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!xS0T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9e5c52-752e-479c-9325-e3eb19325537_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!xS0T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9e5c52-752e-479c-9325-e3eb19325537_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xS0T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9e5c52-752e-479c-9325-e3eb19325537_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b9e5c52-752e-479c-9325-e3eb19325537_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xS0T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9e5c52-752e-479c-9325-e3eb19325537_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!xS0T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9e5c52-752e-479c-9325-e3eb19325537_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!xS0T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9e5c52-752e-479c-9325-e3eb19325537_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!xS0T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9e5c52-752e-479c-9325-e3eb19325537_1600x900.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>What Does This Mean for Development Tools?</strong></h2><p>Engineering, historically, is a text-based discipline. Sure, we have GUIs for configuring cloud services and dashboards for DNS management, but the trend has always swung back to &#8220;config-as-code.&#8221; We articulate our systems through text files - YAML configs, Terraform scripts, Dockerfiles - and store them in code repositories. As AI models become more capable, three distinct patterns are emerging:</p><h4>1. <strong>Smarter Autocompletion in Existing Editors</strong></h4><p>Tools like VSCode, Cursor, and Windsurf offer contextual suggestions. This first wave is intelligence grafted onto the editor experience, making coding faster and less error-prone but still anchored in the traditional environment of text editing.</p><h4>2. <strong>Headless Code Generation</strong></h4><p>A second trend is emerging where code changes skip the editor entirely. Tools like Google&#8217;s experimental <a href="https://labs.google.com/jules/home">Jules</a>, <a href="https://www.cognition.ai/blog/introducing-devin">Cognition&#8217;s Devin</a>, and platforms like <a href="https://www.factory.ai/">Factory.ai</a> aim to commit meaningful code changes directly to repositories. This bypasses the local editor and introduces a more autonomous, AI-driven approach to code creation.</p><h4>3. <strong>A Unified Interface Layer on Top of &#8220;Dumb&#8221; Editors</strong></h4><p>Now ChatGPT hints at a third path: an interface layer that can read and write to applications directly through something like an accessibility API. Instead of relying on editor-specific extensions, ChatGPT might present a universal interaction layer that orchestrates multiple tools. It could act as an intelligent &#8220;bridge&#8221; between you and a variety of applications - none of which need to be made &#8220;smart&#8221; themselves.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x6cq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e17b9d-c162-4c95-a3cc-f0ffd5089478_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x6cq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e17b9d-c162-4c95-a3cc-f0ffd5089478_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!x6cq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e17b9d-c162-4c95-a3cc-f0ffd5089478_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!x6cq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e17b9d-c162-4c95-a3cc-f0ffd5089478_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!x6cq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e17b9d-c162-4c95-a3cc-f0ffd5089478_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x6cq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e17b9d-c162-4c95-a3cc-f0ffd5089478_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4e17b9d-c162-4c95-a3cc-f0ffd5089478_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!x6cq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e17b9d-c162-4c95-a3cc-f0ffd5089478_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!x6cq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e17b9d-c162-4c95-a3cc-f0ffd5089478_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!x6cq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e17b9d-c162-4c95-a3cc-f0ffd5089478_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!x6cq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e17b9d-c162-4c95-a3cc-f0ffd5089478_1600x900.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If we consider these paths, which is most likely to dominate? If the contest were only between the first two paradigms - smart autocompletion within editors versus headless code generation - headless would eventually win. Why? Because real engineering teams aren&#8217;t just pairs of programmers making small suggestions in one another&#8217;s IDEs. They&#8217;re networks of autonomous, capable individuals who propose high-level architectural changes, iterate on significant refactors, and collaborate through code review processes rather than line-by-line autocompletion. As soon as AI models become just &#8220;smart enough,&#8221; human-level interactions with code will transition from typing in editors to guiding AI agents to produce fully formed changes directly in repositories.</p><h2><strong>Rethinking the Interface of Collaboration</strong></h2><p>This raises an important question: where do we guide these AI agents? Before, it seemed natural that prompting would occur within GitHub&#8217;s interface (or any other system of record) - after all, GitHub is where we host, review, and merge code. It has maximum context and doesn&#8217;t need a sophisticated editor UI in an agentic world. But OpenAI&#8217;s demonstration suggests another possibility: a unified workspace like ChatGPT itself could become the place where prompts are given. Why browse GitHub  when the AI interface can read from GitHub, write to it, and ultimately manage the entire creation?</p><p>Imagine prompting ChatGPT: &#8220;Create a new PR that adds feature X.&#8221; With deeper GitHub integration, ChatGPT could read codebase context, spin up a new branch, write the code, push it, and open a pull request - without ever leaving the ChatGPT window. The human developer&#8217;s job shifts from typing code to supervising AI-driven tasks, guiding architectural decisions, and ensuring strategic alignment. Copy-and-paste dissolves, replaced by a frictionless &#8220;everything&#8221; interface. GitHub becomes reduced to a system of record and pipes, and its custom-build interface begins melting.</p><h2><strong>A New Model of Creation</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DcaW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6af6b5a-0921-487c-adb5-0596ad1f4e71_2446x1296.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DcaW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6af6b5a-0921-487c-adb5-0596ad1f4e71_2446x1296.png 424w, https://substackcdn.com/image/fetch/$s_!DcaW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6af6b5a-0921-487c-adb5-0596ad1f4e71_2446x1296.png 848w, https://substackcdn.com/image/fetch/$s_!DcaW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6af6b5a-0921-487c-adb5-0596ad1f4e71_2446x1296.png 1272w, https://substackcdn.com/image/fetch/$s_!DcaW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6af6b5a-0921-487c-adb5-0596ad1f4e71_2446x1296.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DcaW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6af6b5a-0921-487c-adb5-0596ad1f4e71_2446x1296.png" width="1456" height="771" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6af6b5a-0921-487c-adb5-0596ad1f4e71_2446x1296.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:771,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:188679,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DcaW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6af6b5a-0921-487c-adb5-0596ad1f4e71_2446x1296.png 424w, https://substackcdn.com/image/fetch/$s_!DcaW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6af6b5a-0921-487c-adb5-0596ad1f4e71_2446x1296.png 848w, https://substackcdn.com/image/fetch/$s_!DcaW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6af6b5a-0921-487c-adb5-0596ad1f4e71_2446x1296.png 1272w, https://substackcdn.com/image/fetch/$s_!DcaW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6af6b5a-0921-487c-adb5-0596ad1f4e71_2446x1296.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As these AI-driven interactions expand, we might see a gradual dissolution of traditional editor boundaries. Notion for docs, Figma for designs, and VSCode for code might still exist as data sources and specialized back-ends, but the creation interface may unify into a universal &#8220;front end&#8221; like ChatGPT. AI will act as the translator and integrator, pulling context from Notion pages, committing code changes directly into GitHub, or exporting design frames to a Figma file - all initiated by commands in a single interface.</p><p>In this scenario, the differentiated value of each platform becomes the mechanical systems they provide - CI/CD pipelines, merge queues, or high-performance data synchronization - rather than their role as primary user interfaces. The specialized apps remain essential for integration, storage, performance, and compliance, but the user&#8217;s day-to-day creation and editing could shift to a single, AI-driven surface.</p><h2><strong>Who Loses, Who Wins?</strong></h2><p>Traditional editor apps might risk becoming &#8220;headless back-ends&#8221; for AI agents. Instead of navigating multiple tools, users could use ChatGPT as the main interaction point. The winners will be pipes-based tools that provide value storing, moving, and computing data. The losers are the per-seat tools, those that pride themselves on niche, custom-built editing UIs.</p><p><em>Side note - accessibility pattern users also stand to be huge short-term winners. This may lead to the largest up-pri of screenreader API adoption ever seen.</em></p><p>Ultimately, the shift is toward a universal creation interface - an &#8220;everything-editor&#8221; - powered by AI. As intelligence becomes commoditized, convenience and frictionless integration matter most. Content, code, and data all flow through a unified channel. The future could be one where the lines between tool, assistant, and environment blur, and where the &#8220;app&#8221; you interact with is less important than the intelligence and integration that the app enables.</p>]]></content:encoded></item><item><title><![CDATA[Biographical vs. Aspirational Startup Values]]></title><description><![CDATA[I&#8217;ve always been skeptical about traditional company values.]]></description><link>https://smalldiffs.gmfoster.com/p/biographical-vs-aspirational-startup</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/biographical-vs-aspirational-startup</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Thu, 19 Dec 2024 12:58:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!EtzN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e6abcc-b623-4bf0-8462-a1fc4291844f_1684x984.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve always been skeptical about traditional company values. I remember my early days as an engineer at Airbnb, where the leadership put enormous effort into crafting and socializing their value statements. <a href="https://careers.airbnb.com/life-at-airbnb/">They ended up with a well-crafted set</a> - &#8220;Champion the Mission,&#8221; &#8220;Be a Host,&#8221; &#8220;Embrace the Adventure,&#8221; and &#8220;Be a Cereal Entrepreneur.&#8221; </p><p><em>There was once a fifth value: &#8220;Simplify,&#8221; which ironically vanished over time, simplifying itself right out of existence. That always made me sad - simplify was perhaps the best value because it was, well, simple and actionable.</em></p><p>Airbnb&#8217;s values were clever, sure, but I always had to look them up to remember them. Even having worked there for years, I could only consistently recall &#8220;Be a Host.&#8221;</p><p>This isn&#8217;t to pick on Airbnb; they&#8217;re just my most salient point of reference. The challenge with so many company values, especially in the early days, is that they&#8217;re aspirational to a fault. Often, they&#8217;re meticulously worded, on-brand, and uplifting - but not always directly actionable. How do you decide whether to reduce AWS costs or over-provision your database for stability by referring back to &#8220;Embrace the Adventure&#8221;? These principles can feel too vague to settle real-world tradeoffs. You end up with either overly broad platitudes or niche specifics that no one remembers.</p><p>When we started Graphite, we tried to articulate a set of values we wanted to embody. We came up with something like this:</p><ol><li><p><strong>Work in Pencil</strong></p><ol><li><p>We constantly edit and improve everything we build.</p></li><li><p>Expect your work to be changed or erased as we grow.</p></li></ol></li><li><p><strong>Mine, Cut, and Polish</strong></p><ol><li><p>Start by testing many ideas to discover what resonates.</p></li><li><p>Refine and reduce to only what&#8217;s most valuable.</p></li><li><p>Polish until the result is stunning.</p></li></ol></li><li><p><strong>Exercise Empathy</strong></p><ol><li><p>Understand what matters to users and teammates.</p></li><li><p>Treat everyone with kindness, honesty, and respect.</p></li></ol></li><li><p><strong>Play Like a Championship Team</strong></p><ol><li><p>We&#8217;re a team, not a family.</p></li><li><p>Align ambitions with the team&#8217;s goals.</p></li><li><p>When we succeed, we celebrate together.</p></li></ol></li></ol><p>We spent hours debating and refining these statements. The hardest part was wrestling with hypothetical situations: How should we weigh quality versus prototyping speed? When should we push for polish versus good-enough solutions? These theoretical tradeoffs led to endless discussions. The result, while thoughtful, sometimes felt too aspirational - more like predictions of who we hoped to be than reflections of who we actually were. And just like Airbnb&#8217;s values, the the team struggles to rattle them off - <em>they&#8217;re simply hard to remember.</em></p><p>Over time, I&#8217;ve come to believe that early on, you shouldn&#8217;t waste much time trying to nail down company values. In the beginning, what you need is traction - forward motion that tells you what actually matters. Only after you&#8217;ve faced repeated challenges and made hard decisions do certain truths emerge as genuinely core. <strong>Values should be an uncontentious record of battles won and lessons learned, not a wishlist for who you might become someday.</strong></p><p>At Graphite, I&#8217;ve found myself organically settling on three simple words that capture what we, the team, live and breathe every day:</p><h2><strong>Kindness, Expertise, and Urgency.</strong></h2><p>That&#8217;s it. Three words, easy to remember, and perfectly aligned with who we&#8217;ve become. When candidates ask about our values, I say these three words. They&#8217;re uncontentious internally, and they reflect attributes we&#8217;ve seen proven crucial, time and again. If someone doesn&#8217;t embody all three, it shows quickly. These values help us hire the right people and, if necessary, let go of those who aren&#8217;t a fit.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EtzN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e6abcc-b623-4bf0-8462-a1fc4291844f_1684x984.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EtzN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e6abcc-b623-4bf0-8462-a1fc4291844f_1684x984.png 424w, https://substackcdn.com/image/fetch/$s_!EtzN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e6abcc-b623-4bf0-8462-a1fc4291844f_1684x984.png 848w, https://substackcdn.com/image/fetch/$s_!EtzN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e6abcc-b623-4bf0-8462-a1fc4291844f_1684x984.png 1272w, https://substackcdn.com/image/fetch/$s_!EtzN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e6abcc-b623-4bf0-8462-a1fc4291844f_1684x984.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EtzN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e6abcc-b623-4bf0-8462-a1fc4291844f_1684x984.png" width="1456" height="851" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09e6abcc-b623-4bf0-8462-a1fc4291844f_1684x984.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:851,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:96546,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EtzN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e6abcc-b623-4bf0-8462-a1fc4291844f_1684x984.png 424w, https://substackcdn.com/image/fetch/$s_!EtzN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e6abcc-b623-4bf0-8462-a1fc4291844f_1684x984.png 848w, https://substackcdn.com/image/fetch/$s_!EtzN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e6abcc-b623-4bf0-8462-a1fc4291844f_1684x984.png 1272w, https://substackcdn.com/image/fetch/$s_!EtzN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e6abcc-b623-4bf0-8462-a1fc4291844f_1684x984.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Kindness</strong></h3><p>We&#8217;re an in-person company, working together under high pressure, iterating at the whiteboard, debating product direction, and building for world-class engineering teams. Half our job is building the company itself - collaborating, communicating, and leading. Without kindness, this environment becomes intolerable. We need people who are supportive, who turn tense moments into opportunities for understanding, who help others feel safe to contribute. Without kindness, the whole thing falls apart.</p><h3><strong>Expertise</strong></h3><p>We&#8217;re not just building a product; we&#8217;re building an opinionated tool that tells world-class engineers - at places like Vercel, Datadog, and Snowflake - how they should shape their development workflows. That&#8217;s a bold stance. You can&#8217;t convincingly do that unless you know your craft inside and out. Expertise is non-negotiable. If you&#8217;re going to guide top-tier engineering teams, you need to be at their level - or pushing beyond it.</p><h3><strong>Urgency</strong></h3><p>Our mission is to help engineers ship code faster. We exist to accelerate software development. We&#8217;re also a startup, and speed is one of our greatest advantages. We&#8217;re not advocating recklessness, but we do believe in moving quickly, trimming unnecessary steps, and pushing out iterations to learn faster. If something&#8217;s blocking progress, we resolve it immediately. We ask: &#8220;What can we do right now to move one step closer to our goal?&#8221; Move fast, stay nimble, stay alive.</p><blockquote><p><a href="https://x.com/mikemcg0/status/1738905866747752448">&#8220;Startups are like sharks. If they stop swimming they die.&#8221;</a></p></blockquote><h2><strong>Evolving Values Over Time</strong></h2><p>What&#8217;s beautiful about these values - kind, expert, urgency - is that they emerged naturally over time. I didn&#8217;t force them into existence. After two years of growth, iteration, and facing real-world challenges, these words feel obvious, almost inevitable. They reflect the core of who we are and what we need. They&#8217;re easy to remember, easy to explain, and easy to uphold.</p><p>Will our values change again as we learn more, evolve, and grow? Possibly. Probably. Values should be living, reflective documents, not stone tablets. Today, these three principles describe our lived culture. And if a few years from now, we learn new lessons that push us to re-articulate our values again, we&#8217;ll update our values again to accurately describe the energy in the room.</p>]]></content:encoded></item><item><title><![CDATA[Week in review - Sunday, Dec 15th]]></title><description><![CDATA[This week&#8217;s lineup spans everything from how Graphite&#8217;s own engineering team accelerates code delivery, to the future of AI-driven developer workflows, to rethinking the fundamentals of version control.]]></description><link>https://smalldiffs.gmfoster.com/p/week-in-review-sunday-dec-15th</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/week-in-review-sunday-dec-15th</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Mon, 16 Dec 2024 00:32:39 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c3403409-1e4e-4051-8531-9d0c1d085279_2262x1546.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This week&#8217;s lineup spans everything from how Graphite&#8217;s own engineering team accelerates code delivery, to the future of AI-driven developer workflows, to rethinking the fundamentals of version control. If you missed any posts, here&#8217;s a quick recap and direct links to each.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://smalldiffs.gmfoster.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;201c4b3f-694f-48a4-82bc-6033cf1dee47&quot;,&quot;caption&quot;:&quot;We&#8217;ve evolved from basic code generation tools into more nuanced AI-driven analysis and insights. The next frontier is integrating AI deeper into build, test, and deployment pipelines&#8212;places that demand high reliability. Expect AI&#8217;s role to expand from code suggestions to holistic optimization of the entire software lifecycle.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;AI in dev tools, late 2024: where we are and where we might be headed&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:7119536,&quot;name&quot;:&quot;Greg Foster&quot;,&quot;bio&quot;:&quot;Cofounder of graphite.dev - building the future of code review&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f0592da-8faa-427e-b141-9a3ec028e399_659x659.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-12-09T15:57:02.521Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3484062b-f7fa-4743-ba7d-0b069befa31f_2262x1546.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://gregmfoster.substack.com/p/ai-in-dev-tools-late-2024-where-we&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:152839496,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Daily DevTools&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96331af8-47c8-4d24-8b13-ba8be3ddaa9e_542x542.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;5ffb91e1-2999-46f4-8bca-0e970574dfb5&quot;,&quot;caption&quot;:&quot;Git&#8217;s complexity intimidates even experienced developers. This post imagines a simpler interface focused on &#8220;diffs&#8221; instead of branches, with straightforward commands and easy undo steps. The goal: a version control workflow that&#8217;s intuitive, less error-prone, and accessible to newcomers.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Git is bad. Here's how I'd make it better&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:7119536,&quot;name&quot;:&quot;Greg Foster&quot;,&quot;bio&quot;:&quot;Cofounder of graphite.dev - building the future of code review&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f0592da-8faa-427e-b141-9a3ec028e399_659x659.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-12-10T13:24:10.892Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe57d73e1-117a-406f-848d-29477f80041c_330x478.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://gregmfoster.substack.com/p/git-is-bad-heres-how-id-make-it-better&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:152888959,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Daily DevTools&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96331af8-47c8-4d24-8b13-ba8be3ddaa9e_542x542.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;a7ce5ecc-f27b-474b-aa46-c9376146b4af&quot;,&quot;caption&quot;:&quot;With some AI coding assistants priced at $200/month, are developers willing to pay? Reflecting on the history of tool pricing&#8212;from expensive proprietary IDEs to the free open-source era&#8212;we&#8217;re now facing a new normal. As AI tools become indispensable, higher price tags may feel increasingly justifiable for the productivity gains they deliver.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Pricing Intelligence: Is ChatGPT Pro too expensive for developers?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:7119536,&quot;name&quot;:&quot;Greg Foster&quot;,&quot;bio&quot;:&quot;Cofounder of graphite.dev - building the future of code review&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f0592da-8faa-427e-b141-9a3ec028e399_659x659.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-12-11T12:56:21.763Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c94843-d57e-40a4-a7fa-3a9e69b90c6e_1788x1042.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://gregmfoster.substack.com/p/pricing-intelligence-is-chatgpt-pro&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:152960444,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Daily DevTools&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96331af8-47c8-4d24-8b13-ba8be3ddaa9e_542x542.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;5fc1dd42-6545-4c31-9be8-f835b6e76a74&quot;,&quot;caption&quot;:&quot;Amazon and GitLab each launched AI coding assistants integrated into their ecosystems, but neither product stands out against established players. To truly differentiate, these platform-native tools need to leverage their unique vantage points&#8212;like cost optimization or pipeline intelligence&#8212;rather than just matching generic AI code suggestions.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Amazon Q and GitLab Duo: Still Missing a Killer Differentiator&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:7119536,&quot;name&quot;:&quot;Greg Foster&quot;,&quot;bio&quot;:&quot;Cofounder of graphite.dev - building the future of code review&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f0592da-8faa-427e-b141-9a3ec028e399_659x659.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-12-12T13:02:52.384Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://gregmfoster.substack.com/p/amazon-q-and-gitlab-duo-still-missing&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:153017860,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Daily DevTools&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96331af8-47c8-4d24-8b13-ba8be3ddaa9e_542x542.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;ff602bae-8218-4c46-9d3b-459cab789954&quot;,&quot;caption&quot;:&quot;Stacking small, incremental PRs is already boosting developer velocity and clarity. Pairing this approach with AI-generated (&#8220;agentic&#8221;) PRs could be transformative. As AI tools continuously generate code changes, stacking provides a natural structure&#8212;letting both humans and AI systems iterate rapidly without compromising quality.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Stacking and Agentic PRs Go Hand in Hand&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:7119536,&quot;name&quot;:&quot;Greg Foster&quot;,&quot;bio&quot;:&quot;Cofounder of graphite.dev - building the future of code review&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f0592da-8faa-427e-b141-9a3ec028e399_659x659.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-12-13T21:04:31.130Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://gregmfoster.substack.com/p/stacking-and-agentic-prs-go-hand&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:153088435,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Daily DevTools&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96331af8-47c8-4d24-8b13-ba8be3ddaa9e_542x542.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f85d576d-57be-48e6-9084-7a559f26cb6a&quot;,&quot;caption&quot;:&quot;Our engineering team&#8217;s secret sauce is a combination of stacked pull requests, parallelized workflows, and thoughtful iteration&#8212;no all-nighters required. We share real data showing how we far exceed industry benchmarks for merged PRs per engineer, all while keeping changes reviewable and quality high.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How Graphite&#8217;s Eng Team Ships Code Remarkably Fast&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:7119536,&quot;name&quot;:&quot;Greg Foster&quot;,&quot;bio&quot;:&quot;Cofounder of graphite.dev - building the future of code review&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f0592da-8faa-427e-b141-9a3ec028e399_659x659.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-12-15T23:37:19.010Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://gregmfoster.substack.com/p/how-graphites-engineering-team-ships&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:153160393,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Daily DevTools&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96331af8-47c8-4d24-8b13-ba8be3ddaa9e_542x542.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://smalldiffs.gmfoster.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><em>Thanks for reading, and enjoy the rest of your Sunday!</em></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How Graphite’s Eng Team Ships Code Remarkably Fast]]></title><description><![CDATA[TL;DR: Yes, we ship code fast - at a pace that&#8217;s unusual even by top-tier engineering standards.]]></description><link>https://smalldiffs.gmfoster.com/p/how-graphites-engineering-team-ships</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/how-graphites-engineering-team-ships</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Sun, 15 Dec 2024 23:37:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!S58J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p><strong>TL;DR:</strong> Yes, we ship code fast - at a pace that&#8217;s unusual even by top-tier engineering standards. But more importantly, we do it by embracing a workflow that minimizes the waiting game, encourages thoughtful iteration, and makes the most of our tools.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S58J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S58J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png 424w, https://substackcdn.com/image/fetch/$s_!S58J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png 848w, https://substackcdn.com/image/fetch/$s_!S58J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png 1272w, https://substackcdn.com/image/fetch/$s_!S58J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S58J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png" width="1432" height="1082" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1082,&quot;width&quot;:1432,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:198769,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!S58J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png 424w, https://substackcdn.com/image/fetch/$s_!S58J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png 848w, https://substackcdn.com/image/fetch/$s_!S58J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png 1272w, https://substackcdn.com/image/fetch/$s_!S58J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61130d37-e727-4099-a99b-977b1134ee17_1432x1082.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Why Discussing Speed Is Tricky</strong></h2><p>Engineering productivity is a sensitive topic. On the surface, it sounds simple - ship more code, faster. In reality, it&#8217;s not that straightforward. Different products and teams have vastly different requirements, from complex regulatory hurdles to intricate performance constraints. Metrics like lines of code or hours in the office rarely capture the true nuance. Every experienced engineer knows that &#8220;butts in seats&#8221; or &#8220;hours worked&#8221; is a poor proxy for real productivity. Quality matters. Thoughtfulness matters. Maintenance and reliability matter. And yet, we keep coming back to the same question: <strong>&#8220;Is your engineering team fast?&#8221;</strong></p><p>At Graphite, I get asked this question a lot - by investors, customers, potential hires, and even peers at other companies. Some form of the question inevitably pops up: <em>&#8220;Are you pushing the team hard enough?&#8221;</em> or <em>&#8220;I&#8217;ve heard of companies that pull all-nighters - are you doing that?&#8221;</em> Sometimes, it&#8217;s simply: <em>&#8220;You build productivity tools, so you must be insanely productive yourselves, right?&#8221;</em></p><p>These questions don&#8217;t come from a bad place. They come from curiosity and the desire to understand what &#8220;fast&#8221; looks like. They also come from a world where, historically, productivity has been measured in the wrong ways. That said, if you&#8217;re on the outside looking in, it can be perplexing. Our team is well-compensated, well-supported, and trusted to work their own hours - yet we don&#8217;t subscribe to the &#8220;always on&#8221; hustle, nor do we push for grinding 20-hour days. How, then, do we show that we are indeed moving at an exceptional pace?</p><h2><strong>Measuring Code Change Velocity</strong></h2><p>If there&#8217;s one thing Graphite knows, it&#8217;s how to measure the flow of code. After all, one of our core offerings is built around managing and tracking pull requests.</p><p>So I&#8217;ve decided to let the data speak for itself. Below are some metrics collected over a recent quarter (Q4 2024) for our 9-person engineering team. I compared them against industry-wide benchmarks (based on aggregate data from GitHub repositories of all shapes and sizes):</p><ul><li><p><strong>Number of Pull Requests per Engineer per Quarter (Median):</strong></p><ul><li><p>Industry median: 33 PRs per engineer</p></li><li><p>Graphite median: 324 PRs per engineer</p></li></ul></li><li><p><strong>Number of Pull Requests per Engineer per Quarter (P90):</strong></p><ul><li><p>Industry P90: 114 PRs per engineer</p></li><li><p>Graphite: 489 PRs per engineer</p></li></ul></li><li><p><strong>Median Lines Changed per PR:</strong></p><ul><li><p>Industry median: 36 lines</p></li><li><p>Graphite median: 34 lines</p></li></ul></li><li><p><strong>Median Time to Merge (from PR open to merge):</strong></p><ul><li><p>Industry median: 2.7 hours</p></li><li><p>Graphite median: 5.7 hours</p></li></ul></li></ul><p>The takeaway? Graphite&#8217;s engineering team is in the 99th percentile and beyond when it comes to throughput measured by merged PRs. Our changes aren&#8217;t abnormally small, and our time-to-merge is actually a bit slower than average. Yet, we produce far more merged PRs per engineer than typical teams.</p><p>At first blush, that might seem contradictory. If we merge more slowly, how are we shipping more code? The key lies in how we structure our work.</p><h2><strong>The Secret Sauce: Stacked PRs and Parallelized Work</strong></h2><p>A defining principle of our development process is the use of <strong>stacked PRs</strong>, a core concept we champion. Traditionally, waiting for a PR to merge before moving on to the next related change can act as a bottleneck. By stacking PRs, we break down large changes into a series of smaller, reviewable increments. Each increment can be developed, reviewed, and tested concurrently. Instead of waiting idly for one PR to merge, engineers can continue building the next layer of functionality.</p><p>This approach naturally leads to a higher total count of PRs - each one is smaller and more focused. It also means that a single PR might wait in the queue a bit longer (hence the slightly increased median time-to-merge), but the overall flow of code doesn&#8217;t stall. Engineers are never blocked; they always have another PR to work on. As a result, the entire chain of features moves forward in parallel, and a steady, healthy drumbeat of merged PRs follows.</p><p>This method directly reflects the philosophy behind Graphite&#8217;s tooling. Our product encourages an iterative, parallelized workflow that maximizes efficiency without sacrificing code quality. We eat our own dog food, and it&#8217;s working.</p><h2><strong>Perspective and Caution</strong></h2><p>Now, none of this is to say that shipping a large number of PRs is the only metric that matters. Teams vary widely in their domains, skill sets, and constraints. Some products need more rigor and longer review cycles due to the criticality of their software - think medical devices or financial platforms. Others might have less internal tooling or different cultural norms around code review. Simply aiming to be &#8220;faster&#8221; without understanding your product&#8217;s unique context can lead to burnout or dropped quality standards.</p><p>I share these metrics and our workflow not to brag, but to inspire. If you&#8217;re a leader frequently asked about your team&#8217;s productivity, let these numbers serve as one data point. If you&#8217;re an IC engineer who knows how nuanced productivity truly is, consider this a case study of how process and tooling can unlock surprising speed. And if you&#8217;re evaluating Graphite itself - either as a prospective employee, customer, or curious observer - know that we&#8217;re not only building productivity tools, we&#8217;re proving they work.</p><h2>A Small Team with Remarkable Pace</h2><p>It&#8217;s fair to be skeptical of any claims about &#8220;incredible speed&#8221; in engineering teams. The industry has a long history of measuring the wrong things and glorifying overwork. I hope to show a different story: a small team shipping at a remarkable pace, not because we&#8217;re pulling constant all-nighters, but because we&#8217;re leveraging parallel workflows, trusting each other, and using our own tools to minimize friction.</p><p>Is Graphite&#8217;s engineering team fast? The data suggests we are, by a wide margin. More importantly, we&#8217;ve found a model that consistently lets us iterate quickly, maintain quality, and stay sane. I believe others can learn from this, adapt it to their own contexts, and ultimately deliver value to their users at a pace that might just surprise them.</p>]]></content:encoded></item><item><title><![CDATA[Stacking and Agentic PRs Go Hand in Hand]]></title><description><![CDATA[I spend a lot of time thinking about stacked pull requests.]]></description><link>https://smalldiffs.gmfoster.com/p/stacking-and-agentic-prs-go-hand</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/stacking-and-agentic-prs-go-hand</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Fri, 13 Dec 2024 21:04:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uBL6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I spend a lot of time thinking about stacked pull requests. As the founder of Graphite, I&#8217;ve seen how this developer workflow has grown more and more popular - originally popularized internally at Facebook, and now adopted by thousands of fast-moving teams. The idea is simple: instead of working on large, monolithic pull requests, you break changes into a series of small, incremental PRs that build on top of each other. It&#8217;s a method designed to help teams move quickly without sacrificing the quality and clarity that comes with smaller chunks of code.</p><p>At the same time, I&#8217;m watching with a mix of excitement and caution as a new trend emerges: AI-generated pull requests. Several companies are racing to build &#8220;self-driving PRs,&#8221; where autonomous systems read your entire codebase, understand outstanding tasks, and start submitting their own PRs - like tireless open-source contributors who never sleep and never lose focus. In theory, this could dramatically reduce the manual time developers spend writing boilerplate code, hunting down bugs, or implementing repetitive features.</p><p>What intrigues me is how these two trends - stacked PRs and AI-generated PRs - might intersect. How does the workflow of tomorrow look when we blend the human pattern of stacking with the robotic efficiency of machine-generated pull requests?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uBL6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uBL6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png 424w, https://substackcdn.com/image/fetch/$s_!uBL6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png 848w, https://substackcdn.com/image/fetch/$s_!uBL6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png 1272w, https://substackcdn.com/image/fetch/$s_!uBL6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uBL6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png" width="1456" height="931" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:931,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:420111,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uBL6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png 424w, https://substackcdn.com/image/fetch/$s_!uBL6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png 848w, https://substackcdn.com/image/fetch/$s_!uBL6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png 1272w, https://substackcdn.com/image/fetch/$s_!uBL6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2570ed74-63cf-4f82-920c-ed48e6e6ceb6_3480x2224.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Why Smaller PRs Are Better</strong></h2><p>It&#8217;s widely accepted that small, focused PRs are the gold standard. They&#8217;re easier to review, catch fewer bugs, and integrate into production faster. Small PRs also reduce the risk of massive conflicts and make rollbacks painless when something unexpected happens in production.</p><p>The challenge with small PRs is the overhead. After creating one, you typically wait: wait for continuous integration (CI) checks, wait for a code review, and then wait for a merge queue. If you worked linearly, you&#8217;d be stuck twiddling your thumbs every time you push a small change. That&#8217;s where stacking comes in. Instead of waiting around, you branch off an unmerged PR and keep going. You move in parallel with the review and CI cycles, accelerating your iteration without bloating the scope of any single PR.</p><p>This is incredibly liberating for teams that value speed. It creates a virtuous cycle: small PRs remain small because you never feel the need to stuff a bunch of extra changes in just to stay busy. Instead, you rely on stacking to keep moving forward, adding small increments of value to the codebase in quick succession.</p><h2><strong>Collaboration Through Stacks</strong></h2><p>Stacking also makes collaborative development more natural. Instead of two engineers editing the same file in real time - potentially creating confusion or conflicts - they coordinate through a chain of PRs. For example, one engineer might introduce a new API endpoint in the first PR, while another stacks a second PR that integrates it into the frontend. The result is a neat, linear sequence of changes that makes it easy to understand the evolution of the feature, roll back if needed, and track down when a particular bug was introduced.</p><h2><strong>A Perfect Match for AI-Generated PRs</strong></h2><p>Now, consider AI-driven systems slotting into this workflow. The advantages that humans gain from small, stacked PRs would matter even more to AI. If an AI model can propose a tiny improvement - a refactoring here, a style tweak there - it can do so rapidly and repeatedly. It won&#8217;t get bored or frustrated by waiting on feedback loops; it will just move on to the next incremental improvement.</p><p>But to maintain those rapid-fire cycles, you don&#8217;t want the AI sitting idle, waiting for PR #1 to get merged before starting on PR #2. <strong>As AI brings coding time to zero, validation steps become a bigger bottleneck.</strong> If you&#8217;re going to have an AI agent writing code continuously, it makes perfect sense to let it stack PRs on top of each other. While the first PR waits for CI and human review, the AI can already be working on the next unit of value. This parallelization aligns perfectly with the AI&#8217;s unending capacity for work.</p><p>In the same way that humans collaborate through stacks, AI can collaborate with humans - or even with other AI models - in a stacked environment. One model might be great at quickly drafting a new UI component, while another model specializes in performance optimizations. A human can start the chain, the AI can pick it up and continue, and another model (or a human) can finish the refinement. This layered approach lets everyone - human or machine - contribute within a structure that remains clear and incremental.</p><h2><strong>The Future: Agentic, Modular, and Fast</strong></h2><p>All engineering processes improve when we modularize, create dependency graphs, and parallelize work. Code changes are no exception. Stacked PRs provide a natural way to apply these principles to software development, and as we move toward a future of agentic, AI-driven code generation, the importance of stacking only grows.</p><p>Rather than viewing self-driving PRs as a separate paradigm, I see them as a natural extension of what we&#8217;re already doing: making PRs smaller, faster, and more collaborative. The synergy between stacked PRs and AI-generated PRs will define the cutting edge of software delivery - leading to codebases that evolve continuously, effortlessly, and intelligently.</p><p>In a world where code can be written at any time, from anywhere (including by non-human agents), the need to organize, structure, and control that flow of changes becomes paramount. Stacked PRs provide that structure. AI-generated PRs bring the raw horsepower. Together, they create a future where software development is both high-velocity and reliably stable - exactly the kind of environment we should be building toward.</p>]]></content:encoded></item><item><title><![CDATA[Amazon Q and GitLab Duo: Still Missing a Killer Differentiator]]></title><description><![CDATA[Amazon Web Services (AWS) and GitLab recently unveiled their AI-driven developer assistants - Amazon Q Developer (now generally available) and GitLab Duo Enterprise. Both announcements promise to streamline the development lifecycle: Amazon Q Developer claims a deep understanding of your AWS environment to help manage infrastructure, optimize costs, and even handle code transformations, while GitLab Duo positions itself as an AI &#8220;companion&#8221; that supports coding, securing, and troubleshooting software throughout the DevSecOps pipeline.]]></description><link>https://smalldiffs.gmfoster.com/p/amazon-q-and-gitlab-duo-still-missing</link><guid isPermaLink="false">https://smalldiffs.gmfoster.com/p/amazon-q-and-gitlab-duo-still-missing</guid><dc:creator><![CDATA[Greg Foster]]></dc:creator><pubDate>Thu, 12 Dec 2024 13:02:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Amazon Web Services (AWS) and GitLab recently unveiled their AI-driven developer assistants - <a href="https://aws.amazon.com/blogs/aws/amazon-q-developer-now-generally-available-includes-new-capabilities-to-reimagine-developer-experience/">Amazon Q Developer (now generally available)</a> and <a href="https://aws.amazon.com/blogs/aws/introducing-gitlab-duo-with-amazon-q/">GitLab Duo Enterprise</a>. Both announcements promise to streamline the development lifecycle: Amazon Q Developer claims a deep understanding of your AWS environment to help manage infrastructure, optimize costs, and even handle code transformations, while GitLab Duo positions itself as an AI &#8220;companion&#8221; that supports coding, securing, and troubleshooting software throughout the DevSecOps pipeline.</p><p>At first glance, each offering seems well-tuned to its native platform. Amazon Q Developer, trained on AWS&#8217;s own 17-year corpus of service knowledge, focuses on tying code and infrastructure together, helping developers understand and manipulate AWS resources directly from the console or IDE. GitLab Duo, by contrast, extends GitLab&#8217;s repository management, CI/CD, and security scanning capabilities with AI - streamlining code suggestions, vulnerability explanations, test generation, and even pipeline failure root-cause analysis.</p><p>Yet, these new tools land in a world already saturated with AI developer assistants. GitHub Copilot, ChatGPT-based integrations, Codeium, Cursor, and a host of smaller players have been delivering smart code completions, test generation, and security suggestions for over a year. The question, then, is whether Amazon Q Developer and GitLab Duo offer something uniquely valuable - or are simply late entries in a game that&#8217;s already advanced.</p><h2><strong>What Amazon Q Developer Offers</strong></h2><p>Amazon Q Developer&#8217;s pitch is that it isn&#8217;t just another general-purpose coding assistant. It&#8217;s an AWS expert. Key capabilities include:</p><ul><li><p><strong>AWS Infrastructure Awareness:</strong> Q can list and describe AWS resources, navigate the console, and generate AWS CLI commands. A developer can say, &#8220;List all of my Lambda functions in Singapore,&#8221; and Q returns not just code suggestions, but direct links and CLI instructions. Q also helps with cost exploration, summarizing which AWS services drive spending and linking directly into Cost Explorer for validation.</p></li><li><p><strong>Code Transformation and IDE Integration:</strong> Q can assist with code upgrades - like migrating Java projects to newer versions - right from within JetBrains IntelliJ IDEA or VS Code. It can also generate development plans and test code in real time. All this happens under the AWS umbrella, leaning on secure sign-ins and Builder IDs.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BzfM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64606e88-3cdd-4773-888d-844f69d1237e_1024x605.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BzfM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64606e88-3cdd-4773-888d-844f69d1237e_1024x605.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BzfM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64606e88-3cdd-4773-888d-844f69d1237e_1024x605.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BzfM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64606e88-3cdd-4773-888d-844f69d1237e_1024x605.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BzfM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64606e88-3cdd-4773-888d-844f69d1237e_1024x605.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BzfM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64606e88-3cdd-4773-888d-844f69d1237e_1024x605.jpeg" width="1024" height="605" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64606e88-3cdd-4773-888d-844f69d1237e_1024x605.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:605,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BzfM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64606e88-3cdd-4773-888d-844f69d1237e_1024x605.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BzfM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64606e88-3cdd-4773-888d-844f69d1237e_1024x605.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BzfM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64606e88-3cdd-4773-888d-844f69d1237e_1024x605.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BzfM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64606e88-3cdd-4773-888d-844f69d1237e_1024x605.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The unique angle is that Q attempts to move beyond generic coding help by integrating operational and financial insights. Instead of fumbling through multiple AWS dashboards, a developer can query infrastructure and costs in natural language. By doing so, Q aims to position itself as a single point of AI-enabled navigation across the AWS stack.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wpbV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3176912-2776-4470-b646-ab0dbaea8faa_928x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wpbV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3176912-2776-4470-b646-ab0dbaea8faa_928x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wpbV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3176912-2776-4470-b646-ab0dbaea8faa_928x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wpbV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3176912-2776-4470-b646-ab0dbaea8faa_928x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wpbV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3176912-2776-4470-b646-ab0dbaea8faa_928x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wpbV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3176912-2776-4470-b646-ab0dbaea8faa_928x1024.jpeg" width="468" height="516.4137931034483" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3176912-2776-4470-b646-ab0dbaea8faa_928x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:928,&quot;resizeWidth&quot;:468,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wpbV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3176912-2776-4470-b646-ab0dbaea8faa_928x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wpbV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3176912-2776-4470-b646-ab0dbaea8faa_928x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wpbV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3176912-2776-4470-b646-ab0dbaea8faa_928x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wpbV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3176912-2776-4470-b646-ab0dbaea8faa_928x1024.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>What GitLab Duo Promises</strong></h2><p>GitLab Duo takes a different path. It&#8217;s not just a code editor assistant, though it does offer the familiar code completions and test generation. Instead, its capabilities span:</p><ul><li><p><strong>IDE and CLI Integration:</strong> Smart completions, chat-based refactoring, test generation, and explanation of code directly in your IDE.</p></li><li><p><strong>CI/CD Troubleshooting:</strong> Automated root-cause analysis of pipeline failures, with suggestions for remediation - a clear nod to GitLab&#8217;s existing strength in CI/CD.</p></li><li><p><strong>Security and Compliance:</strong> Explanations of vulnerabilities, along with auto-generated merge requests to fix them. By integrating directly into the commit-to-deploy pipeline, Duo promises developers can address security issues before they hit production.</p></li><li><p><strong>Summaries and Templating:</strong> Merge request summaries, issue and epic explanations, and a &#8220;conversation&#8221; layer that can parse GitLab&#8217;s entire project history.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lyu7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lyu7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png 424w, https://substackcdn.com/image/fetch/$s_!Lyu7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png 848w, https://substackcdn.com/image/fetch/$s_!Lyu7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!Lyu7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lyu7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png" width="1456" height="989" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:989,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Lyu7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png 424w, https://substackcdn.com/image/fetch/$s_!Lyu7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png 848w, https://substackcdn.com/image/fetch/$s_!Lyu7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!Lyu7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e72b6a-9c4b-449a-9eb6-772c08c97b65_1943x1320.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>GitLab Duo&#8217;s differentiator is its promise to provide AI assistance at every stage of DevSecOps, not just coding. It&#8217;s about tying all project artifacts - issues, epics, merges, tests, security scans - into a single, AI-interpreted narrative that helps teams ship more secure software, faster.</p><h2><strong>A Crowded World Already Full of AI Assistants</strong></h2><p>If I isolate the feature lists - code suggestions, chat-style Q&amp;A, summarization, test generation, command recall - these capabilities are table stakes in late 2024. Smaller, more agile vendors have been pushing this frontier for a while. The brute functionality of generative AI coding is no longer an innovation. The novelty has worn off.</p><p>What Amazon Q and GitLab Duo have going for them is <strong>their native integration into enterprise ecosystems</strong>. While independent developers can easily install Cursor or Codeium, large enterprises often prefer a sanctioned, vendor-backed solution. GitLab and AWS each have substantial footholds in large organizations. Many Fortune 500 companies already rely on AWS infrastructure and GitLab&#8217;s pipelines, and are eager for AI solutions blessed by their existing security and compliance frameworks.</p><p>In short, these new offerings might not lure the AI-savvy solo developer, who can mix and match tools as they please. But the CIO of a major enterprise might be far more comfortable adopting Q and Duo organization-wide, ensuring uniform compliance, data privacy, and consolidated billing. Here, the &#8220;innovation&#8221; is more about distribution and procurement than technical features.</p><h2><strong>Still Missing a Killer Differentiator</strong></h2><p>Despite these advantages, there&#8217;s a lingering sense that Amazon Q and GitLab Duo could do more. Amazon Q, for example, knows your AWS configuration and cost structure. Why not turn that into proactive guidance? Q could, theoretically, identify underutilized EC2 instances and suggest infrastructure-as-code changes, then automatically generate and test those changes before deployment. Instead of merely listing resources or running transformations on request, Q could become a continuously improving co-pilot of your cloud architecture.</p><p>Similarly, GitLab Duo could take code review summaries and vulnerability scans a step further. Why not have Duo actively propose architectural improvements or pipeline optimizations that only make sense given the entire organization&#8217;s codebase and historical CI/CD data? It could provide dynamic guardrails or even self-healing pipelines based on learned best practices gleaned from the enterprise&#8217;s own repository history.</p><p>These types of &#8220;multiplay&#8221; features - scenarios that only make sense when integrated deeply into the entire stack - are what could truly differentiate these native tools from generic LLM-based assistants. The potential is enormous. Both Amazon and GitLab sit atop vast troves of system-level knowledge, infrastructure data, and historical code patterns. If they harness that vantage point, AI can do more than just autocomplete code - it can reshape the process of building and running software in ways smaller competitors cannot.</p><h2><strong>Enterprise Distribution is Not Enough</strong></h2><p>Amazon Q and GitLab Duo arrive late to a crowded party. On pure functionality, they&#8217;re no more compelling than what developers have had access to for over a year. But timing is not everything; their advantage lies in their position within large enterprise ecosystems, where trust, compliance, and existing contracts matter a great deal.</p><p>That said, the current feature sets - fancy as they appear - remain incremental. Long-term success will require delivering capabilities that justify enterprise-wide adoption: proactive infrastructure optimization, integrated compliance and cost management, security-first development workflows that transcend single-player coding sessions.</p><p>Right now, these offerings feel like safer, top-down versions of AI tools everyone already knows. The path to real differentiation runs through leveraging each platform&#8217;s unique organizational data and capabilities. If Amazon Q and GitLab Duo focus on that path, they might yet redefine how enterprise developers build, secure, and manage software. If they don&#8217;t, they risk becoming just another check-the-box feature in an already crowded landscape.</p>]]></content:encoded></item></channel></rss>