<?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[Jerry Ng]]></title><description><![CDATA[Jerry Ng]]></description><link>https://articles.jerryng.dev</link><image><url>https://substackcdn.com/image/fetch/$s_!pQE5!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda40c580-63ea-4973-9a6a-c0a717c0b42b_4032x2268.jpeg</url><title>Jerry Ng</title><link>https://articles.jerryng.dev</link></image><generator>Substack</generator><lastBuildDate>Sun, 12 Jul 2026 20:50:50 GMT</lastBuildDate><atom:link href="https://articles.jerryng.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jerry Ng]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[jerryng1@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[jerryng1@substack.com]]></itunes:email><itunes:name><![CDATA[Jerry Ng]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jerry Ng]]></itunes:author><googleplay:owner><![CDATA[jerryng1@substack.com]]></googleplay:owner><googleplay:email><![CDATA[jerryng1@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jerry Ng]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Stacked Diffs and Valorant]]></title><description><![CDATA[Beautiful (when it works...)]]></description><link>https://articles.jerryng.dev/p/stacked-diffs-and-valorant</link><guid isPermaLink="false">https://articles.jerryng.dev/p/stacked-diffs-and-valorant</guid><dc:creator><![CDATA[Jerry Ng]]></dc:creator><pubDate>Tue, 07 Apr 2026 02:31:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Bg61!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20e5cf2-fc87-404f-92cb-42d307ef8628_1440x811.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Stacked diffs are often cited as a notable <a href="https://newsletter.pragmaticengineer.com/p/stacked-diffs">missing workflow of git and Github</a>. The idea is relatively simple in that you are creating an impromptu dev branch and reviewing the changes before eventually pulling that dev branch into your repository. </p><p>The reason that they are a core feature I wanted to build into nugit is because of how startup culture works. In startups, pretty much everyone is a developer. Your manager is a developer, your marketer is a developer, your CTO is a developer. Everyone is focused on making things happen and building out the functionality of a new system. That means everyone is focused on building. </p><p>Reviewing becomes secondary and is a huge context switch cost. The more time spent reviewing means the more time spent not building. But if you don&#8217;t review properly you can break production and everyone will hate their lives. </p><p>Stacked diffs are effectively a way of just organizing your features as you build them so you don&#8217;t have to wait for the reviews before you continue building on top of features you need to create. If there&#8217;s changes you need to make early in the stack, you can easily propagate those changes to the downstream branches. This more or less already handled in Github from a coder perspective. The issue is as a reviewer.</p><h2>A Brief Aside</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Bg61!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20e5cf2-fc87-404f-92cb-42d307ef8628_1440x811.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Bg61!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20e5cf2-fc87-404f-92cb-42d307ef8628_1440x811.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Bg61!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20e5cf2-fc87-404f-92cb-42d307ef8628_1440x811.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Bg61!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20e5cf2-fc87-404f-92cb-42d307ef8628_1440x811.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Bg61!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20e5cf2-fc87-404f-92cb-42d307ef8628_1440x811.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Bg61!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20e5cf2-fc87-404f-92cb-42d307ef8628_1440x811.jpeg" width="1440" height="811" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c20e5cf2-fc87-404f-92cb-42d307ef8628_1440x811.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:811,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Making VAL Console across Sydney, Seattle, Singapore, and LA | Riot Games&quot;,&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="Making VAL Console across Sydney, Seattle, Singapore, and LA | Riot Games" title="Making VAL Console across Sydney, Seattle, Singapore, and LA | Riot Games" srcset="https://substackcdn.com/image/fetch/$s_!Bg61!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20e5cf2-fc87-404f-92cb-42d307ef8628_1440x811.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Bg61!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20e5cf2-fc87-404f-92cb-42d307ef8628_1440x811.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Bg61!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20e5cf2-fc87-404f-92cb-42d307ef8628_1440x811.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Bg61!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20e5cf2-fc87-404f-92cb-42d307ef8628_1440x811.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>With respect to video games, I think of stacked diffs as timing a play as a lurker in a tactical shooter like Valorant. Lurkers need to be able to move in parallel with the team, but at their own pace. They have a different set of context and want to move as fast as possible but lurkers heavily rely on your team matching your pace. The <strong>key idea</strong> is that lurkers are <strong>amazing </strong>to work with <strong>when they&#8217;re good at it</strong>, but they&#8217;re <strong>terrible </strong>to work with<strong> when they&#8217;re bad at it.</strong> If they go to slow, you just get caught and are ineffective because not enough noise was created to distract for you. If they move to fast, then the round is effectively over before you can make an impact. </p><p>The <strong>issue with the current workflow for PRs</strong> is that the team is moving really fast but no one is matching each others pace so being effective just ends up being extremely painful.  <strong>It&#8217;s impossible to move at the right speed, </strong>which makes plays like this impossibly difficult to manifest (for a software team). </p><div id="youtube2-ARxsnmvWfk8)" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;ARxsnmvWfk8)&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/ARxsnmvWfk8)?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 style="text-align: center;"><em>Effective lurking feels criminal</em></p><h2>How it works in nugit</h2><p>When building it into nugit, I decided to manifest stack diffs through stacking PRs to take advantage of a Github user&#8217;s familiarity with the idea where you can make a PR and have the base be anything, including the default branch.</p><p>When you&#8217;re reviewing a stack in Github, for a stack of 3 PRs, you have to either have 3 tabs open or navigate in and out of PRs over and over to get context on whats happening. You get the bare minimum context from the Github PR review screen as it is, and this just drastically cranks up the pain. If each PR was isolated it would be fine, but when you&#8217;re two PRs deep on your stack and the last PR draws from both the previous PRs in different files, you&#8217;ll be hard pressed to easily understand the changes without significant mental overhead. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sufv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d39e54d-ea06-421b-83bd-7feb020eed2b_1223x765.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sufv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d39e54d-ea06-421b-83bd-7feb020eed2b_1223x765.png 424w, https://substackcdn.com/image/fetch/$s_!sufv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d39e54d-ea06-421b-83bd-7feb020eed2b_1223x765.png 848w, https://substackcdn.com/image/fetch/$s_!sufv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d39e54d-ea06-421b-83bd-7feb020eed2b_1223x765.png 1272w, https://substackcdn.com/image/fetch/$s_!sufv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d39e54d-ea06-421b-83bd-7feb020eed2b_1223x765.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sufv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d39e54d-ea06-421b-83bd-7feb020eed2b_1223x765.png" width="1223" height="765" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d39e54d-ea06-421b-83bd-7feb020eed2b_1223x765.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:765,&quot;width&quot;:1223,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76995,&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;:&quot;https://jerryng1.substack.com/i/193423839?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d39e54d-ea06-421b-83bd-7feb020eed2b_1223x765.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sufv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d39e54d-ea06-421b-83bd-7feb020eed2b_1223x765.png 424w, https://substackcdn.com/image/fetch/$s_!sufv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d39e54d-ea06-421b-83bd-7feb020eed2b_1223x765.png 848w, https://substackcdn.com/image/fetch/$s_!sufv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d39e54d-ea06-421b-83bd-7feb020eed2b_1223x765.png 1272w, https://substackcdn.com/image/fetch/$s_!sufv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d39e54d-ea06-421b-83bd-7feb020eed2b_1223x765.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 style="text-align: center;"><em>Stack of PRs are open on the left with file exploration on the right</em></p><p>I added a stack view specifically to cover this situation. You can easily thumb between PRs to be able to see what files are changed between the two while looking at the directory. This gets me 80% of what I want when I first look at a stack. I just want to know what the differences between PRs are in terms of the files they&#8217;re effecting, because I already know the code base and can pick out if theres files missing that need to be changed to roll out a described feature. </p><p>If you want to try nugit, you can find it <a href="https://github.com/jerrying123/nugit">here</a>.<br><br></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://articles.jerryng.dev/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 and support my work.</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[Swimming (in code) and nugit]]></title><description><![CDATA[I wish someone else made this]]></description><link>https://articles.jerryng.dev/p/swimming-in-code-and-nugit</link><guid isPermaLink="false">https://articles.jerryng.dev/p/swimming-in-code-and-nugit</guid><dc:creator><![CDATA[Jerry Ng]]></dc:creator><pubDate>Tue, 07 Apr 2026 02:18:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zgEi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae7a206-e885-4536-aff1-6c00d2417121_860x456.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The software development cycle has felt so much more painful in the past year relative to what its felt like in the past. There have always been pain points that were acknowledged and seen as the cost of doing business. Complicated merge conflicts, lack of proper testing coverage, missing documentation, etc. AI coding seemed to have solve a few of these things just based on the ease of generating more stuff. But in turn, it has led to a dramatic increase in how much code needs to be reviewed, both by the creator but also by people who are reviewers on Pull Requests (PRs).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zgEi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae7a206-e885-4536-aff1-6c00d2417121_860x456.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zgEi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae7a206-e885-4536-aff1-6c00d2417121_860x456.png 424w, https://substackcdn.com/image/fetch/$s_!zgEi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae7a206-e885-4536-aff1-6c00d2417121_860x456.png 848w, https://substackcdn.com/image/fetch/$s_!zgEi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae7a206-e885-4536-aff1-6c00d2417121_860x456.png 1272w, https://substackcdn.com/image/fetch/$s_!zgEi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae7a206-e885-4536-aff1-6c00d2417121_860x456.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zgEi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae7a206-e885-4536-aff1-6c00d2417121_860x456.png" width="860" height="456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cae7a206-e885-4536-aff1-6c00d2417121_860x456.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:456,&quot;width&quot;:860,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:134305,&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;:&quot;https://jerryng1.substack.com/i/193423509?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae7a206-e885-4536-aff1-6c00d2417121_860x456.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zgEi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae7a206-e885-4536-aff1-6c00d2417121_860x456.png 424w, https://substackcdn.com/image/fetch/$s_!zgEi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae7a206-e885-4536-aff1-6c00d2417121_860x456.png 848w, https://substackcdn.com/image/fetch/$s_!zgEi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae7a206-e885-4536-aff1-6c00d2417121_860x456.png 1272w, https://substackcdn.com/image/fetch/$s_!zgEi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcae7a206-e885-4536-aff1-6c00d2417121_860x456.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 style="text-align: center;"><em>We don&#8217;t have to discuss the sub 90% uptime</em></p><p>The existing GitHub UI for PRs has largely been unchanged for well over a decade. It works, it&#8217;s familiar to people, it&#8217;s inoffensive. But it&#8217;s just not enough anymore. </p><p>Picture a typical week on a fast-moving software startup team&#8212;the sort people would call &#8220;scrappy.&#8221; You&#8217;re clocking in Monday morning and building out a feature corresponding to a ticket, test it, and set up the PR by lunch. You ping your manager to review it and they say they&#8217;ll review it ASAP. Cool. Time to start the next ticket which involves building a new feature on top of what you built this morning. You knock it out before you clock out for the day and you ping your manager again. They&#8217;ll review it ASAP. Fast forward to tomorrow and by end of day you&#8217;ve knocked out another two features, each feature extending from the previous. </p><p>It&#8217;s now the middle of the week and your manager can finally look at your PRs. They find an issue with a function you wrote in the first PR. They message you on slack saying they want the inputs and outputs changed slightly. But PRs 2-4 that you wrote all rely on this function. </p><p>Another message comes in and they say &#8220;oh also there&#8217;s merge conflicts.&#8221; Someone else got their PR in before you. Maybe they changed some of the same files? Worse they changed the same functions. And now you have to resolve conflicts for your entire PR stack. You&#8217;ve gone from finishing 4 tickets before Wednesday to getting nearly nothing done. </p><p>It&#8217;s a table flipping moment. Why couldn&#8217;t your manager just review faster?</p><p>Turns out the manager has been neck deep in PRs from the rest of your team and they&#8217;re just barely staying afloat. One of your teammates is a new engineer fresh from college. They don&#8217;t even separate different features to different PRs yet.  They&#8217;re all combined in one. It&#8217;s a 4000 line diff. Time your manager spends reviewing code now directly correlates with dissatisfaction with their job and a desire to leave the role. </p><p>No one wins in this situation. I&#8217;m also not making a novel observation.  </p><p><a href="https://graphite.com/">Graphite</a> is attempting to solve these issues, but they are no longer opensource. <a href="https://github.com/ezyang/ghstack">GH Stack</a> is open source  but it breaks the usage of the Github UI so utilizing the tool requires a commitment of the whole team. </p><p>To fill the void and solve my annoyances, I made something called <a href="https://github.com/jerrying123/nugit">nugit</a> that builds on top of Github with the goal of integrating seamlessly with existing workflows, so I can benefit from using it on projects I care about. Its open source so anyone can fork it (I won&#8217;t be accepting external PRs). Follow its development and my shilling of it here.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://articles.jerryng.dev/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 and support my work.</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[Github and Super Smash Bros. Melee (2001) ]]></title><description><![CDATA[Successful Carelessness]]></description><link>https://articles.jerryng.dev/p/github-and-super-smash-bros-melee</link><guid isPermaLink="false">https://articles.jerryng.dev/p/github-and-super-smash-bros-melee</guid><dc:creator><![CDATA[Jerry Ng]]></dc:creator><pubDate>Mon, 02 Mar 2026 04:13:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3ONX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F577b1100-a5d8-4b57-9d02-d958c9b6173c_1125x417.bin" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3ONX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F577b1100-a5d8-4b57-9d02-d958c9b6173c_1125x417.bin" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3ONX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F577b1100-a5d8-4b57-9d02-d958c9b6173c_1125x417.bin 424w, https://substackcdn.com/image/fetch/$s_!3ONX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F577b1100-a5d8-4b57-9d02-d958c9b6173c_1125x417.bin 848w, https://substackcdn.com/image/fetch/$s_!3ONX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F577b1100-a5d8-4b57-9d02-d958c9b6173c_1125x417.bin 1272w, https://substackcdn.com/image/fetch/$s_!3ONX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F577b1100-a5d8-4b57-9d02-d958c9b6173c_1125x417.bin 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3ONX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F577b1100-a5d8-4b57-9d02-d958c9b6173c_1125x417.bin" width="1125" height="417" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/577b1100-a5d8-4b57-9d02-d958c9b6173c_1125x417.bin&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:417,&quot;width&quot;:1125,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;GitHub logo PNG transparent image download, size: 1125x417px&quot;,&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="GitHub logo PNG transparent image download, size: 1125x417px" title="GitHub logo PNG transparent image download, size: 1125x417px" srcset="https://substackcdn.com/image/fetch/$s_!3ONX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F577b1100-a5d8-4b57-9d02-d958c9b6173c_1125x417.bin 424w, https://substackcdn.com/image/fetch/$s_!3ONX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F577b1100-a5d8-4b57-9d02-d958c9b6173c_1125x417.bin 848w, https://substackcdn.com/image/fetch/$s_!3ONX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F577b1100-a5d8-4b57-9d02-d958c9b6173c_1125x417.bin 1272w, https://substackcdn.com/image/fetch/$s_!3ONX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F577b1100-a5d8-4b57-9d02-d958c9b6173c_1125x417.bin 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 was vibe-coding a CI/CD implementation and ran into an issue. My GitHub Runner had run out of memory while installing some packages. So naturally, I copied the logs into the chat window and immediately the build file has some new lines written that look suspiciously like malware. <a href="https://github.com/jlumbroso/free-disk-space">&#8220;free-disk-space&#8221;</a> is the name of the action. Its like something out of the early 2010s. But it isn&#8217;t malware. In fact, its used in by over 16 thousand people in their repositories to solve the same issue I had with wanting to customize a GitHub Runner. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://articles.jerryng.dev/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 and support my work.</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>The typical Ubuntu GitHub Actions runner has up to 31 GB of disk space that is used by unnecessary packages that are not needed for many builds. This action clears up that space within 3 minutes and allows you to install the more storage intensive packages that are needed for your custom builds. Again. 16 thousand developers.</p><p>GitHub Actions is has a fairly terrible reputation. It has actually served as the reason for some notable projects, like <a href="https://ziglang.org/news/migrating-from-github-to-codeberg/">Zig</a>, to migrate to alternative platforms. The system has an unreasonable number of bugs for a product that is used by millions of developers. </p><p>As Zig mentions, the GitHub CEO said <a href="https://www.businessinsider.com/github-ceo-developers-embrace-ai-or-get-out-2025-8">&#8220;Either you have to embrace the AI, or you get out of your career.&#8221;</a> Not exactly kind or supportive words for the developers that are using your platform and are asking for quality of life improvements. It&#8217;s reasonable to assume that GitHub just doesn&#8217;t care about solving pain points of users. </p><p>That lack of care is what brings me to Super Smash Bros. Melee.</p><h2>Here Comes a New Challenger</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ASDM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e99e135-f205-454c-90a9-3bf5f3f5a0ff_2000x2000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ASDM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e99e135-f205-454c-90a9-3bf5f3f5a0ff_2000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ASDM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e99e135-f205-454c-90a9-3bf5f3f5a0ff_2000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ASDM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e99e135-f205-454c-90a9-3bf5f3f5a0ff_2000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ASDM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e99e135-f205-454c-90a9-3bf5f3f5a0ff_2000x2000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ASDM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e99e135-f205-454c-90a9-3bf5f3f5a0ff_2000x2000.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e99e135-f205-454c-90a9-3bf5f3f5a0ff_2000x2000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Super Smash Bros. Melee - IGN&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="Super Smash Bros. Melee - IGN" title="Super Smash Bros. Melee - IGN" srcset="https://substackcdn.com/image/fetch/$s_!ASDM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e99e135-f205-454c-90a9-3bf5f3f5a0ff_2000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ASDM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e99e135-f205-454c-90a9-3bf5f3f5a0ff_2000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ASDM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e99e135-f205-454c-90a9-3bf5f3f5a0ff_2000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ASDM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e99e135-f205-454c-90a9-3bf5f3f5a0ff_2000x2000.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><p>Super Smash Bros. Melee was released in 2001. When it came out, it was a popular party game, targeted towards families and children in particular. However, over time, it became a binding force for competition, driven by a grass-roots community of players. </p><p>It drew a large and growing viewer-base throughout the 2010s, peaking sometime in the 2010s with over <a href="https://twitchtracker.com/games/16282">190 thousand viewers on Twitch</a>. Players were sponsored and their livelihoods were supported in part by the community because of how good they were at the game.</p><p>But, just like GitHub Actions, Super Smash Bros Melee was unsupported by the developers. In fact, Nintendo actively tried to shut down tournaments and competitions, attempting to kill the large events that served as the pinnacle of competition. This didn&#8217;t happen just <a href="https://www.polygon.com/2013/7/11/4513294/nintendo-were-trying-to-shut-down-evo-not-just-super-smash-bros-melee/">once</a>, but <a href="https://web.archive.org/web/20240808143154/https://www.twitlonger.com/show/n_1srfu4r">multiple times</a>.</p><p>Despite this, the community persisted. In fact, they modding the game heavily, adding features like <a href="https://www.patreon.com/UnclePunch">in depth training modes</a> and <a href="https://github.com/FasterMelee">netcode</a> (yes, I do see the irony in linking to a GitHub repo). These mods became staples of the community.</p><h3>Incentive Alignment</h3><p>There is a consistent theme across both of these communities. There&#8217;s the obvious: successful developers create things that are valuable to others. There&#8217;s even a lesson: even the champions of a product have thresholds for pain tolerance.</p><p>But there&#8217;s something particular about both of these stories that are notable today. It is common in startup culture to state that if you are solving a real problem, your chances of success drastically improve. The issue is that the converse does not hold true after a certain size. Dedicated communities can form around things, developing their own solutions as they&#8217;ve been left by the wayside.</p><p>On the surface, that seems like a good thing. But, when a hacked up solution becomes well known and commonly used, the moral of the story seems to become murky. These communities have entrenched these products deeper into their lives and signaled to the companies that they are not going to leave. In turn, the incentive for these companies to improve their products vanishes. </p><p>In some ways, it becomes an indicator that the story of &#8220;AI is going to replace software engineers&#8221; is a farce. GitHub has fully embraced the AI hype machine and somehow they are unable to solve pain points for their users. In a more cynical lens, it indicates that even with tool-assisted, supercharged engineers, GitHub doesn&#8217;t plan on improving parts of their product that are deeply meaningful to their users; they may be focused on margins and new flashy developments. The brand and positioning of GitHub feels questionable with that in mind. It doesn&#8217;t feel like the bastion for developers and budding engineers to show off their stuff and seek community that it once was. </p><p>In the case of Nintendo, the charitable interpretation almost leads to admiration. They are a company focused on providing children with formative life experiences in settings where they will <strong>always have fun</strong>. They refuse to support a competitive community that seeks glory and victory through hardship and anguish; because when winning matters, <strong>losing</strong> <strong>isn&#8217;t fun</strong>. Does that excuse them shutting down the joys of a community that aren&#8217;t harming people? Probably not, but at the end of the day it is a single game of the plethora of games in Nintendo&#8217;s catalog. </p><p>Now, what I can say also isn&#8217;t fun is thinking that my vibe-coded CI/CD has installed malware because a tool has a suspicious name, or relying on GitHub repos to be able to play a 25 year old game online. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://articles.jerryng.dev/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 and support my work.</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></channel></rss>