<?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[Son’s Substack]]></title><description><![CDATA[My personal Substack]]></description><link>https://sluongng.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!Z23D!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7dcdb8d-cc37-4339-ae88-ba82c9a146c0_608x608.png</url><title>Son’s Substack</title><link>https://sluongng.substack.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 06 May 2026 12:47:54 GMT</lastBuildDate><atom:link href="https://sluongng.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Son Luong Ngoc]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[sluongng@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[sluongng@substack.com]]></itunes:email><itunes:name><![CDATA[Son Luong Ngoc]]></itunes:name></itunes:owner><itunes:author><![CDATA[Son Luong Ngoc]]></itunes:author><googleplay:owner><![CDATA[sluongng@substack.com]]></googleplay:owner><googleplay:email><![CDATA[sluongng@substack.com]]></googleplay:email><googleplay:author><![CDATA[Son Luong Ngoc]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[QK Alice Duo]]></title><description><![CDATA[I bought a split keyboard in Vietnam and come with it are some thoughts and ideas]]></description><link>https://sluongng.substack.com/p/qk-alice-duo</link><guid isPermaLink="false">https://sluongng.substack.com/p/qk-alice-duo</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Sun, 03 May 2026 21:55:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Qfj2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my last blog post, I discussed Vietnam's unique position in the world's geopolitical theater. One point I forgot to mention is the absolute advantage of being a neighbor to China and benefiting from its manufacturing powerhouse.</p><p>I was at the center of Lazada&#8217;s peak in 2017. I worked on team 911, which oversees escalations from business offices in 7 south east asian countries, as well as the one cross-border business we had in Hong Kong. I was also part of the migration to bring the Lazada platform onto Alibaba tech in early 2018 and worked inside Alibaba&#8217;s Global Operation Center (GOC), under Ali core infrastructure. This was before the crackdown on Jack Ma. Back then, Alibaba was the center of Chinese e-commerce. and GOC oversees all aspects of business within Alibaba. It&#8217;s the C-level single point of entry into all things worth paying attention to: critical government office onboarding to Aliyun (Alibaba Cloud), the sales of Taobao and Tmall on 11-11, the growth of Alimama, or the acquisition of Hema Fresh, ele.me. We are also quite close to the integration post-acquisition of Alibaba&#8217;s strategic international assets: PayTM in India, Trendydol in Turkey, Daraz in Pakistan, and Nepal. If you look at it from Google Maps (or Alibaba&#8217;s Amap), you can almost pin them exactly to how the Belt and Road initiative was being pushed forward around that time.</p><p>Long story short, I think I am uniquely qualified to tell you how advanced China was in 2018, and they haven&#8217;t stopped getting better for the last 8 years. Their cars are now in the EU, selling with a huge margin. Their solar and battery tech is second to none. And let&#8217;s not forget to mention how most electronics, smartphones, are still coming out of Shenzhen today despite waves and waves of trade war.</p><p>Knowing all these, one of the things I tried to explore during my 46-day trip in Vietnam was what it would be like to start a business in Vietnam, knowing these advantages. Little did I know that many Vietnamese did exactly that for the last decade.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><h1>Past Attempts</h1><p>While exploring different ways of taking advantage of the relatively open trade between Vietnam and China, I stumbled upon 2 product branches that are absolutely unique in terms of quality, quantity, and price. One was office equipment: ergonomic chairs, tables, mechanical keyboards, mice, you name it. Second was audio equipment: headphones, speakers, DAC, microphones, etc&#8230;</p><p>Having a two-year-old simply means that the time I can spend on an over-ear pair of headphones would be absolutely minimal. So I decided to try buying a mechanical keyboard as a way to get a feel of the products.</p><p>My journey started with several threads on ChatGPT filtering for options. A couple of years back, I tried to buy the split keyboard. My requirements are:</p><ul><li><p>Wireless. This is important front and center. My current keyboard is an Anne Pro 2 using Low-powered Bluetooth. Not having the wire helps so much with my desk setup. My posture improved as well since I can move the 60% keyboard to all different places. </p></li><li><p>Swapable. I do prefer to experiment with different types of switches and keycaps, so hotswap is a big deal for me. And that brings me to the next requirement, which is also quite hard:</p></li><li><p>Fully assembled. With a toddler on my hand and AI Coding agents on my neck, I don&#8217;t have the time to solder and socket the raw board. Whatever I am getting needs to be fully assembled out of the box.</p></li></ul><p>In the Western world, I tried to solve these constraints several times:</p><ul><li><p>Kinesis Advantage360 Pro. I actually tried to place an order on this a few years back, and they were completely out of stock back then. I had an option to buy it through some trusted contact in US and pick it up there in person when I visit, but (a) the price was bonkers ($500 before shipping and tax) and (b) some reviews came back stating the Bluetooth connection can run into issues from time to time. So I never pulled the trigger.</p></li><li><p>Aurora Lily58. This was when I found out that the folks at splitkb.com are actually based in the Netherlands, where I live. It was an absolute joy for me to learn that I can put battery and Bluetooth modules on the 2 halves of the Lily. I spent my hackathon prize on half of the kit, and bought the rest out of my own pocket. I got my soldering kit from Amazon.nl. But then reality hits hard: I would rather spend time with my 1-year-old daughter at the time, helping her crawl and walk, rather than in a room by myself soldering the board. I tried hitting up some splitkb community members in NL for a soldering/assembly service, but nobody responded. The boards, plates, and cases are still sitting in a box behind me today, unopened.</p></li></ul><h1>The Shop</h1><p>After uploading my keeb brain into ChatGPT, it was very helpful in pointing me toward a keyboard shop located in Ho Chi Minh city with the QK Alice Duo available. The shop is about 30-40 minutes scooter ride from where I live, so not too bad.</p><p>But before I went to the shop, I was able to hit them up on Facebook Messenger and ask questions about stock availability. They were able to give me a price and time estimation for a fully assembled board, all without having to leave my bedroom.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Qfj2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qfj2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.png 424w, https://substackcdn.com/image/fetch/$s_!Qfj2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.png 848w, https://substackcdn.com/image/fetch/$s_!Qfj2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.png 1272w, https://substackcdn.com/image/fetch/$s_!Qfj2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qfj2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.png" width="865" height="1230" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1230,&quot;width&quot;:865,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:256923,&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://sluongng.substack.com/i/196344639?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.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_!Qfj2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.png 424w, https://substackcdn.com/image/fetch/$s_!Qfj2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.png 848w, https://substackcdn.com/image/fetch/$s_!Qfj2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.png 1272w, https://substackcdn.com/image/fetch/$s_!Qfj2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ea6f7d8-6ba3-4ea6-b0f1-18ecbd9b44ae_865x1230.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>So the stock kit is 9.2mil VND, which is 300 EUR / 350 USD. Assembly, mod stabilizers, switches, and keycaps will push the damage to around 11mil VND, 355EUR / 420 USD.</p><p>Let&#8217;s recap: a kinesis is a plastic-built, not hot-swappable, and comes at the risk of Bluetooth unsynchronized, and is priced at 500 USD. Alice Duo had a full metal frame (3KG) and came with its own high-polling rate wireless buck. You get to pick the keycap and switches you want, the color you need, and the cost is still almost 20% cheaper. Absolutely crazy.</p><p>I decided to drive to the shop in person. Later, my wife reminded me that it&#8217;s relatively rare nowadays to do so. Most of these shops do shipping with high reliability. Some would even book a Grab driver to ship the goods to you within minutes, so you never have to leave the house yourself. But knowing mech keebs, I want to experience things in person, and I went anyway.</p><p>Turns out it was a good decision. The shop has several choices of switches, and they insisted on knowing the switch heights beforehand to assemble to stablelizers. While I could not find a set of keycaps to my liking, I was able to settle on the &#8220;WS BigLucky Switch-Tactile&#8221; switches.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hCXo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047b31a1-7a1a-4725-bf73-423241511986_600x338.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hCXo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047b31a1-7a1a-4725-bf73-423241511986_600x338.png 424w, https://substackcdn.com/image/fetch/$s_!hCXo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047b31a1-7a1a-4725-bf73-423241511986_600x338.png 848w, https://substackcdn.com/image/fetch/$s_!hCXo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047b31a1-7a1a-4725-bf73-423241511986_600x338.png 1272w, https://substackcdn.com/image/fetch/$s_!hCXo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047b31a1-7a1a-4725-bf73-423241511986_600x338.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hCXo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047b31a1-7a1a-4725-bf73-423241511986_600x338.png" width="600" height="338" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/047b31a1-7a1a-4725-bf73-423241511986_600x338.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:338,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;WS BigLucky Switch-Tactile(35Pcs)&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="WS BigLucky Switch-Tactile(35Pcs)" title="WS BigLucky Switch-Tactile(35Pcs)" srcset="https://substackcdn.com/image/fetch/$s_!hCXo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047b31a1-7a1a-4725-bf73-423241511986_600x338.png 424w, https://substackcdn.com/image/fetch/$s_!hCXo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047b31a1-7a1a-4725-bf73-423241511986_600x338.png 848w, https://substackcdn.com/image/fetch/$s_!hCXo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047b31a1-7a1a-4725-bf73-423241511986_600x338.png 1272w, https://substackcdn.com/image/fetch/$s_!hCXo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047b31a1-7a1a-4725-bf73-423241511986_600x338.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>I do prefer tactile over linear, as I don&#8217;t game much nowadays. But what won me over was how solid the round cylinder is. Unlike typical cherry switches, where the stem can wobble around the housing of the switch, this cylinder design evenly distributes the down force to all the edges of the outer box; thus, no wobbly feeling. And you may have guessed it, WS is https://shop.wuquestudio.com/, a Chinese brand. The tactile of these switches is definitely a bit lacking vs the traditional MX/Gat brown though. I think I may switch these out for a set of Kailh Pro Purple in the future to get a bit more bump. I also checked out several of their keycap sets, but I feel a bit disappointed with the print quality.</p><p>With that set, they gave me the final bill, and I put half the money down to get things started.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zwy1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc466845-cac0-448a-a2c4-3d39285af82d_541x809.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zwy1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc466845-cac0-448a-a2c4-3d39285af82d_541x809.png 424w, https://substackcdn.com/image/fetch/$s_!zwy1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc466845-cac0-448a-a2c4-3d39285af82d_541x809.png 848w, https://substackcdn.com/image/fetch/$s_!zwy1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc466845-cac0-448a-a2c4-3d39285af82d_541x809.png 1272w, https://substackcdn.com/image/fetch/$s_!zwy1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc466845-cac0-448a-a2c4-3d39285af82d_541x809.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zwy1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc466845-cac0-448a-a2c4-3d39285af82d_541x809.png" width="541" height="809" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc466845-cac0-448a-a2c4-3d39285af82d_541x809.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:809,&quot;width&quot;:541,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:465429,&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://sluongng.substack.com/i/196344639?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc466845-cac0-448a-a2c4-3d39285af82d_541x809.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_!zwy1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc466845-cac0-448a-a2c4-3d39285af82d_541x809.png 424w, https://substackcdn.com/image/fetch/$s_!zwy1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc466845-cac0-448a-a2c4-3d39285af82d_541x809.png 848w, https://substackcdn.com/image/fetch/$s_!zwy1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc466845-cac0-448a-a2c4-3d39285af82d_541x809.png 1272w, https://substackcdn.com/image/fetch/$s_!zwy1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc466845-cac0-448a-a2c4-3d39285af82d_541x809.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>So that&#8217;s 335 EUR / 393 USD for the A-Z product and service.</p><h1>The keeb</h1><p>A few days later, I got a call from the shop that the keyboard was ready to pick up, and I made my way there. And to my horror, it&#8217;s not just the split keyboard but a giant box with a ton of goodies inside.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8VVF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8f5b3b-ac73-405d-8df3-6a25bb4db79b_1904x1431.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8VVF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8f5b3b-ac73-405d-8df3-6a25bb4db79b_1904x1431.png 424w, https://substackcdn.com/image/fetch/$s_!8VVF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8f5b3b-ac73-405d-8df3-6a25bb4db79b_1904x1431.png 848w, https://substackcdn.com/image/fetch/$s_!8VVF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8f5b3b-ac73-405d-8df3-6a25bb4db79b_1904x1431.png 1272w, https://substackcdn.com/image/fetch/$s_!8VVF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8f5b3b-ac73-405d-8df3-6a25bb4db79b_1904x1431.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8VVF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8f5b3b-ac73-405d-8df3-6a25bb4db79b_1904x1431.png" width="1456" height="1094" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff8f5b3b-ac73-405d-8df3-6a25bb4db79b_1904x1431.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1094,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3026348,&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://sluongng.substack.com/i/196344639?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8f5b3b-ac73-405d-8df3-6a25bb4db79b_1904x1431.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_!8VVF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8f5b3b-ac73-405d-8df3-6a25bb4db79b_1904x1431.png 424w, https://substackcdn.com/image/fetch/$s_!8VVF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8f5b3b-ac73-405d-8df3-6a25bb4db79b_1904x1431.png 848w, https://substackcdn.com/image/fetch/$s_!8VVF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8f5b3b-ac73-405d-8df3-6a25bb4db79b_1904x1431.png 1272w, https://substackcdn.com/image/fetch/$s_!8VVF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8f5b3b-ac73-405d-8df3-6a25bb4db79b_1904x1431.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xuuH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a65ce7-9634-4d2c-ba5d-e5e642bf643d_1904x1322.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xuuH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a65ce7-9634-4d2c-ba5d-e5e642bf643d_1904x1322.png 424w, https://substackcdn.com/image/fetch/$s_!xuuH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a65ce7-9634-4d2c-ba5d-e5e642bf643d_1904x1322.png 848w, https://substackcdn.com/image/fetch/$s_!xuuH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a65ce7-9634-4d2c-ba5d-e5e642bf643d_1904x1322.png 1272w, https://substackcdn.com/image/fetch/$s_!xuuH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a65ce7-9634-4d2c-ba5d-e5e642bf643d_1904x1322.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xuuH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a65ce7-9634-4d2c-ba5d-e5e642bf643d_1904x1322.png" width="1456" height="1011" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49a65ce7-9634-4d2c-ba5d-e5e642bf643d_1904x1322.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1011,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2955073,&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://sluongng.substack.com/i/196344639?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a65ce7-9634-4d2c-ba5d-e5e642bf643d_1904x1322.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_!xuuH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a65ce7-9634-4d2c-ba5d-e5e642bf643d_1904x1322.png 424w, https://substackcdn.com/image/fetch/$s_!xuuH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a65ce7-9634-4d2c-ba5d-e5e642bf643d_1904x1322.png 848w, https://substackcdn.com/image/fetch/$s_!xuuH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a65ce7-9634-4d2c-ba5d-e5e642bf643d_1904x1322.png 1272w, https://substackcdn.com/image/fetch/$s_!xuuH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a65ce7-9634-4d2c-ba5d-e5e642bf643d_1904x1322.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>Ditching the giant cardboard box is a long orange QK case. It&#8217;s taller than my backpack, which has my MacBook Pro inside. The case contains the 2 assembled halves of the keyboard, the wireless buck, as well as a pair of metal-frosted acrylic height-adjustable palm rests, and some misc goodies like key pullers, screw driver, stab-mods leftovers.</p><p>I prepared a cheap, 250kVND (9.5 USD / 8EUR), PBT blank grey keycap set. The nice thing about this set is that it has all the special space keys needed for a split setup. This acts as a temp space holder until my endgame is shipped. </p><p>Here is the final product on my desk back in NL.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Vp7i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e9c890-66f1-49dc-8034-27917cc52019_1906x1432.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vp7i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e9c890-66f1-49dc-8034-27917cc52019_1906x1432.png 424w, https://substackcdn.com/image/fetch/$s_!Vp7i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e9c890-66f1-49dc-8034-27917cc52019_1906x1432.png 848w, https://substackcdn.com/image/fetch/$s_!Vp7i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e9c890-66f1-49dc-8034-27917cc52019_1906x1432.png 1272w, https://substackcdn.com/image/fetch/$s_!Vp7i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e9c890-66f1-49dc-8034-27917cc52019_1906x1432.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vp7i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e9c890-66f1-49dc-8034-27917cc52019_1906x1432.png" width="1456" height="1094" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8e9c890-66f1-49dc-8034-27917cc52019_1906x1432.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1094,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2610385,&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://sluongng.substack.com/i/196344639?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e9c890-66f1-49dc-8034-27917cc52019_1906x1432.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_!Vp7i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e9c890-66f1-49dc-8034-27917cc52019_1906x1432.png 424w, https://substackcdn.com/image/fetch/$s_!Vp7i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e9c890-66f1-49dc-8034-27917cc52019_1906x1432.png 848w, https://substackcdn.com/image/fetch/$s_!Vp7i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e9c890-66f1-49dc-8034-27917cc52019_1906x1432.png 1272w, https://substackcdn.com/image/fetch/$s_!Vp7i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e9c890-66f1-49dc-8034-27917cc52019_1906x1432.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 keyboard takes a day to get used to. Blank keycaps definitely made discovering the keys a bit more challenging, but once I got the <a href="https://qwertykeys.notion.site/QK-Alice-Duo-1963d0900942808d9b39f2a603ebdb7d">official QK Notion documentation</a> opened, things got going pretty quickly.</p><h1>Vibes</h1><p><strong>Built quality</strong>: 10/10. </p><p>This is not my first metal case keyboard, but hand carried these through 2 flights back to the EU because the battery inside definitely put some pain on my and my wife&#8217;s shoulders. W wife!</p><p><strong>Key layout</strong>: 7.5/10. </p><p>The curve is easy to get used to for my hand size. But the stepped caplocks are a bit annoying, especially when you consider the stem position is determined by the switch position, which is not adjustable. I dislike the extra column on the left of the L half. I often reach for them accidentally while trying to locate CTRL / Shift / Caps.</p><p><strong>Tenting</strong>: 9/10. </p><p>The strong metal frame made the angle feel solid like a brick. The palm rests can also be configured to switch between flat and tented positions, very clever.</p><p><strong>Connectivity</strong>: 9.5/10. </p><p>This is not running on Bluetooth. The 2 halves connect to the buck using a custom wireless, and the buck connects to the PC using USB. As a result, they are relatively more reliable to operate with the Framework Desktop sketchy Bluetooth stack on Linux. The Buck design is also clever: a volume knob with some LEDs exposed from the naked board is a cheap but cool-looking solution.</p><p><strong>Damage</strong>: I feel incredibly good spending 400 bucks on this as opposed to 500 bucks on the Kinesis. I used the saved money on a new keycap group buy: <em>GMK Cherry Love</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DmTt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facec9b11-836f-4e00-bde0-b4ddafd778a1_1440x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DmTt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facec9b11-836f-4e00-bde0-b4ddafd778a1_1440x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DmTt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facec9b11-836f-4e00-bde0-b4ddafd778a1_1440x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DmTt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facec9b11-836f-4e00-bde0-b4ddafd778a1_1440x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DmTt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facec9b11-836f-4e00-bde0-b4ddafd778a1_1440x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DmTt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facec9b11-836f-4e00-bde0-b4ddafd778a1_1440x1080.jpeg" width="1440" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/acec9b11-836f-4e00-bde0-b4ddafd778a1_1440x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:1440,&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_!DmTt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facec9b11-836f-4e00-bde0-b4ddafd778a1_1440x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DmTt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facec9b11-836f-4e00-bde0-b4ddafd778a1_1440x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DmTt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facec9b11-836f-4e00-bde0-b4ddafd778a1_1440x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DmTt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facec9b11-836f-4e00-bde0-b4ddafd778a1_1440x1080.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CDi4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e2a5fe-cbc8-4f10-a92f-2806c8522d8e_1440x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CDi4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e2a5fe-cbc8-4f10-a92f-2806c8522d8e_1440x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CDi4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e2a5fe-cbc8-4f10-a92f-2806c8522d8e_1440x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CDi4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e2a5fe-cbc8-4f10-a92f-2806c8522d8e_1440x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CDi4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e2a5fe-cbc8-4f10-a92f-2806c8522d8e_1440x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CDi4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e2a5fe-cbc8-4f10-a92f-2806c8522d8e_1440x1080.jpeg" width="1440" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f9e2a5fe-cbc8-4f10-a92f-2806c8522d8e_1440x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Render&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="Render" title="Render" srcset="https://substackcdn.com/image/fetch/$s_!CDi4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e2a5fe-cbc8-4f10-a92f-2806c8522d8e_1440x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CDi4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e2a5fe-cbc8-4f10-a92f-2806c8522d8e_1440x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CDi4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e2a5fe-cbc8-4f10-a92f-2806c8522d8e_1440x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CDi4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e2a5fe-cbc8-4f10-a92f-2806c8522d8e_1440x1080.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>This is expected to ship in Q2 this year, and I cannot wait to put it on my QK Alice Duo.</p><blockquote><p>Is this endgame yet?</p></blockquote><p>Close.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><h1>Not about keyboards</h1><p>I should also mention that during the trip, we found that Lazada is now shipping Taobao and Tmall goods directly from China to Vietnam. Game changer! We got our in-laws a coffee grinder from China. The in-laws live in Vinh, Nghe An, not one of the major cities, but they still get it shipped to them within a week. There was a bit of damage to one of the add-ons due to shipping, but that&#8217;s irrelevant to their use cases. And according to my wife, the price was amazing for the quality. Similar to Alibaba-Lazada, Tiktok, and Shopee, e-commerce platforms all have their own cross-border strategies to compete in the South East Asia market, an absolute win for the local consumers.</p><p>All of these were very different back in 2018. The Vietnamese government back then shielded the domestic markets from Chinese goods. While working in Lazada, I vividly recalled that Tmall/Taobao were able to penetrate Thailand and Malaysia but not Vietnam due to the strict import policy at the time. I recall we struggled a lot to ask our Chinese counterparts to help us shop for the latest Xiaomi laptop during 11-11 sales back then. </p><p>All these guardrails are now gone. The trade between China and Vietnam got a lot easier, and it does not stop at just keyboards, headphones, and coffee. It&#8217;s also real estate, tech, battery, energy, rails, and EVs, some of the core foundations for the ambitious GDP target. </p><p>Did you know that Tesla is not the only battery manufacturer in town? Here in the EU, we are getting spammed with ads about buying solar and a house battery solution to weather the future energy crisis. I actually looked into a few options to start a residential/commercial energy backup solution business in Vietnam and was surprised by how many sourcing options there are compared to the West. I do think my thesis could be a strong hedge against the global rise in energy demand, but I am not based in Vietnam to execute it. Excuses, excuses.</p>]]></content:encoded></item><item><title><![CDATA[Vietnam 2026]]></title><description><![CDATA[I just came back to EU from a 46 days trip back to VN. Let's do a field report]]></description><link>https://sluongng.substack.com/p/vietnam-2026</link><guid isPermaLink="false">https://sluongng.substack.com/p/vietnam-2026</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Sat, 02 May 2026 13:51:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Uq4k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Vietnam, my hometown, my country.</p><p>It&#8217;s where my parents are still living. My in-laws as well. My extended family, including my grandmother, the last of her generation.</p><p>It&#8217;s where 3 of my 4 grandparents were buried. Just visiting the graves to pay my respect took 5 hours, and that&#8217;s already skipping the more distant ones.</p><p>Between my wife and me, we have cousins, aunties, and uncles: doctor, department head, architect, landlords, engineers, business owners, consultants, unemployed moms, widows, students &#8230; It was great to meet them all again, but this time, with our 2-year-old daughter. It was a joyful occasion, not without hardship from the weather and the environment, but we were all very happy.</p><p>But that&#8217;s not what I want to talk to you about today. What I want to write down is a bigger macro picture that I observed: a newly transformed Vietnam. Things are moving fast, and I don&#8217;t think most people are aware of it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><h1>Ambitious growth</h1><p>Forefront and center is the current targeted growth of the Vietnamese economy. Right now, Vietnam is targeting a 10% in GDP growth for 2026. To put that in perspective, China&#8217;s target is 5%, and India is 6.5%.</p><p>Ten percent is nothing but bonkers.</p><p>At home, I am seeing incredible growth: Roads and highways are being built at an incredible speed. The houses along &#8220;Quoc Lo 13&#8221; (Country&#8217;s Roads 13) where I lived are being relocated to expand the key commute drive way, and the price for this relocation effort is going up like no other. We are not talking just a few percentage points, but 2-3x, sometimes 5-10x the usual price for a house in that area is being paid out by the government to support these efforts. I suspect it&#8217;s the same elsewhere as well, because not only Ho Chi Minh city, but the entire country is going through a giant transformation.</p><p>In the news, you hear about new high-speed railroads being built. Some projects are supported by EU, but we do expect China and Japan to enter the picture soon (more on that later).</p><p>Over in Thu Thiem (old District 2), a new city center is under construction. Together with it are high-end luxury apartments being advertised to Chinese and Korean investors. New bridges are being built. New highways as well. Many drivers are reporting under 5 hours travel time to Da Lat, the Lake Tahoe of Vietnam. The new international airport in Long Thanh airport in Dong Nai is expected to open later this year and is about 50 km2 (19.3 miles2 for my US readers). Amsterdam&#8217;s Schiphol is 28km2 and Dallas/Fort Worth is about 70km2 for comparison.</p><h1>How</h1><p>Underlying this growth are tectonic geopolitical shifts in a global state, as well as a regime shift internally. While you will not be hearing my comment about Vietnam&#8217;s politics, I can give you some factual information about 2 recent events to demonstrate how things are going.</p><h3>DOGE-like Movement </h3><p>As the US went through a phase of DOGE where they tried to slim down the size of their government and cut spending, Vietnam also started doing the same thing around 2023-2025.</p><p>What this entailed was 2 restructuring movements of the government.</p><p>First, Vietnam reduced its formal local-government structure. Previously, the structure was roughly: commune/ward/township &#8594; district-level unit &#8594; province or centrally run city &#8594; central government. From 1 July 2025, Vietnam abolished the district level, so the formal structure became: commune/ward/special zone &#8594; province or centrally run city &#8594; central government.</p><p>Second, Vietnam merged many province-level administrative units, reducing the country from <strong>63 provinces/cities to 34 province-level units</strong> &#8212; <strong>28 provinces and 6 centrally run cities</strong>. As a result, many of the remaining provinces and cities now cover much larger administrative areas.</p><p>Follow these: 2 restructures led to massive waves of layoffs among government administrative workers. As districts become the new wards, the old ward workers are being let go. Replacing them were attempts to digitize the administrative works throughout many verticals: tax, social insurance, land zoning, IDs, you name it. Laws are being updated and supposedly simplified. Don&#8217;t get me wrong, not all of these were perfectly executed; you can definitely find a lot of criticism among those who were impacted. But the bottom line was that they, the new government, got things done. And this created a bottom line to harbor future growth.</p><h3>Navigating the oil crisis</h3><p>As the conflict in the Middle East intensified right at the beginning of my trip back to Vietnam, I couldn't help but get drawn into headlines when I first arrived: Vietnamese airlines are running out of jet fuel, flight tickets are doubling their price, and the cost can go up even further. To my surprise, the Vietnamese government got it done.</p><ul><li><p>9-16 Mar: Vietnam started showing domestic fuel stress. Gov decided to cut the tax on gasoline to temporarily lower the price pressure.</p></li><li><p>20 Mar: Vietnam PM at the time announced that he would be visiting Russia from 22-25</p></li><li><p>22-25 Mar: Official visit where they signed several energy deals, including a nuclear power plant totalling 2400MW and an LNG supply deal as a cherry on top.</p></li></ul><p>Now I would have stopped here for readers to take a moment to understand the impact of this. As US applied several tariffs on Chinese exports, various manufacturing has been moved to Vietnam and India as a secondary solution. This places Vietnam in a unique position: bordering on China, yet trade-dependent on US. And underlying all of these production is gasoline, LNG, and fertilizer (to power the human labor), all impacted by the events in Hormuz.</p><p>The event did not stop there, however, throughout my trip, these also happened:</p><ul><li><p>In the middle of this was the National Assembly election in Vietnam, with the result announced on 21 Mar. Mr. To Lam now holds both the Party General Secretary and the State President roles. US, EU, India, and China all congratulated him on a 97% result. A new PM was also elected as a result.</p></li><li><p>14-17 Apr: To Lam made a state visit to China, where he met with Xi Jinping. Two sides signed some cooperation agreements with potential investment from China into Vietnam&#8217;s future high-speed train system.</p></li><li><p>21-24 Apr: South Korean President Lee Jae Myung made a state visit to Vietnam. Samsung previously announced a 4B chip fab in Vietnam on the 10th of April. Lots of non-binding documents were signed, including energy, tech, and security, according to Reuters.</p></li><li><p>1-3 May: Japanese PM Sanae Takaichi visits Vietnam with a focus on energy, minerals, AI, semiconductors, and space. Additional support for crude supply for Vietnam&#8217;s refinery is being discussed as well.</p></li></ul><p>Many of these visits and events are well-reported by different news outlets. Pretty banquets, dresses, ceremonies, and university talks happened, so I won&#8217;t reiterate them here. What I want to emphasize is the overall macro picture: Vietnam is gearing up to be the new China: unprecedented growth thanks to strong domestic execution, talent pool, and international support. The geopolitical events in 2023-2025 were merely accelerating this trend.</p><p>Worth noting that while all other nations started hugging Vietnam, the US is putting Vietnam on a watch list with a warning on trade:</p><blockquote><p>USTR released its 2026 Special 301 Report on the effectiveness of U.S. trading partners&#8217; protection and enforcement of IP rights, identifying Vietnam as a Priority Foreign Country and placing 25 countries on the Priority Watch List or Watch List.</p></blockquote><p>This further distances the 2 sides, further pushing Vietnam toward other allied countries.</p><h1>Implications</h1><p>I think the geopolitical events have pushed Vietnam away from US, EU, and toward Russia, China, and India. From the Vietnamese perspective, it&#8217;s not just economic necessity but also national security: the livelihood of billions of people is at stake here, and among them are my parents, in-laws, and distant relatives. The Vietnamese government made a pragmatic and strategic choice to make all of this happen, and it&#8217;s enjoyable to watch.</p><p>In Vietnam, you can now find a lot of Russians, Chinese, Koreans, and Japanese living in the biggest cities, with dedicated services being spun up for these expat customers. I even found several hacker houses, startup accelerators, and VC funds taking root in HCM city and Da Nang. Going to any Highland Coffee store, the Viet Starbucks, and you would find a ton of nomadic hackers, remote office workers camping inside.</p><p>It&#8217;s a vibrant place to be if you are a builder. It&#8217;s a critical place to watch if you are an investor. Vietnam itself is entering the Emerging-Market Index through FTSE Russell in September 2026. It is also about to launch a regulated crypto exchange pilot in Q2 this year. </p><p>In a sense, Vietnam&#8217;s plan resembles that of the US in recent years: cutting down government layers, accelerating growth, crypto stuffs (which I don&#8217;t understand)&#8230; And the result is here to show. It&#8217;s not all perfect, and I could be looking at things through rose colored glasses, but I think the final numbers will speak for themselves.</p><h1>End notes</h1><p>These are a ton of information to process. Especially when you are on the ground, people would tell you about different zoning plans, different trends in local EV adoption, coupled with the push toward solar and clean energy. But the overall vibe I observed was super optimistic. The giant hotels in Da Nang are resuming construction again as tourism continues to rise in the post-COVID era. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Uq4k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Uq4k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Uq4k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Uq4k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Uq4k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Uq4k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:679352,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://sluongng.substack.com/i/196204292?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Uq4k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Uq4k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Uq4k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Uq4k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e46ebb-9108-4b76-ab08-40a0790b4029_1914x1436.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>Growth, disruption, growth. The country is young and vibrant, and I think you definitely should give it a visit when you have the chance.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zDYH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429c74be-901e-4fd5-be1b-fffe5d211574_1525x2033.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zDYH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429c74be-901e-4fd5-be1b-fffe5d211574_1525x2033.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zDYH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429c74be-901e-4fd5-be1b-fffe5d211574_1525x2033.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zDYH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429c74be-901e-4fd5-be1b-fffe5d211574_1525x2033.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zDYH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429c74be-901e-4fd5-be1b-fffe5d211574_1525x2033.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zDYH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429c74be-901e-4fd5-be1b-fffe5d211574_1525x2033.jpeg" width="1456" height="1941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/429c74be-901e-4fd5-be1b-fffe5d211574_1525x2033.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:458025,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://sluongng.substack.com/i/196204292?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429c74be-901e-4fd5-be1b-fffe5d211574_1525x2033.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zDYH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429c74be-901e-4fd5-be1b-fffe5d211574_1525x2033.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zDYH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429c74be-901e-4fd5-be1b-fffe5d211574_1525x2033.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zDYH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429c74be-901e-4fd5-be1b-fffe5d211574_1525x2033.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zDYH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429c74be-901e-4fd5-be1b-fffe5d211574_1525x2033.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>Oh, and check out the drinks and the food. I personally recommend this avocado shake with Vietnamese coffee blended inside. It&#8217;s a strong pick-me-up for all the hackers out there</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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[Humantic Optimism]]></title><description><![CDATA[It was one of the better week]]></description><link>https://sluongng.substack.com/p/humantic-optimism</link><guid isPermaLink="false">https://sluongng.substack.com/p/humantic-optimism</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Wed, 11 Mar 2026 14:11:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/Sgtun8y8Xes" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I really wanted to write another &#8220;Picking The Hard Ways&#8221; blog post for the last 3-4 weeks. But the topic is a bit difficult to write about: how AIs are replacing me. I have a rough idea of a few bullet points of what I want to convey, but as I tried to develop things further, I quickly realized that I am arguing to folks that I am completely replaceable. It&#8217;s a tough concept to digest: I am obsolete, I am no longer relevant, call me &#8216;unc&#8217;&#8230; And I know how to get over it, and the counterarguments to it, and that I <em>must</em> get over it. Still, writing that blog post is a dreadful experience, so I decided to put the draft on the slow burner for now.</p><p>But that was pretty much my February: trying to cope with the short-term future outlook that I need to evolve myself. It&#8217;s exhausting, tiring, and lots of stress. I still need to put food on the table, pay my mortgage, take my kid to school, all while trying to find a way to swim up the current to find a new stable place to rest. My head was burrowed in AI, LLM, MCP, Skills, automation, etc, and it&#8217;s suffocating.</p><p>But there were a few &#8220;interesting&#8221; experiences that I encountered last week. Human experiences. They dragged me out of the flooding, depressing thoughts, and made me rethink where the <em>new</em> value is in the age of agentic AI. So let me walk you through some of them.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><h1>Goodbye Stuart</h1><p>The week started with sad news. I got a message on Telegram from my old HR guy:</p><blockquote><p>Ex-lzd from SG tech team passed away.</p></blockquote><p>Attached to the message is a LinkedIn URL that notified us of the passing of Stuart Remphrey.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P46Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a54c35-9156-4e72-95ca-73c990959dd0_519x803.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P46Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a54c35-9156-4e72-95ca-73c990959dd0_519x803.png 424w, https://substackcdn.com/image/fetch/$s_!P46Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a54c35-9156-4e72-95ca-73c990959dd0_519x803.png 848w, https://substackcdn.com/image/fetch/$s_!P46Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a54c35-9156-4e72-95ca-73c990959dd0_519x803.png 1272w, https://substackcdn.com/image/fetch/$s_!P46Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a54c35-9156-4e72-95ca-73c990959dd0_519x803.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P46Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a54c35-9156-4e72-95ca-73c990959dd0_519x803.png" width="519" height="803" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0a54c35-9156-4e72-95ca-73c990959dd0_519x803.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:803,&quot;width&quot;:519,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99983,&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://sluongng.substack.com/i/190366121?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a54c35-9156-4e72-95ca-73c990959dd0_519x803.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_!P46Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a54c35-9156-4e72-95ca-73c990959dd0_519x803.png 424w, https://substackcdn.com/image/fetch/$s_!P46Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a54c35-9156-4e72-95ca-73c990959dd0_519x803.png 848w, https://substackcdn.com/image/fetch/$s_!P46Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a54c35-9156-4e72-95ca-73c990959dd0_519x803.png 1272w, https://substackcdn.com/image/fetch/$s_!P46Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a54c35-9156-4e72-95ca-73c990959dd0_519x803.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><figcaption class="image-caption"><a href="https://www.linkedin.com/feed/update/urn:li:activity:7434865802136391682/">Rest in peace, Stuart</a>.</figcaption></figure></div><p>Stuart sat 2 steps away from my desk in the cramped office at Lazada in the now-demolished Axa Tower in 2019. He was kind and quiet. He was knowledgeable and resourceful. </p><p>I still have with me a souvenir, an unfinished lightsaber handle, that was shipped to Stuart's desk accidentally, and he gave it to me. I still have it on a shelf behind my worktable. It always reminds me of him.</p><p>And fuck cancer. </p><p>May you rest in peace, Stuart.</p><h1>Strong Naranjo</h1><p>Last year, my friend, my ex-colleague at Booking.com, BazelCon speaker, Manuel Naranjo, found out that his firstborn son had a rare-but-terrible genetic disease.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vWwt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3067c96-2859-4ea5-a327-8040c56f8c79_643x560.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vWwt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3067c96-2859-4ea5-a327-8040c56f8c79_643x560.png 424w, https://substackcdn.com/image/fetch/$s_!vWwt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3067c96-2859-4ea5-a327-8040c56f8c79_643x560.png 848w, https://substackcdn.com/image/fetch/$s_!vWwt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3067c96-2859-4ea5-a327-8040c56f8c79_643x560.png 1272w, https://substackcdn.com/image/fetch/$s_!vWwt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3067c96-2859-4ea5-a327-8040c56f8c79_643x560.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vWwt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3067c96-2859-4ea5-a327-8040c56f8c79_643x560.png" width="643" height="560" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3067c96-2859-4ea5-a327-8040c56f8c79_643x560.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:560,&quot;width&quot;:643,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:312587,&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://sluongng.substack.com/i/190366121?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3067c96-2859-4ea5-a327-8040c56f8c79_643x560.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_!vWwt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3067c96-2859-4ea5-a327-8040c56f8c79_643x560.png 424w, https://substackcdn.com/image/fetch/$s_!vWwt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3067c96-2859-4ea5-a327-8040c56f8c79_643x560.png 848w, https://substackcdn.com/image/fetch/$s_!vWwt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3067c96-2859-4ea5-a327-8040c56f8c79_643x560.png 1272w, https://substackcdn.com/image/fetch/$s_!vWwt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3067c96-2859-4ea5-a327-8040c56f8c79_643x560.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"><a href="https://www.linkedin.com/pulse/my-first-fundraiser-manuel-naranjo-r8kee/">Manuel&#8217;s first fundraiser</a></figcaption></figure></div><p>Lucca Naranjo is still barely a few months old, yet he has been battling with <a href="https://champ1foundation.org/">CHAMP1</a> for his life. His parents also went through a lot while caring for their baby.</p><p>I chat with Manuel occasionally to catch up on life. His son is now getting better, no more hospital bed with endless tests and sleepless nights. He has started physiotherapy and is growing well.  Lucca turned 7 months old last Sunday.</p><p>My daughter turned 2 recently, and my heart skips a beat every time I imagine being in Manuel&#8217;s shoes. Manuel and his wife went through a lot. They are brave and strong.</p><p>March 20th is the <a href="https://www.champ1foundation.eu/">Champ1 awareness day</a>. I would encourage you all to give it a read and consider donating to the relevant foundations to support the scientific research.</p><h1>Human Values</h1><p>As I wandered through the streets of Amsterdam to find my way to the first Codex in-person meetup in town, I found a super interesting Odd Lots podcast episode.</p><div id="youtube2-Sgtun8y8Xes" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Sgtun8y8Xes&quot;,&quot;startTime&quot;:&quot;2755&quot;,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Sgtun8y8Xes?start=2755&amp;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>Lloyd Blankfein, the former CEO of Goldman Sachs, recalled a story where Michael Bloomberg was calling him directly to offer support for the Bloomberg Terminal.<br><br>He asked.</p><blockquote><p>Lloyd: Isn&#8217;t that a very ineffecient use of your time? Because here you are, calling me and I wasn&#8217;t a senior guy?<br>Michael: No, no. We learned a lot about the business&#8230;</p></blockquote><p>And then Lloyd reflected.</p><blockquote><p>I realized now, that was a very stupid comment.<br>Because here I am.<br>First of all, everybody on our floor knew that Mike would called and that he cared.<br>The guy, whose name was on the door, cared about whether we were using it or not.<br>And not only laterally across that dimension, everybody knew, but here I am, 35 years later, telling the story, and now you are hearing about it.</p><p>That was a very good use of three minutes of Michael Bloomberg.</p></blockquote><p>It was a good story that teaches you: care matters, human touch matters. These values and qualities are increasingly rarer in the agentic age. When things are automated away, things that cannot be automated will be priced higher.</p><p>Increasingly, I see folks ask some forms of these questions:</p><blockquote><p>Is this GitHub project AI slop?</p><p>Is this article AI generated?</p><p>Are there human with taste standing behind this brand? Or is it completely LLM generated?</p></blockquote><p>If the answer is AI, the trust automatically goes down. People no longer care about the outputs regardless of quality. Those who care would ask for the prompts instead of reading the generated slops.</p><p>A human-driven brand matters.</p><p>Human Values matter.</p><h1>Agentic Arm Race in SaaS</h1><p>With the thoughts above, I realized that the future of SaaS is not as doom and gloom as most people are picturing.</p><p>Despite the cost of developing software converging to zero, it will take a long time for us to get there. Tokens are still costing dollars, so are GPU, memory, SSD, and power. It will take a decade for us to solve the token scarcity, if not more.</p><p>Most folks are comparing companies that have adopted Agentic Development versus those that have not done so. But once all the players equalized by adopting the latest agents and models, then the new competition becomes taste: taste in product direction, taste in customer dedication, taste in picking tastes. These tastes dictate how you spend the tokens, the quality of the token outputs, and the &#8220;yield&#8221; of your token pipeline.</p><p>Software Engineering, as we know it, is a dying breed. It&#8217;s the typing machine mechanics of the modern age. But replacing that career path is a much leaner, much more action-driven line of Agentic Engineering. I think this is a huge opportunity for early-career, fresh-grad folks to make a breakthrough. </p><p>Smart companies should hire fresh graduates a lot more. Especially now that it&#8217;s relatively easy to hire. Couple them with a few experienced engineers who are open to agentic workflows, and you will have a great team.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><div><hr></div><p>I opened this blog post with grief, pain, and exhaustion.<br>I hope to end it with optimism, strength, and resiliency.</p><p>I think, despite all the advancements in the Agentic toolings, the future economy is still largely driven by humans, for humans. The agents, once equalized, will be treated  merely as a new class of tools, just like the cars in the industrial age, or the keyboards and mice during the internet boom.</p><p>My Software Engineering job is changing fast. But that&#8217;s what I signed up for, in trade for higher pay. I am learning fast, and so are my colleagues. And as long as the learning and self-improvement keep on going, then we should not be afraid of losing our jobs.</p><p>I will finish the new &#8220;Picking The Hard Ways&#8221; post so that I can get it off my mind. I have more exciting topics to write about, such as my personal playbook of how to replace GitHub.</p>]]></content:encoded></item><item><title><![CDATA[Thinking Exponential]]></title><description><![CDATA[or is it AI-induced psychosis?]]></description><link>https://sluongng.substack.com/p/thinking-exponential</link><guid isPermaLink="false">https://sluongng.substack.com/p/thinking-exponential</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Sun, 01 Mar 2026 09:33:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rO4V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As we observe people race toward the next hot thing in AI, we also start to see declarations that the last hot thing is now dead.</p><p>If one started building a coding agent/harness last year and their product is completely made obsolete by the new generation of models this year, then didn&#8217;t they waste 1 year and fail to find product-market-fit? Or to put it differently, is the market, the ecosystem (and to an extent, the economy), moving too fast for any product to fit?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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>It&#8217;s early 2026, and everyone is now trying to build the new Agentic GitHub, the new Heroku of Clankers (Clankoruuu, as I like to think of it. And yes, you do need many &#8216;u&#8217;-s in that name). What is stopping the next generation of models from just one-shotting all these attempts and rendering them ineffective?</p><p>This begs a question: what should I build now? What is durable despite AI Advancements? In fact, what would thrive as the models get better? This is exactly the answer Sam Altman gave in the recent OpenAI Town Hall:</p><div id="youtube2-Wpxv-8nG8ec" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Wpxv-8nG8ec&quot;,&quot;startTime&quot;:&quot;991&quot;,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Wpxv-8nG8ec?start=991&amp;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><blockquote><p>Will your company be happy or sad if GPT 6 is a wildly impressive update?</p></blockquote><p>It is now clear that we are in the middle of an AI arms race. A new Gold Rush.</p><p>And in the new Gold Rush, one would want to sell shovels. And shovels were sold! Sam cooked this well by unlocking all the bottlenecks available: chips, data center, energy,&#8230; He is exceptionally good at &#8220;thinking in exponential&#8221;.</p><p>With that thought, I wonder if I could build something so ahead of the curve that it would give me a sufficient moat for multiple waves of AI models to come. Something that will get better and better as the progress increases.</p><h1>A Future-proof Pitch</h1><p>What if we build &#8220;Prescience&#8221;?</p><p>One crazy way to think about the Coding Agents today is that they synthesize the code from the past to create a map of probable futures. And by giving it inputs and a bit of random seeds, we help the model pick which future to realize.</p><p>As we advance from text models to pictures, from pictures to movies, we are increasingly capable of producing &#8220;world models&#8221;. In fact, some early versions of world models already exist today in a very primitive form among self-driving car companies. They use this engine to help teach EVs how to drive, self-correct, and improve over time.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rO4V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rO4V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.png 424w, https://substackcdn.com/image/fetch/$s_!rO4V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.png 848w, https://substackcdn.com/image/fetch/$s_!rO4V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.png 1272w, https://substackcdn.com/image/fetch/$s_!rO4V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rO4V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.png" width="1456" height="1040" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1040,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:534604,&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://sluongng.substack.com/i/189370875?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.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_!rO4V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.png 424w, https://substackcdn.com/image/fetch/$s_!rO4V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.png 848w, https://substackcdn.com/image/fetch/$s_!rO4V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.png 1272w, https://substackcdn.com/image/fetch/$s_!rO4V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7720d15a-a0ba-415c-b316-271459263ee9_1550x1107.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">Tesla&#8217;s Self-Driving Emulator - BazelCon 2019</figcaption></figure></div><p>To build these world models, we need an exceptionally large amount of data. Data to emulate real world physic, chemistry, and biology. With sufficient data, we can properly emulate and provide a map of probabilities of transformation within a small sandbox. External factors that may influence the outcome inside that sandbox can be mapped and emulated the same way as coding agents building a context graph. The ultimate goal is not to perfectly predict the future, but to provide contextual underwritings and actuarial modelling for transformations inside a tightly confined space.</p><p>There are plenty of paths to commercialization for such a product. You can earn serious cash by just operating as an algorithmic quant firm on top of existing prediction markets today. Or you can be a personal assistant, telling your users the number of red lights they may encounter in today's commute. It can be an improved actuarial modelling process that powers all the banking, insurance, and healthcare companies. It can be an autonomous defense system, which most dystopian sci-fi stories, movies, and games have been describing for decades.</p><blockquote><p>In fact, &#8220;Prescience&#8221; is one of the main threats to humanity in Dune. After the rise of the &#8220;thinking machines&#8221; and their defeats in the Butlerian Jihad, it was &#8220;Prescience&#8221; which drove humanity into stagnation.</p></blockquote><h1>Good Reads</h1><h3>Logan from Google tweeted this about compute needs</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_dhl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751a7917-8efe-4afc-955c-6f9a3d0cc468_589x323.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_dhl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751a7917-8efe-4afc-955c-6f9a3d0cc468_589x323.png 424w, https://substackcdn.com/image/fetch/$s_!_dhl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751a7917-8efe-4afc-955c-6f9a3d0cc468_589x323.png 848w, https://substackcdn.com/image/fetch/$s_!_dhl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751a7917-8efe-4afc-955c-6f9a3d0cc468_589x323.png 1272w, https://substackcdn.com/image/fetch/$s_!_dhl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751a7917-8efe-4afc-955c-6f9a3d0cc468_589x323.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_dhl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751a7917-8efe-4afc-955c-6f9a3d0cc468_589x323.png" width="589" height="323" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/751a7917-8efe-4afc-955c-6f9a3d0cc468_589x323.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:323,&quot;width&quot;:589,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49759,&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://sluongng.substack.com/i/189370875?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751a7917-8efe-4afc-955c-6f9a3d0cc468_589x323.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_!_dhl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751a7917-8efe-4afc-955c-6f9a3d0cc468_589x323.png 424w, https://substackcdn.com/image/fetch/$s_!_dhl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751a7917-8efe-4afc-955c-6f9a3d0cc468_589x323.png 848w, https://substackcdn.com/image/fetch/$s_!_dhl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751a7917-8efe-4afc-955c-6f9a3d0cc468_589x323.png 1272w, https://substackcdn.com/image/fetch/$s_!_dhl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751a7917-8efe-4afc-955c-6f9a3d0cc468_589x323.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>which I think echoes how the top AI orgs were at making the effort to secure the needed computes for their companies for the last 2 years. There will soon be a &#8220;Rich Token, Poor Token&#8221; split among the labs, and the poor ones will find themselves competing against the Chinese competitors for the bottom portion of the market share.</p><h3>Latent Spaces has been putting out stellar content recently:</h3><ol><li><p>Cooking with Dylan Patel</p><div id="youtube2-UwnqWAYOjPU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;UwnqWAYOjPU&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/UwnqWAYOjPU?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></li><li><p>Interview with Doug O'Laughlin </p><div id="youtube2-x9rWFiIubmc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;x9rWFiIubmc&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/x9rWFiIubmc?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></li></ol><p>I think the core takeaways for me are the constant time lag between when the next set of computes (new chips, new datacenters) goes online and the release of a new generation of models (6-8 months). They are strictly correlated.</p><p>As the adoption of agentic applications (coding being the first among many) increases, we will start to feel the squeeze on these tokens in both quality (training) and quantity (inference), which shall ultimately result in price pressure on a supply-side bottleneck market. </p><p>It&#8217;s a bit insane to see how fast all of these are moving. It&#8217;s even more insane to realize how, in some parts of the world, there is no movement: no energy built out, no new datacenter, no incentive to attract talent. Vietnam, my home country being one of them, and I suspect many of the IT outsourcing companies there are heading toward a pretty significant disruption.</p><h3>ZML and Bazel</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XLp0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa536fdf6-ccf9-4bf6-b7f4-2b174dde3f42_593x519.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XLp0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa536fdf6-ccf9-4bf6-b7f4-2b174dde3f42_593x519.png 424w, https://substackcdn.com/image/fetch/$s_!XLp0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa536fdf6-ccf9-4bf6-b7f4-2b174dde3f42_593x519.png 848w, https://substackcdn.com/image/fetch/$s_!XLp0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa536fdf6-ccf9-4bf6-b7f4-2b174dde3f42_593x519.png 1272w, https://substackcdn.com/image/fetch/$s_!XLp0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa536fdf6-ccf9-4bf6-b7f4-2b174dde3f42_593x519.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XLp0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa536fdf6-ccf9-4bf6-b7f4-2b174dde3f42_593x519.png" width="593" height="519" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a536fdf6-ccf9-4bf6-b7f4-2b174dde3f42_593x519.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:519,&quot;width&quot;:593,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:187078,&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://sluongng.substack.com/i/189370875?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa536fdf6-ccf9-4bf6-b7f4-2b174dde3f42_593x519.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_!XLp0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa536fdf6-ccf9-4bf6-b7f4-2b174dde3f42_593x519.png 424w, https://substackcdn.com/image/fetch/$s_!XLp0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa536fdf6-ccf9-4bf6-b7f4-2b174dde3f42_593x519.png 848w, https://substackcdn.com/image/fetch/$s_!XLp0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa536fdf6-ccf9-4bf6-b7f4-2b174dde3f42_593x519.png 1272w, https://substackcdn.com/image/fetch/$s_!XLp0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa536fdf6-ccf9-4bf6-b7f4-2b174dde3f42_593x519.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x-8M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79f3e561-ea32-49ef-90b7-c3c051dcd3d3_581x518.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x-8M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79f3e561-ea32-49ef-90b7-c3c051dcd3d3_581x518.png 424w, https://substackcdn.com/image/fetch/$s_!x-8M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79f3e561-ea32-49ef-90b7-c3c051dcd3d3_581x518.png 848w, https://substackcdn.com/image/fetch/$s_!x-8M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79f3e561-ea32-49ef-90b7-c3c051dcd3d3_581x518.png 1272w, https://substackcdn.com/image/fetch/$s_!x-8M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79f3e561-ea32-49ef-90b7-c3c051dcd3d3_581x518.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x-8M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79f3e561-ea32-49ef-90b7-c3c051dcd3d3_581x518.png" width="581" height="518" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79f3e561-ea32-49ef-90b7-c3c051dcd3d3_581x518.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:518,&quot;width&quot;:581,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:144961,&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://sluongng.substack.com/i/189370875?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79f3e561-ea32-49ef-90b7-c3c051dcd3d3_581x518.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_!x-8M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79f3e561-ea32-49ef-90b7-c3c051dcd3d3_581x518.png 424w, https://substackcdn.com/image/fetch/$s_!x-8M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79f3e561-ea32-49ef-90b7-c3c051dcd3d3_581x518.png 848w, https://substackcdn.com/image/fetch/$s_!x-8M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79f3e561-ea32-49ef-90b7-c3c051dcd3d3_581x518.png 1272w, https://substackcdn.com/image/fetch/$s_!x-8M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79f3e561-ea32-49ef-90b7-c3c051dcd3d3_581x518.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>What the guys at ZML are doing is hugely impressive and underrated: they managed to bootstrap everything from scratch: the clang compiler, lld linker, the Zig language toolchain, so that they can build everything from scratch and live on the bleeding edges. They coupled this with &#8220;1-to-many split transitions&#8221; to transform a single Bazel action graph into multiple copies, each targeting a specific platform (OSes, CPU Architectures, GPU Kernels, etc). All of these build in massive parallelization using BuildBuddy Remote Cache and RBE offering.</p><p>If AWS, Nvidia, or AMD start to put out any of the interesting features, these guys will be able to build an inference solution for that platform within minutes. I still don&#8217;t fully understand how this is relevant to the current AI labs, but I suspect hardware vendors would be very much interested in adopting this framework to iterate faster.</p><p>I plan to write more about this in the future, but I need to educate myself about GPU Kernels first. Thankfully, the guys at Modal do have really good documentation about this.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><div><hr></div><p>This weekend has some crazy geopolitical news, as well as some fresh dramas among the AI labs. This blog post intentionally ignores all of it because I drafted most of this before any of the news happened.</p>]]></content:encoded></item><item><title><![CDATA[Two crazy AI weeks]]></title><description><![CDATA[Reflection time]]></description><link>https://sluongng.substack.com/p/two-crazy-ai-weeks</link><guid isPermaLink="false">https://sluongng.substack.com/p/two-crazy-ai-weeks</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Wed, 18 Feb 2026 13:03:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fIfr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The last 2 weeks were wild. Both Anthropic and OpenAI are releasing a new wave of coding agent models, and they are wildly capable. Codex 5.3 in particular is my daily driver right now, and I have never seen things move so quickly.</p><p>Instead of boring you with the reactionary posts about the models like a typical tech influencer, I will be sharing some thoughts and observations on the direct and secondary effects on the field.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><h1>Younger Teams</h1><p>Despite getting more capable models, all the AI players are hiring like crazy. The The Codex team in particular is shouting on Twitter about how they need more people to expand their team. Anthropic is hiring various different Go-to-market positions to transition into different verticals. These are great signs that our jobs are still here to stay. But the nature of the job is no longer about the design patterns or the algorithms. It&#8217;s much higher level now: a complete E2E architecture vision to wield the coding agents and realize such a vision.</p><p>But it&#8217;s not just the AI labs who are hiring; the consumer end is hiring as well. The interesting part about this portion of the job market is that enterprises realize younger, fresh grad candidates adopt AI much better and faster than their grumpy decades-old sysadmins. Newer Agentic Experience teams are being spun up with 1 experienced engineer leading groups of 0-2 years of experience with multiple coding agents running either on their laptop or on a cloud. Newer &#8220;cloud prompting&#8221; platforms are being spun up from these teams to create more secure, easier-to-use AI co-workers. </p><p>And the application is not limited to just coding!! It&#8217;s also office works like Business Intelligence, Marketing, Logistics, etc.</p><h1>Deep Blue, Spark Orange</h1><p>From<a href="https://simonwillison.net/2026/Feb/15/deep-blue/"> Simon Willison&#8217;s blog</a></p><blockquote><p>We coined a new term on the <a href="https://simonwillison.net/2026/Jan/8/llm-predictions-for-2026/">Oxide and Friends podcast</a> last month (primary credit to Adam Leventhal) covering the sense of psychological ennui leading into existential dread that many software developers are feeling thanks to the encroachment of generative AI into their field of work.</p><p>We&#8217;re calling it <strong>Deep Blue</strong>.</p></blockquote><p><a href="https://lobste.rs/s/orb96v/deep_blue">On Lobsters</a>, I advocated for an opposite term: &#8220;Spark Orange&#8221;.</p><p>It&#8217;s the joy of getting shits done.</p><p>No more the long-dreaded backlog of toils and ideas that you never have the time to build.<br>No more the back-and-forth design discussions that take hundreds of engineering hours.</p><p>Now, the moment you have a spark of an idea tinkled in your head, the coding agent will help you realize it immediately.<br>Ship your ideas! Now!</p><p>It&#8217;s never been a better time to build things.</p><h1>Good Reads</h1><p>There are a few interesting contents in the last few weeks:</p><ol><li><p><a href="https://groups.google.com/g/golang-dev/c/4Li4Ovd_ehE/m/8L9s_jq4BAAJ">Russ Cox commented</a> on how Go project should handle AI-generated PRs.<br>The &#8220;Legal Concerns&#8221; section in particular is a fascinated read.</p></li><li><p>Dwarkesh Podcast:</p><ol><li><p><a href="https://youtu.be/BYXbuik3dgA?si=lEqh37_wFx4DNbG2">Interview with Elon</a> on the necessity of Datacenter in Space.<br>My take from this is that Solar Energy is the most viable path toward sustainable (and green) energy in the next decade.</p></li><li><p><a href="https://youtu.be/n1E9IZfvGMA?si=izZY_3AqaoxSnlFk">Interview with Dario</a> on the economic of LLM.<br>It&#8217;s very interesting to hear how Dario is so focusing on drug discovery and bio-risk. I think they are among many level of applications and risks that AIs have opened the door to, not entirely sure why he is worried about this specific set of ideas.</p></li></ol></li><li><p><a href="https://youtu.be/F_1oDPWxpFQ?si=K6TQ7MGPXhWvGSBA">Latent Space interviewed Jeff Dean</a>. Much more technical than the 2 interviews above. I need to watch this again a few more times, but I don&#8217;t think there is anything too surprising. I think it&#8217;s very clear that unlike other labs, Google are much more cost-conscious because they serve these models at a much bigger scale as they are rolling out the LLMs to more verticals. Those constraints spawned lower level innovations and Google is an absolute powerhouse at that.</p></li><li><p>OpenAI - <strong><a href="https://openai.com/index/harness-engineering/">Harness engineering: leveraging Codex in an agent-first world</a>.<br></strong>The blog opened with &#8220;Over the past five months, our team has been running an experiment: building and shipping an internal beta of a software product with<strong> 0 lines of manually-written code</strong>.&#8221; which is a wild statement. I personally suspect this is their Codex-tangent team cooking a GitHub replacement, but I have no insider info on this.</p></li><li><p>Cursor - <a href="https://cursor.com/blog/self-driving-codebases">Towards self-driving codebases</a>.<br>Tangent to this, the small paragraph about &#8220;<strong>Synchronization overhead&#8221; </strong>is what I have been thinking about at the back of my head the last few weeks. Let&#8217;s say I have 100 agents running in parallel and one of them decided to refactor <code>//common/lib/foo &#8594; //common/lib/bar</code>, then how do the other 99 agents know about this refactoring to adjust accordingly? When do they do a pull/rebase? What if there are conflicts? etc&#8230;</p></li><li><p><a href="https://go.dev/blog/gofix">Using go fix to modernize Go code</a>.<br>Go team essentially created a tool to help the AI labs modernize their training data corpus. This means that the newer models can be trained with the latest Go versions syntax and best practices. This is probably the best way for a programming language to stay relevant in the age of LLM-powered coding agents.</p></li><li><p>Peter Steinberger on joining OpenAI and building in EU</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fIfr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fIfr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.png 424w, https://substackcdn.com/image/fetch/$s_!fIfr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.png 848w, https://substackcdn.com/image/fetch/$s_!fIfr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.png 1272w, https://substackcdn.com/image/fetch/$s_!fIfr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fIfr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.png" width="1194" height="1880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1880,&quot;width&quot;:1194,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1100708,&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://sluongng.substack.com/i/188368831?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.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_!fIfr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.png 424w, https://substackcdn.com/image/fetch/$s_!fIfr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.png 848w, https://substackcdn.com/image/fetch/$s_!fIfr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.png 1272w, https://substackcdn.com/image/fetch/$s_!fIfr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c5c23e-5d40-43d3-8475-7b1c148c5c49_1194x1880.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>Grok translation:</p><blockquote><p>In the USA, most people are enthusiastic.  <br>In Europe, I get insulted, people scream REGULATION and RESPONSIBILITY.<br>And if I really build a company here, then I get to struggle with things like investment protection laws, employee co-determination, and paralyzing labor regulations.  <br>At OAI, most people work 6-7 days a week and get paid accordingly.  <br>With us, that&#8217;s illegal.<br><br>Also, mindset. How I found purpose again after 3 years of searching:<br>USA: "oh man this is so great let's build sth cool!"<br>AT: "Yeah, but take care of yourself, so you don&#8217;t get another burnout, okay? So slow down a bit."</p></blockquote><p>As somebody who is living in the EU and is planning to stay here for the foreseeable future, I will be reflecting on this a lot. At the same time, I got to meet some incredible folks who are relocating to Amsterdam just this week! So I hope things will continue to get better from here on out.</p><h1>Slow Down</h1><p>With the current AI waves, I have never felt as much pressure or dread.<br>Yet come with them are a lot of joy and energy to keep on building new things.</p><p>It&#8217;s Lunar New Year, Tet for us Vietnamese, the time when we gather as a family and celebrate the past and look forward to the future. </p><p>It&#8217;s also my dear daughter&#8217;s birthday this week. She is turning two, and I am incredibly proud of her, and of my wife, our family, for what we have accomplished in the last 3 years to get where we are today.</p><p>I am taking this week off to reflect, to breathe, and to get some quality family time.<br>And I think you should too. <br>Pace yourself, for it&#8217;s a marathon, not a sprint.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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[Stages of Coding Agents Adoption]]></title><description><![CDATA[Short, fun blog. Let's make H2A a thing.]]></description><link>https://sluongng.substack.com/p/stages-of-coding-agents-adoption</link><guid isPermaLink="false">https://sluongng.substack.com/p/stages-of-coding-agents-adoption</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Tue, 10 Feb 2026 21:33:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mfco!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I am calling for a new convention, a new metric to measure coding agent adoption. The Human-to-Agent ratio, or H2A for short.</p><blockquote><p>And why not A2H? Because humans always come first.</p></blockquote><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mfco!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mfco!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.png 424w, https://substackcdn.com/image/fetch/$s_!mfco!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.png 848w, https://substackcdn.com/image/fetch/$s_!mfco!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.png 1272w, https://substackcdn.com/image/fetch/$s_!mfco!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mfco!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.png" width="969" height="619" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:619,&quot;width&quot;:969,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:18106,&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://sluongng.substack.com/i/187558422?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.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_!mfco!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.png 424w, https://substackcdn.com/image/fetch/$s_!mfco!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.png 848w, https://substackcdn.com/image/fetch/$s_!mfco!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.png 1272w, https://substackcdn.com/image/fetch/$s_!mfco!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0382ffe8-14f9-4885-a395-8e1b61adc27b_969x619.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><h1>1:1 - Early Stage</h1><p>This is where most folks are today.</p><p>They are getting their first taste of coding agents.</p><p>They have started using agents to finish their day-to-day tasks faster.</p><p>They ask the agent questions about their codebase, get the agent to write a feature or fix a bug, and then manually review the change.</p><p>Sometimes they do not like the change, so they open the editor and fix things themselves.</p><h1>1:5 - Crawlers</h1><p>I think this is where most engineers exposed to frontier coding agents are today. We are talking about folks working at top-notch AI labs and agent labs.</p><p>They have learned to context-switch better and started managing multiple agent threads in parallel.</p><p>Some of them use separate clones of the same monorepo; others prefer git worktrees. They start with two or three agents in parallel, slowly upgrading their skills.</p><p>Once the skill is honed and confidence in the outputs increases, they review implementations less. Instead, they rely on a more deterministic way to validate changes: setting up automated tests, CI, and/or Bazel/Buck2 to describe their intent, then letting the agents iterate against that.</p><p>From there, they can easily increase the open thread count to 4-5 as task complexity increases.</p><h1>1:10 - Sprinters</h1><p>I do not think most people are here just yet, at least not in February 2026, as I am writing this post. There are a handful of individuals worldwide, but not many.</p><p>Going up to 10 agents working in parallel requires a new set of tools: management tools. These are badly needed unless you are okay with burning through your tokens in a single day.</p><p>At this rate, a ChatGPT Pro subscription will not be enough; you are going to start switching to a pay-per-token model to keep your horses running.</p><p>Manual review is no longer an option. You will find yourself trying to anoint one of the 10 agents as the Reviewer, in charge of integrating code from the other nine.</p><p>How does a team of 10 engineers manage 100 agents? How do other tools like PR/CI/CD work with this code volume? Do things start to break?</p><p>More importantly, what business model can survive this code volume? Or is your tech company running at a loss, waiting for the next funding round?</p><blockquote><p>I currently have more questions than answers.</p></blockquote><h1>1:50, 1:70, 1:100 - Rocket</h1><p>Going beyond a 10x H2A ratio requires a very special autonomous factory setup.</p><p>Agents are now divided into different groups with different roles, perhaps even in a tree-like or matrix-like hierarchy. The factory is given a top-down mandate and mission objectives, which are broken down through layers of reasoning into smaller goals and eventually into implementations.</p><p>The management tools from Sprinters now become observability tools for human users. To agents, they become the new Reddit, the new Slack, and the new Gmail to centralize A2A communication and coordination.</p><p>What fascinates me more, though, is which businesses have enough margin to sustain this. If Google got where it is today with 80,000 engineers, then a 1:100 H2A ratio would mean an 800-person org could get there. Multinationals, trillions of dollars, data centers, power generators, and data cables spanning multiple oceans. Stripe had about 3,500 engineers as of 2025; 1:100 H2A takes that down to 35. Insane.</p><h1>1:&#8734; - Post Human</h1><p>Unlike many of my colleagues, I do not think we are getting there anytime soon.</p><p>Humans are still needed for liability and accountability. Humans are still needed for political movements (AI cannot vote as of 2026). Humans are still at the core of all existing economic models, and it would take decades, if not centuries, to change that.</p><p>There is a possibility for a B2B-like model where it&#8217;s entirely A2A. But my brain is not willing to go there today. With all the prompt injection attacks still being very relevant today, I think this would require a big leap compared to the existing model architectures and capabilities.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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[FOSDEM 26 - My Hallway Track Takeaways]]></title><description><![CDATA[Highlights from my trip to Brussels]]></description><link>https://sluongng.substack.com/p/fosdem-26-my-hallway-track-takeaways</link><guid isPermaLink="false">https://sluongng.substack.com/p/fosdem-26-my-hallway-track-takeaways</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Wed, 04 Feb 2026 08:01:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BtVl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebdd40c-2a05-4914-9a05-efd1f9e2e925_1280x1707.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>2026 is my 3rd FOSDEM attendance. And like most veterans of the events, I started to appreciate the people more than the talks. The talks are still fire! Some are extremely impressive technically. But they can be rewatched with the VODs and Slides being widely available. It&#8217;s the people that you don&#8217;t get to meet face-to-face often. And this is the one time where the most interesting, talented folks gather in such high concentration.</p><p>So let&#8217;s write a quick recap of the vibes I got from FOSDEM 26, the Hallway Track (including lunches and dinners). For privacy reasons, I will not be naming names nor pointing to any specific companies or individuals (unless it&#8217;s already public information or coming from a talk).</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><h1>Impact of Coding Agents</h1><p>There is a clear division on AI at FOSDEM.</p><p>Many big EU organizations are uncomfortable with adopting Coding Agents (or AI in general). There are several reasons for this, ranging from privacy to environmental concerns. But the most front and center reason was security and sovereignty: they are not comfortable sending their Intellectual Property over the internet to American-owned companies to do the inference. The inference provider (and model provider to some extent) needs to be an EU-entity and won&#8217;t be pressured by any state actors in their decision-making.</p><p>But the smaller EU startups/hackers are not constrained by these requirements. To them, AI was a blessing. Many folks reported that they have stopped writing code directly and instead, switched to prompting 3-4 agents just in the last few weeks. They experienced faster Proof of Concepts, faster time-to-market, and higher productivity overall. What would have taken them 3-4 months, which they never had the time for and shelved the ideas, is now taking them a few days, if not just a few hours.</p><p>This division is a strange inflection point. My take on this is: the demand for AI is there, very real, and has monetary impacts. It calls for EU infrastructure to support AI demand and better funding to retain talent. But while the problem statement is clear, the solution remains murky at best. Some are advocating for deregulation to speed up the private sector, while others prefer more control over software service quality and a more centralized funding model to drive growth. </p><h1>Version Control</h1><p>I had to line up 15 minutes to be able to squeeze into Janson's main track, the biggest room at FOSDEM, to listen to <a href="https://fosdem.org/2026/schedule/event/HTJK33-evolving_git_for_the_next_decade/">Patrick Steinhardt&#8217;s talk about recent advancements in Git</a>. The entire lecture hall was fully packed, with some folks standing on the side and at the back. There has never been more interest in version control systems.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bX-v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e054bd4-5324-421d-a703-e6df95fe74e3_1914x1436.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bX-v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e054bd4-5324-421d-a703-e6df95fe74e3_1914x1436.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bX-v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e054bd4-5324-421d-a703-e6df95fe74e3_1914x1436.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bX-v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e054bd4-5324-421d-a703-e6df95fe74e3_1914x1436.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bX-v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e054bd4-5324-421d-a703-e6df95fe74e3_1914x1436.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bX-v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e054bd4-5324-421d-a703-e6df95fe74e3_1914x1436.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e054bd4-5324-421d-a703-e6df95fe74e3_1914x1436.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:515234,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://sluongng.substack.com/i/186718212?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e054bd4-5324-421d-a703-e6df95fe74e3_1914x1436.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bX-v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e054bd4-5324-421d-a703-e6df95fe74e3_1914x1436.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bX-v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e054bd4-5324-421d-a703-e6df95fe74e3_1914x1436.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bX-v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e054bd4-5324-421d-a703-e6df95fe74e3_1914x1436.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bX-v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e054bd4-5324-421d-a703-e6df95fe74e3_1914x1436.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><figcaption class="image-caption">Patrick is giving a talk about Content Defined Chunking in Git</figcaption></figure></div><p>In the <a href="https://fosdem.org/2026/schedule/event/L9NCKX-vcs-bof/">VCS Bird of a Feather session</a>, attended by engineers from big tech organizations, the problems of Git (and its ecosystem) started to reveal:</p><p>Gaming companies need a good solution to track non-source code data (i.e. graphic assets). Same with companies with big data sets that needed versioning. Patrick&#8217;s talk mentioned that Git plans to replace LFS with a Content-defined Chunking scheme and multi-tier promisor-based storage backend servers. However, there is no clear timeline for that goal, and it does not seem like all the Git forges (<em>cough hub hub</em> <em>cough</em>) are interested in backing such a project at this moment.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A9Ae!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58f6dd53-6640-403f-9b38-4a0477e682ac_1914x1436.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A9Ae!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58f6dd53-6640-403f-9b38-4a0477e682ac_1914x1436.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A9Ae!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58f6dd53-6640-403f-9b38-4a0477e682ac_1914x1436.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A9Ae!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58f6dd53-6640-403f-9b38-4a0477e682ac_1914x1436.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A9Ae!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58f6dd53-6640-403f-9b38-4a0477e682ac_1914x1436.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A9Ae!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58f6dd53-6640-403f-9b38-4a0477e682ac_1914x1436.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58f6dd53-6640-403f-9b38-4a0477e682ac_1914x1436.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:228095,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://sluongng.substack.com/i/186718212?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58f6dd53-6640-403f-9b38-4a0477e682ac_1914x1436.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!A9Ae!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58f6dd53-6640-403f-9b38-4a0477e682ac_1914x1436.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A9Ae!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58f6dd53-6640-403f-9b38-4a0477e682ac_1914x1436.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A9Ae!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58f6dd53-6640-403f-9b38-4a0477e682ac_1914x1436.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A9Ae!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58f6dd53-6640-403f-9b38-4a0477e682ac_1914x1436.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><figcaption class="image-caption">VCS BoF chalkboard written &#8220;non-human coders&#8221; as one of the discussion topics. </figcaption></figure></div><p>The impacts of Coding Agents were also discussed</p><ul><li><p>More monorepos: Coding agents work better with a monorepo because file system access is popular in their training data set. Organizations with monorepos need a better solution to narrow down the access control to specific components. I.e. if you have a team of contractors working on /monorepo/project-a, they should not be able to view project-b or project-c. Current git-submodules solutions leave a lot of room for improvement. </p></li><li><p>Changes in Forge Designs: bug report, code review, CI, and deployment flows are all under heavy pressure as code is getting cheaper. I wrote about this not long ago.</p></li><li><p>First-class merge conflict support: Pierre-&#201;tienne Meunier, author of Pijul VCS, one of the BoF hosts, is definitely a pioneer in this area. But the current rise in Jujutsu also proves that this can work with git in a backward-compatible manner. As we have more code, we will have more conflicts. And we want to preserve the resolution for each conflict so that they can be reused during rebase/merge and save us all from having to repeatedly prompt the agents for a fix.</p></li></ul><p>Other topics, such as better UX, better education for these UX, and &#8220;how git is used in Puppet&#8217;s r10k&#8221; were also discussed in the BoF, but I was not part of those conversations to provide a recap.</p><h1>Test is King</h1><blockquote><p>At FOSDEM, there was a story involving a CTO of a public tech company bragging about how they &#8220;vibe coded&#8221; a Redis replacement. They told the agent to iterate againt the official test suite to ensure compatibility. The result performs 60x better.</p></blockquote><p>I have repeatedly mentioned in this blog how important it is to ground the Coding Agents with builds and tests. By giving it a way to imperatively validate the result, you are giving it clear acceptance criteria against which it can iterate with Chain of Thoughts.</p><p>As I shared with advanced Coding Agents users at FOSDEM about this, I realized that I was partially wrong previously about the post-agentic code review workflows.</p><blockquote><p>Human review for automated tests might still be very desirable in the upcoming years.</p></blockquote><p>Test code is now much more important than the implementation. Implementation is cheap because it can be generated by clankers. Test code is also getting cheaper, but it should still be more expensive than implementation. This is because it is subject to careful human reviews to help steer the implementations. Tests are the human expectation encoded to ground the agents.</p><p>These conversations with folks at FOSDEM made me recall a few things.</p><p>When Gemini-CLI first came out. I took it for a spin with a medium-sized problem. After a few minutes, it got stuck and started to have self-deprecating thoughts, just to conclude with &#8220;I should revert everything&#8221; and proceeded to delete all the progress it had made.</p><blockquote><ul><li><p>What if the rogue agents started to delete tests to bypass CI checks? Claude Code did that to me in the past.</p></li><li><p>What if it flipped the tests from expect.True to expect.False? or just add test.Skip liberally to get the code merged?</p></li></ul></blockquote><p>Test reviews are still very much needed until the model quality gets really, really good. And even then, there should still be a &#8220;critical&#8221; e2e behavioral tests that require human review.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eeoj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F259a02f8-b92a-4064-9c00-4f0f8369aa58_593x205.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eeoj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F259a02f8-b92a-4064-9c00-4f0f8369aa58_593x205.png 424w, https://substackcdn.com/image/fetch/$s_!eeoj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F259a02f8-b92a-4064-9c00-4f0f8369aa58_593x205.png 848w, https://substackcdn.com/image/fetch/$s_!eeoj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F259a02f8-b92a-4064-9c00-4f0f8369aa58_593x205.png 1272w, https://substackcdn.com/image/fetch/$s_!eeoj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F259a02f8-b92a-4064-9c00-4f0f8369aa58_593x205.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eeoj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F259a02f8-b92a-4064-9c00-4f0f8369aa58_593x205.png" width="593" height="205" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/259a02f8-b92a-4064-9c00-4f0f8369aa58_593x205.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:205,&quot;width&quot;:593,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34192,&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://sluongng.substack.com/i/186718212?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F259a02f8-b92a-4064-9c00-4f0f8369aa58_593x205.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_!eeoj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F259a02f8-b92a-4064-9c00-4f0f8369aa58_593x205.png 424w, https://substackcdn.com/image/fetch/$s_!eeoj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F259a02f8-b92a-4064-9c00-4f0f8369aa58_593x205.png 848w, https://substackcdn.com/image/fetch/$s_!eeoj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F259a02f8-b92a-4064-9c00-4f0f8369aa58_593x205.png 1272w, https://substackcdn.com/image/fetch/$s_!eeoj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F259a02f8-b92a-4064-9c00-4f0f8369aa58_593x205.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Julio ran into the same problem I did: trusting the clanker to modify test (lint)</figcaption></figure></div><p>SQLite is famous for being &#8220;open source, closed test&#8221; since the source code is available, but the test code is proprietary and private. This could be a new business model, replacing the existing &#8220;open-core&#8221; model in the age of Agentic Coding. Without a strong test suite, your competitor will not be able to copy your code and use a code farm of 1000 agents to build a competitive product. Well, at least not as fast and comprehensive as you can using your closed test suite. </p><blockquote><p>Imagine crafting a test for running SQLite on critical infrastructure, such as an airplane or a satellite in space. </p></blockquote><p>&#8220;Open Source Closed Test&#8221; still offers what people love about the OSS ecosystem: being able to view the code, edit the code, self-build, and self-host the product, while providing a strong deterrent for <em>agentic-enabled</em> commercial competitors from splitting your revenue and competing for margin.</p><h1>Speed over IPs</h1><p>This entire situation reminds me of the Chinese tech scene circa 2017-2018, before the Jack Ma crackdown. There were no Intellectual Properties rights. Internet companies such as Alibaba (my previous employer), Baidu, Tencent, etc, constantly copy each other&#8217;s features.</p><blockquote><p>Alipay has mini-apps? WeChat Pay also has mini-apps.</p><p>Taobao ship livestream sales? Douyin copied and did it even better.</p></blockquote><p>It was not possible to sit on technology and juice out the money for years. Chinese companies compete by shipping fast to get the First-mover advantage. Slower ones shred away the margin by offering a higher quality service at a better price. Ultimately, the Chinese consumer won.</p><p>We are seeing similar patterns among the AI labs today: little concern about IP protections. Something Claude Code shipped? Codex, Gemini-cli, Open Code, &#8230; all getting it just a few days later. The models also seem to be converging to the same set of capabilities and have started to compete for quality and price.</p><h1>A New Paradigm</h1><p>Speaking of speed, the most impressive talk at FOSDEM for me was <a href="https://fosdem.org/2026/schedule/event/F8SDAA-zero-sysroot_hermetic_llvm_cross-compilation_using_bazel/">&#8220;Zero-sysroot hermetic LLVM cross-compilation using Bazel&#8221; by David Zbarsky and Corentin Kerisit</a>. In there, they showcased a convoluted 4-stages Bazel build graph which bootstrapped the LLVM toolchain for all the popular platforms: they built the toolchain once, then used the result to build different runtimes, then built it again with said runtime.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3Oiy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0379f04-a438-4baa-9305-2ba5dc8a8dbf_1493x838.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Oiy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0379f04-a438-4baa-9305-2ba5dc8a8dbf_1493x838.png 424w, https://substackcdn.com/image/fetch/$s_!3Oiy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0379f04-a438-4baa-9305-2ba5dc8a8dbf_1493x838.png 848w, https://substackcdn.com/image/fetch/$s_!3Oiy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0379f04-a438-4baa-9305-2ba5dc8a8dbf_1493x838.png 1272w, https://substackcdn.com/image/fetch/$s_!3Oiy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0379f04-a438-4baa-9305-2ba5dc8a8dbf_1493x838.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Oiy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0379f04-a438-4baa-9305-2ba5dc8a8dbf_1493x838.png" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0379f04-a438-4baa-9305-2ba5dc8a8dbf_1493x838.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:286248,&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://sluongng.substack.com/i/186718212?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0379f04-a438-4baa-9305-2ba5dc8a8dbf_1493x838.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_!3Oiy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0379f04-a438-4baa-9305-2ba5dc8a8dbf_1493x838.png 424w, https://substackcdn.com/image/fetch/$s_!3Oiy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0379f04-a438-4baa-9305-2ba5dc8a8dbf_1493x838.png 848w, https://substackcdn.com/image/fetch/$s_!3Oiy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0379f04-a438-4baa-9305-2ba5dc8a8dbf_1493x838.png 1272w, https://substackcdn.com/image/fetch/$s_!3Oiy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0379f04-a438-4baa-9305-2ba5dc8a8dbf_1493x838.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 they did not stop there, the talk kept on getting crazier</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-55H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba034c39-4c18-487c-b00c-bcde5133b37f_1494x1704.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-55H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba034c39-4c18-487c-b00c-bcde5133b37f_1494x1704.png 424w, https://substackcdn.com/image/fetch/$s_!-55H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba034c39-4c18-487c-b00c-bcde5133b37f_1494x1704.png 848w, https://substackcdn.com/image/fetch/$s_!-55H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba034c39-4c18-487c-b00c-bcde5133b37f_1494x1704.png 1272w, https://substackcdn.com/image/fetch/$s_!-55H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba034c39-4c18-487c-b00c-bcde5133b37f_1494x1704.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-55H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba034c39-4c18-487c-b00c-bcde5133b37f_1494x1704.png" width="1456" height="1661" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba034c39-4c18-487c-b00c-bcde5133b37f_1494x1704.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1661,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:630206,&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://sluongng.substack.com/i/186718212?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba034c39-4c18-487c-b00c-bcde5133b37f_1494x1704.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_!-55H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba034c39-4c18-487c-b00c-bcde5133b37f_1494x1704.png 424w, https://substackcdn.com/image/fetch/$s_!-55H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba034c39-4c18-487c-b00c-bcde5133b37f_1494x1704.png 848w, https://substackcdn.com/image/fetch/$s_!-55H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba034c39-4c18-487c-b00c-bcde5133b37f_1494x1704.png 1272w, https://substackcdn.com/image/fetch/$s_!-55H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba034c39-4c18-487c-b00c-bcde5133b37f_1494x1704.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>and crazier.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ELqO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2f0176a-ff37-4770-8f99-08dd0333d982_1499x1702.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ELqO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2f0176a-ff37-4770-8f99-08dd0333d982_1499x1702.png 424w, https://substackcdn.com/image/fetch/$s_!ELqO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2f0176a-ff37-4770-8f99-08dd0333d982_1499x1702.png 848w, https://substackcdn.com/image/fetch/$s_!ELqO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2f0176a-ff37-4770-8f99-08dd0333d982_1499x1702.png 1272w, https://substackcdn.com/image/fetch/$s_!ELqO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2f0176a-ff37-4770-8f99-08dd0333d982_1499x1702.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ELqO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2f0176a-ff37-4770-8f99-08dd0333d982_1499x1702.png" width="1456" height="1653" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2f0176a-ff37-4770-8f99-08dd0333d982_1499x1702.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1653,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:653446,&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://sluongng.substack.com/i/186718212?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2f0176a-ff37-4770-8f99-08dd0333d982_1499x1702.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_!ELqO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2f0176a-ff37-4770-8f99-08dd0333d982_1499x1702.png 424w, https://substackcdn.com/image/fetch/$s_!ELqO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2f0176a-ff37-4770-8f99-08dd0333d982_1499x1702.png 848w, https://substackcdn.com/image/fetch/$s_!ELqO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2f0176a-ff37-4770-8f99-08dd0333d982_1499x1702.png 1272w, https://substackcdn.com/image/fetch/$s_!ELqO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2f0176a-ff37-4770-8f99-08dd0333d982_1499x1702.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><blockquote><p>But what does this has to do anything with speed?</p></blockquote><p>Bootstrapping LLVM used to take hours. David and Corentin are doing it in seconds thanks to the help of Bazel and Remote Build Execution that offload the computation to a cloud of machine with hundreds of core.</p><blockquote><p>Seriously, watch the demos in their VODs!!</p></blockquote><p>The project is incredibly polished. Usually, it would take several months, if not years, to get a quality project like this within the Bazel ecosystem. If you didn&#8217;t know, Bazel is hard, like hard-hard even for a senior-staff level engineer. These 2 guys did it within weeks. Over lunch, both confessed to me that they are making heavy use of coding agents to help them with various tasks. Which makes a lot of sense because, afterall, both of them are working for companies within the AI industry.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BtVl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebdd40c-2a05-4914-9a05-efd1f9e2e925_1280x1707.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BtVl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebdd40c-2a05-4914-9a05-efd1f9e2e925_1280x1707.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BtVl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebdd40c-2a05-4914-9a05-efd1f9e2e925_1280x1707.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BtVl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebdd40c-2a05-4914-9a05-efd1f9e2e925_1280x1707.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BtVl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebdd40c-2a05-4914-9a05-efd1f9e2e925_1280x1707.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BtVl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebdd40c-2a05-4914-9a05-efd1f9e2e925_1280x1707.jpeg" width="1280" height="1707" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ebdd40c-2a05-4914-9a05-efd1f9e2e925_1280x1707.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1707,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;No alternative text description for this image&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="No alternative text description for this image" title="No alternative text description for this image" srcset="https://substackcdn.com/image/fetch/$s_!BtVl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebdd40c-2a05-4914-9a05-efd1f9e2e925_1280x1707.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BtVl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebdd40c-2a05-4914-9a05-efd1f9e2e925_1280x1707.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BtVl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebdd40c-2a05-4914-9a05-efd1f9e2e925_1280x1707.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BtVl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebdd40c-2a05-4914-9a05-efd1f9e2e925_1280x1707.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><figcaption class="image-caption">David, Corentin, and I were chatting at lunch, hosted by Max Corbani.</figcaption></figure></div><p>I expect this project to be the first of many. Being able to build LLVM fast is a huge game-changer for many industries to move faster. Did you know that VLC was able to ship its Windows ARM64 build earlier than everyone else, thanks to LLVM-MinGW? Did you know that AMD and Intel, and Google are spending a good chunk of their time improving MLIR, a project under LLVM, to improve their inference software stack? ZML and Modular are among many AI startups that depend on LLVM critically. Oh, and let&#8217;s not forget Google&#8217;s Tensorflow, TPU, and XLA are all being built with Bazel (or Blaze, it&#8217;s internal name inside Google).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zq14!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6bd3f3-b432-438d-8d32-28eecb63b780_1024x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zq14!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6bd3f3-b432-438d-8d32-28eecb63b780_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!Zq14!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6bd3f3-b432-438d-8d32-28eecb63b780_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!Zq14!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6bd3f3-b432-438d-8d32-28eecb63b780_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!Zq14!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6bd3f3-b432-438d-8d32-28eecb63b780_1024x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zq14!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6bd3f3-b432-438d-8d32-28eecb63b780_1024x559.png" width="1024" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a6bd3f3-b432-438d-8d32-28eecb63b780_1024x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1260605,&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://sluongng.substack.com/i/186718212?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6bd3f3-b432-438d-8d32-28eecb63b780_1024x559.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_!Zq14!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6bd3f3-b432-438d-8d32-28eecb63b780_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!Zq14!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6bd3f3-b432-438d-8d32-28eecb63b780_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!Zq14!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6bd3f3-b432-438d-8d32-28eecb63b780_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!Zq14!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a6bd3f3-b432-438d-8d32-28eecb63b780_1024x559.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">Agent and Bazel are good friends</figcaption></figure></div><p>Bazel is getting easier to use thanks to coding agents. And the coding agents are getting faster thanks to Bazel.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><div><hr></div><p>This has been the most fun in-person event I have attended in years. I came out of FOSDEM 26 coughing like a chicken after talking for 3 days straight. I am thankful for the tiny mint box PostgreSQL booth was giving out for free. It kept my cough manageable until the very last day. Big shoutout to the French startup/hacker community that I gotta meet on Saturday. Many characters, amazing talents.</p><p>11/10 would do it again.</p>]]></content:encoded></item><item><title><![CDATA[2026: Picking The Hard Ways (Part 2) ]]></title><description><![CDATA[Forking software]]></description><link>https://sluongng.substack.com/p/2026-picking-the-hard-ways-part-2</link><guid isPermaLink="false">https://sluongng.substack.com/p/2026-picking-the-hard-ways-part-2</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Mon, 02 Feb 2026 08:13:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Obll!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>With the agents in the loop. It&#8217;s now much much easier for me to customize the software I use on a day to day basis. From being able to build and install them from source, to making relevant changes, running the test suites, my desktop is getting better quickly.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><h1>Forking Starpls</h1><p>Starpls project is the language server for the Bazel&#8217;s starlark implementation.<br>The project is written in Rust and compiled down to a single binary which my NeoVim lsp client connects to.<br><br>The project covers 85% of the starlark available inside Bazel. But as Bazel ecosystem moves faster, the single volunteer maintainer, understandably, failed to catch up with the latest changes. Moreover, there can be nichehacks made inside the Bazel.git code base that can be really hard to support well as there is no compatibility guarantee across multiple versions of Bazel. These last-miles features are very time consuming to trace down and fix, as one would need to be familiar with both the massive java + C++ code base of Bazel, and the Rust code base of starpls.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Obll!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Obll!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.png 424w, https://substackcdn.com/image/fetch/$s_!Obll!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.png 848w, https://substackcdn.com/image/fetch/$s_!Obll!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.png 1272w, https://substackcdn.com/image/fetch/$s_!Obll!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Obll!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.png" width="1456" height="1030" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1030,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:585520,&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://sluongng.substack.com/i/186484444?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.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_!Obll!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.png 424w, https://substackcdn.com/image/fetch/$s_!Obll!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.png 848w, https://substackcdn.com/image/fetch/$s_!Obll!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.png 1272w, https://substackcdn.com/image/fetch/$s_!Obll!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd42c1588-ca32-44e8-a3f0-ff3ee7337eb0_2934x2076.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><figcaption class="image-caption">https://github.com/withered-magic/starpls/compare/main...sluongng:starpls:main</figcaption></figure></div><p>But with coding agents, I was able to make dozen of fixes to my own fork of starpls.<br>These were made only for me as I have to work on several Bazel workspaces, each with their own unique set of issues. Some fixes targets Bazel 8, some targeted Bazel 9, or the bzlmod setup which has been around since Bazel 6.</p><p>I tried to upstream some of these patches. Some even managed to land upstream.<br>But I am perfectly comfortable running and building from my own fork. If there is an upstream improvements/bug fixes, I can simply rebase and resolve the conflict using the agents.</p><p>I plan to do the same with some other devtools that I use often: from the protobuf language server to be more bazel-aware, to the new Metal LSP v2.0 which rumored to be really fast for a big JVM monorepo.</p><h1>Forking Bazel</h1><p>I don&#8217;t have one fork of Bazel. I have 2 forks.</p><ul><li><p>https://github.com/sluongng/bazel - This is the associated fork which I use to raise pull requests to Bazel.git</p></li><li><p>https://github.com/sluongng/bazel-rbe - This is the dissassociated fork.</p></li></ul><blockquote><p>Why the second fork?</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mTX6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c27c4a-a464-46f4-ad25-77139ca3af64_3002x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mTX6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c27c4a-a464-46f4-ad25-77139ca3af64_3002x1600.png 424w, https://substackcdn.com/image/fetch/$s_!mTX6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c27c4a-a464-46f4-ad25-77139ca3af64_3002x1600.png 848w, https://substackcdn.com/image/fetch/$s_!mTX6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c27c4a-a464-46f4-ad25-77139ca3af64_3002x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!mTX6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c27c4a-a464-46f4-ad25-77139ca3af64_3002x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mTX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c27c4a-a464-46f4-ad25-77139ca3af64_3002x1600.png" width="1456" height="776" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87c27c4a-a464-46f4-ad25-77139ca3af64_3002x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:776,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:321477,&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://sluongng.substack.com/i/186484444?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c27c4a-a464-46f4-ad25-77139ca3af64_3002x1600.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_!mTX6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c27c4a-a464-46f4-ad25-77139ca3af64_3002x1600.png 424w, https://substackcdn.com/image/fetch/$s_!mTX6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c27c4a-a464-46f4-ad25-77139ca3af64_3002x1600.png 848w, https://substackcdn.com/image/fetch/$s_!mTX6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c27c4a-a464-46f4-ad25-77139ca3af64_3002x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!mTX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c27c4a-a464-46f4-ad25-77139ca3af64_3002x1600.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>In the second fork, I switched the RBE setup inside Bazel.git to use BuildBuddy toolchains and platform definitions. This includes the following goodies:</p><ul><li><p>Running 99% of build and test actions on our RBE infrastructure.</p></li><li><p>Enable Firecracker MicroVM for integration tests that requires lower-level syscalls (i.e. <code>mount</code>) which are typically not available on container-based solutions</p></li><li><p>Add a special Github Action workflow to sync changes from upstream over to my fork while rebasing the stack of patches to keep things fresh.</p></li></ul><blockquote><p>This <a href="https://github.com/sluongng/bazel-rbe/blob/master/.github/workflows/rbe-sync.yml">git sync workflow design</a> is pretty neat. I kept my stack of commits in a separate branch, which constantly get rebased on top of the latest changes. But to kick off CI, I would create a non-forwarding merge commit so that I can still use the first parent to identify the upstream commit being tested.<br><br>Usually it would take me a few hours to iterate against GitHub Action to get my idea properly implemented. Clankers shortened that down to a few minutes.</p></blockquote><p>As a result, I can make changes to Bazel and verify the change by running the entire test suite within a few seconds. This is because most of the build was cached remotely using CI (BuildBuddy Workflows) and I am just re-using the result.</p><p>This also mean that I can run Linux tests from my MacOS laptop, which was not possible before, especially the tricky integration shell test targets that often surface the real errors.</p><p>And yes, 80% of this setup was created with the help of a coding agent in the span of a weekend.</p><p>This provides a great foundation for me to toy around with a couple of different ideas in Bazel:</p><ul><li><p><a href="https://github.com/sluongng/bazel-rbe/compare/master...claude/research-skip-remote-output-Nrwqz">Skip stdout/err downloads</a> in Build without the Bytes</p></li><li><p>Implement Starlark bytecode compiler in Java (both Go and Rust implementation have their own bytecode representation)</p></li><li><p>Shim part of Bazel to Rust?</p></li><li><p><a href="https://github.com/sluongng/bazel-rbe/compare/master...sluongng/remote-analysis-cache-git">Bazel Remote Analysis Cache backed by Git</a> (instead of Google&#8217;s piper)</p></li></ul><p>Well&#8230; I guess I don&#8217;t toy with these directly. I am prompting the agents to do a POC for each of these topics. But the POCs are not just vibe, they are properly verified by all the tests available in the repo automatically by the agents. And because the tests are remotely executed, they run faster, the agent iterate faster, and the POCs came out faster with higher confidences.</p><p>I will be honest. I am not yet satisfy with the results just yet.<br>Even with Codex 5.2 xhigh, I constantly still see the top agents churning through their context tens of times before getting to a decent place. There was a lot of</p><blockquote><p>next<br>next<br>follow the plan<br>next</p></blockquote><p>messages queued up while I was as sleep and the agents keep on churning through their token. But I did learn a lot of new things going through this exercise: prerequisite problems inside Bazel to unblock these changes, agent steering skills, planning skills etc&#8230; And I think the agents themselves are improving as well. I have high hope for the next iteration.</p><h1>Building Git with Bazel</h1><p>In tune with doing things the hard way, you can now migrate projects from their traditional build tools to Bazel much easier than before. What used to took several months to accomplish with a few passionate engineers can now be done within hours.</p><blockquote><p>Well, perhaps s/hours/days/ if you want to migrate the long tail of tests as well</p></blockquote><p>As an example, I decided to build git with Bazel. Yes, <em>the</em> git.git.<br>The entire process took me a weekend and is now <a href="https://github.com/bazelbuild/bazel-central-registry/pull/7095">merged to the Bazel Central Registry</a> so that everyone else can use it out of the box.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-fZz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727d512b-f888-46e0-b7b1-6f06d2590020_1844x1280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-fZz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727d512b-f888-46e0-b7b1-6f06d2590020_1844x1280.png 424w, https://substackcdn.com/image/fetch/$s_!-fZz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727d512b-f888-46e0-b7b1-6f06d2590020_1844x1280.png 848w, https://substackcdn.com/image/fetch/$s_!-fZz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727d512b-f888-46e0-b7b1-6f06d2590020_1844x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!-fZz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727d512b-f888-46e0-b7b1-6f06d2590020_1844x1280.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-fZz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727d512b-f888-46e0-b7b1-6f06d2590020_1844x1280.png" width="1456" height="1011" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/727d512b-f888-46e0-b7b1-6f06d2590020_1844x1280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1011,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:336826,&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://sluongng.substack.com/i/186484444?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727d512b-f888-46e0-b7b1-6f06d2590020_1844x1280.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_!-fZz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727d512b-f888-46e0-b7b1-6f06d2590020_1844x1280.png 424w, https://substackcdn.com/image/fetch/$s_!-fZz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727d512b-f888-46e0-b7b1-6f06d2590020_1844x1280.png 848w, https://substackcdn.com/image/fetch/$s_!-fZz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727d512b-f888-46e0-b7b1-6f06d2590020_1844x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!-fZz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727d512b-f888-46e0-b7b1-6f06d2590020_1844x1280.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>It currently includes support for building Git v2.52.0 targeting MacOS and Linux. I also instrumented all the unit tests in C and integration tests in bash shell to help aid future maintenance efforts.</p><p>The hardest part of doing this with the coding agents was finding out bugs existed in upstream build setup:</p><ul><li><p>Some features are properly supported in the old Makefile setup, but not yet in the newer Meson one. My initial prompt guided the coding agent to study the Meson build config hit an eventual dead end until I instructed it to investigate the Makefile setup as well.</p></li><li><p>One niched UTF-8 Japanese encoding test was constantly failing on MacOS, which puzzled me a lot. Turns out a typical build tool would link against Homebrew&#8217;s installation of lib-iconv while the Bazel build, due to it&#8217;s hermeticity improvements, would link against the MacOS system lib-iconv. And it just happens that the system version has been broken in recent MacOS releases. This test will be fixed in Git v2.53.0 with a workaround. Though I have been thinking about converting lib-iconv to Bazel as an alternative option.</p></li></ul><p>All of these works were done on top of the incremental improvements in the Bazel Central Registry, the go-to package registry of the Bazel ecosystem. Instead of having to instrument dependencies such as curl, zlib, openssl, etc&#8230; to build with Bazel, we can simply re-use the community contributed modules to speed things up. &#129303;</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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></p>]]></content:encoded></item><item><title><![CDATA[2026: Picking The Hard Ways (Part 1)]]></title><description><![CDATA[Because Coding Agents made them easy]]></description><link>https://sluongng.substack.com/p/2026-picking-the-hard-ways-part-1</link><guid isPermaLink="false">https://sluongng.substack.com/p/2026-picking-the-hard-ways-part-1</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Sat, 31 Jan 2026 06:43:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z23D!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7dcdb8d-cc37-4339-ae88-ba82c9a146c0_608x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I woke up one morning with a new realization: As my LLM usage increased, I have been picking the harder ways to do things more often. So here is a mini blog series about how Coding Agents have been changing my software decisions in recent months.Thanks for reading Son&#8217;s Substack! Subscribe for free to receive new posts and support my work.</p><h1>Switched to Linux</h1><p>I have been an on/off Linux user in the past 10 years. In fact, I pretty much lived and worked the SysAdmin life for at least four of those ten years. But I have never found myself &#8220;productive&#8221; with Linux.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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 coding and troubleshooting are fine. It&#8217;s the emails, Slack, Zoom calls, Calendar, and office suite that always kept me away from adopting Linux. Every time I tried it, I got one of these issues:</p><ul><li><p>Broken font rendering, pixelated. It&#8217;s hard to read the news or any article on a freshly installed machine.</p></li><li><p>Webcam / Microphone reliability. Every job I have had requires me to work with other people. And part of that is jumping into meetings with co-workers, meeting customers 12-hours timezone away. Having a malfunctioning webcam at 6 AM sucks. You were barely awake and tried to put yourself together for a meeting, and next thing you know, you are deep into the driver updates to see which broke your stuff.</p></li><li><p>Bluetooth. Most of my devices are Bluetooth: mouse, headphones, keyboard. I prefer them over the wired options because I don&#8217;t need the best latency and am willing to trade it off for a bit of ergonomics in sitting positions and postures, as well as more table space. But Linux definitely made using Bluetooth devices a huge challenge, with too many low-level options, and none of them are sane.</p></li><li><p>Software curation. And I would be damn if I know which lock screen option, which window manager, which packages to use with which distro. It&#8217;s a big ecosystem, and the discovery process takes time, which I often don&#8217;t have.</p></li></ul><p>All of these pain now went away with a coding agent helping me troubleshooting issues. Here are some of the most notable stuffs I did with Claude Code / Codex to fix my stuffs:</p><ol><li><p>Installed CachyOS and configure Hyprland. Wild! Without LLMs, I would have stayed with Ubuntu. Now I get a really good windows manager and all the flickering issues got fixed steps by steps. The best part is that I am not afraid of trying newer, better solutions because switching is easy.</p></li><li><p>Bluetooth <em>mostly</em> work. My trackball still having problem reconnecting after a long idle/sleep. But the agents helped me figure out a short 1 line bash to power cycle my bluetooth controller and fixed things. It also helped configured my audio manager to automatically switch to my bluetooth headphone whenever its connected. Imagine these not being the default in 2026 &#128534;</p></li><li><p>Troubleshoot my lockscreen. My lock screen would occasionally just die after I turned off my monitor and left the PC at idle state. I do not get any signal on the monitor after I turned it back on despite the PC stayed active. I can ssh into it and everything. Turn out I needed to switch to tty3 (terminal-only) and did a bunch of shenanigans to revive my tty1 graphic desktop. I would have never figured this out previously, chalked it up to &#8220;linux&#8221; and reboot. But now I get a fix, a crash dump and I even have the option to fix these program myself and compile them from source.</p></li></ol><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.com/p/2026-picking-the-hard-ways-part-1?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://sluongng.substack.com/p/2026-picking-the-hard-ways-part-1?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p>In the next part, I will write about how I have been running forked software more often as forks are now easier to maintain than ever.</p>]]></content:encoded></item><item><title><![CDATA[Post-Agentic Code Forges]]></title><description><![CDATA[A commentary on whether GitHub and GitLab is ded-ded, or alive-ded]]></description><link>https://sluongng.substack.com/p/post-agentic-code-forges</link><guid isPermaLink="false">https://sluongng.substack.com/p/post-agentic-code-forges</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Fri, 23 Jan 2026 06:02:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Pyst!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e7fc54-ad08-4edd-b9aa-aac3062116d0_1308x870.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I got nerd snipped by <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Thorsten Ball&quot;,&quot;id&quot;:1234646,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/767e2aa6-bdc8-4dce-a08d-0f194b633a43_1770x1770.jpeg&quot;,&quot;uuid&quot;:&quot;e728ee4a-9a03-47cd-942f-17858645d6e1&quot;}" data-component-name="MentionToDOM"></span> recently.</p><p>If you missed it, he recently posted <a href="https://x.com/thorstenball/status/2013619012932947993">a short video</a> commenting on whether GitHub is still alive in a world where coding agents are widely adopted. Here is the transcript</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YliG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29300784-6d8d-45f9-b1c6-1ec4a3be42a5_1570x1632.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YliG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29300784-6d8d-45f9-b1c6-1ec4a3be42a5_1570x1632.png 424w, https://substackcdn.com/image/fetch/$s_!YliG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29300784-6d8d-45f9-b1c6-1ec4a3be42a5_1570x1632.png 848w, https://substackcdn.com/image/fetch/$s_!YliG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29300784-6d8d-45f9-b1c6-1ec4a3be42a5_1570x1632.png 1272w, https://substackcdn.com/image/fetch/$s_!YliG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29300784-6d8d-45f9-b1c6-1ec4a3be42a5_1570x1632.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YliG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29300784-6d8d-45f9-b1c6-1ec4a3be42a5_1570x1632.png" width="1456" height="1513" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29300784-6d8d-45f9-b1c6-1ec4a3be42a5_1570x1632.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1513,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&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="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!YliG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29300784-6d8d-45f9-b1c6-1ec4a3be42a5_1570x1632.png 424w, https://substackcdn.com/image/fetch/$s_!YliG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29300784-6d8d-45f9-b1c6-1ec4a3be42a5_1570x1632.png 848w, https://substackcdn.com/image/fetch/$s_!YliG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29300784-6d8d-45f9-b1c6-1ec4a3be42a5_1570x1632.png 1272w, https://substackcdn.com/image/fetch/$s_!YliG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29300784-6d8d-45f9-b1c6-1ec4a3be42a5_1570x1632.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>Well, since I have spent countless hours in the last 2-3 years sketching a plan to replace GitHub and GitLab, I obviously have a take on the matter. So let&#8217;s dive in.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><h1>Monorepo and Mergeability Checks</h1><p>With coding agents, there is a need to build the context to improve the result. Turns out, it&#8217;s really easy to get an accurate context when all of your code is in one single repo. Just a single working copy, no version drift between workspaces, no &#8220;superior manifest&#8221; of multiple repos patched together to make a virtual workspace. So naturally, monorepo adoption increased.</p><p>But if you spend time talking to the AI labs, I think one thing you should ask is if they felt the pain of when using a high velocity monorepo on GitHub or GitLab: the mergeability checks (merge-check for short).</p><p>Mergeability check is a check these code forge services often run to check if your Pull Request (Merge Request on Gitlab) has any conflicts with the target branch. It&#8217;s triggered often, I&#8217;m pretty sure Gitlab used to trigger it whenever an MR was opened in the WebUI recently, or when a new change was merged into the default branch. The check happens by GitHub or GitLab attempting to create a merge commit, annotated with a hidden merge ref, in the repo storage. </p><p>But in a post-agentic world where you have thousands of coding agents landing changes per hour, the default branch becomes an information highway that&#8217;s constantly invalidating all the merge-check results. Running merge-check becomes computationally expensive, even though the most recent merge-ort algorithm has already improved this by multiple factors.</p><p>Worse, code forges often block the merge button when the merge-check result is stale. As a result, fast-moving monorepos have to completely abandon the PR workflow and replace it with a merge-bot account that has permission to push directly to the main branch. The bot will often get equipped with its own merge queue and speculative CI engine to speed up the process.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Pyst!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e7fc54-ad08-4edd-b9aa-aac3062116d0_1308x870.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Pyst!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e7fc54-ad08-4edd-b9aa-aac3062116d0_1308x870.png 424w, https://substackcdn.com/image/fetch/$s_!Pyst!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e7fc54-ad08-4edd-b9aa-aac3062116d0_1308x870.png 848w, https://substackcdn.com/image/fetch/$s_!Pyst!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e7fc54-ad08-4edd-b9aa-aac3062116d0_1308x870.png 1272w, https://substackcdn.com/image/fetch/$s_!Pyst!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e7fc54-ad08-4edd-b9aa-aac3062116d0_1308x870.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Pyst!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e7fc54-ad08-4edd-b9aa-aac3062116d0_1308x870.png" width="1308" height="870" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69e7fc54-ad08-4edd-b9aa-aac3062116d0_1308x870.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:870,&quot;width&quot;:1308,&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_!Pyst!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e7fc54-ad08-4edd-b9aa-aac3062116d0_1308x870.png 424w, https://substackcdn.com/image/fetch/$s_!Pyst!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e7fc54-ad08-4edd-b9aa-aac3062116d0_1308x870.png 848w, https://substackcdn.com/image/fetch/$s_!Pyst!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e7fc54-ad08-4edd-b9aa-aac3062116d0_1308x870.png 1272w, https://substackcdn.com/image/fetch/$s_!Pyst!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e7fc54-ad08-4edd-b9aa-aac3062116d0_1308x870.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>So a solution to this problem does exist. But imagine paying tens of thousands of dollars to a code forge service monthly just to build half of the most important feature yourself&#8230; It does leave a sour taste in the mouth.</p><h1>Code Review</h1><p>As the reliability of the coding agents increases, people will trust the result more and more. At one point, it will no longer be possible or efficient for a team of 10 human engineers to review all the changes from 1000 code farm agents running 24/7.</p><p>I think code review, as we know it today, will disappear. We should be teaching agents to work in pairs instead: one does the coding, then yields the result to a reviewer agent to judge whether the change is ready to queue for merge. Results are grounded by tests, a lot of tests. unit, integration, e2e, you name it. But human review in the hot loop is no longer economically viable. </p><p>So one would take a step back and think: what did we use code review for pre-agentic coders? What problems did it solve?</p><p>I can think of the main 3:</p><ol><li><p>Increase code quality.</p></li><li><p>Increase code ownership, decreasing the &#8220;bus factor&#8221;.</p></li><li><p>Compliance checks.</p></li></ol><p>In a post-agentic world, 1-2 are gone. As the models and the harness wrappers(coding agent cli / orchestrators) increase in reliability and quality, code quality goes up. You would not need to worry too much about the bus factor then, because the agent can quickly analyze the problem and fix it. It would make more sense if we just ground all of the coding outputs with actual automated tests that reflect the expected product flow and let the agents do their thing, relentlessly and quickly.</p><p>However, compliance checks won&#8217;t go away. The compliance and regulatory framework will still be there, slow to evolve. In these cases, a human reviewer is still a must. </p><p>But there is a trick: move your review step to a pre-release stage instead of gating it at pre-merge. Give your agents their own default branch (i.e., &#8220;bot-main&#8221; instead of &#8220;main&#8221;) if needed. Before checking our deployment tag/branch, or before merging all of their changes to the real &#8216;main&#8217; branch to trigger a deployment, cook up a UI to help the human reviewer go through all the changes quickly. The review workload will be big in this case, so give the human check boxes and group those check boxes in smaller categories for easier review. You can also make it an &#8220;LLM-assisted&#8221; review (i.e., have the agent explain the change to the human reviewer), but the human still needs to be responsible for clearing all the checks and hitting the deploy button.</p><p>If your business is not subjected to any regulatory compliance framework like this, well, good for you. But I know there is a lot of money on the table for this feature, and none of the code forges move fast enough to realize this.</p><h1>Testing and CI</h1><p>The biggest change in the post-agentic world will be testing. Agentic changes will need to be grounded and verified by tests. Having tests vastly improves the agent outputs, just like having real code references improves the agent's chain of thought.</p><p>But ALL the traditional CI systems are slow, bloated, and are a waste of compute. Historically, when an organization reaches a certain scale, it naturally hits some of these problems and has to converge toward one solution: hermetic build tools. </p><p>Google did it first with Blaze. Meta(Facebook back then) reached there soon after and started to create Buck. Twitter (now X) also reached that stage and started Pants Build.</p><p>These tools eventually evolved into Bazel, Buck2 today, powering the majority of the big tech names: Apple, Stripe, Nvidia, Tesla, SpaceX, Robinhood, &#8230; From software to hardware, from cloud computing to social networks, from financial institutions to self-driving and robotic. The engineers all agreed on the same thing:</p><ol><li><p>With reproducible builds, you can cache + reuse results and save on compute.</p></li><li><p>To cache things accurately, you need to build the cache key from a Merkle tree of all factors that influence your task: inputs, env vars, tools, args, etc&#8230;</p></li><li><p>With reproducible builds, it should not matter if you run the build on your laptop, your workstation, or a cloud workstation.</p></li><li><p>If you divide your build into many smaller reproducible tasks, you can distribute these tasks to a build farm and use the aggregated result.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C0F-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa77e2a07-5563-44ec-8e6f-a29035560a73_1468x818.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C0F-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa77e2a07-5563-44ec-8e6f-a29035560a73_1468x818.png 424w, https://substackcdn.com/image/fetch/$s_!C0F-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa77e2a07-5563-44ec-8e6f-a29035560a73_1468x818.png 848w, https://substackcdn.com/image/fetch/$s_!C0F-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa77e2a07-5563-44ec-8e6f-a29035560a73_1468x818.png 1272w, https://substackcdn.com/image/fetch/$s_!C0F-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa77e2a07-5563-44ec-8e6f-a29035560a73_1468x818.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C0F-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa77e2a07-5563-44ec-8e6f-a29035560a73_1468x818.png" width="1456" height="811" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a77e2a07-5563-44ec-8e6f-a29035560a73_1468x818.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:811,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46997,&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://sluongng.substack.com/i/185395810?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa77e2a07-5563-44ec-8e6f-a29035560a73_1468x818.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_!C0F-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa77e2a07-5563-44ec-8e6f-a29035560a73_1468x818.png 424w, https://substackcdn.com/image/fetch/$s_!C0F-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa77e2a07-5563-44ec-8e6f-a29035560a73_1468x818.png 848w, https://substackcdn.com/image/fetch/$s_!C0F-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa77e2a07-5563-44ec-8e6f-a29035560a73_1468x818.png 1272w, https://substackcdn.com/image/fetch/$s_!C0F-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa77e2a07-5563-44ec-8e6f-a29035560a73_1468x818.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">Simple diagram of a Bazel&#8217;s remote build setup</figcaption></figure></div><p>This is exactly what tools like Bazel and Buck2 do out of the box for you, with additional telemetry and profiling goodness on top.</p><blockquote><p>But Son, what does this have to do with Coding Agents?</p></blockquote><p>Well, the new thing here is that the Big Code problem is no longer exclusive to Big Techs, like it was in 2016, nor is it exclusive to multi-billion-dollar companies, like it was in 2020. The Big Code problem, powered by coding agents, is now accessible to everyone.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!47jP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89070633-62eb-4b82-b994-5f42a425e3fa_1903x1120.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!47jP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89070633-62eb-4b82-b994-5f42a425e3fa_1903x1120.png 424w, https://substackcdn.com/image/fetch/$s_!47jP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89070633-62eb-4b82-b994-5f42a425e3fa_1903x1120.png 848w, https://substackcdn.com/image/fetch/$s_!47jP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89070633-62eb-4b82-b994-5f42a425e3fa_1903x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!47jP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89070633-62eb-4b82-b994-5f42a425e3fa_1903x1120.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!47jP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89070633-62eb-4b82-b994-5f42a425e3fa_1903x1120.png" width="1456" height="857" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89070633-62eb-4b82-b994-5f42a425e3fa_1903x1120.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:857,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:534728,&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://sluongng.substack.com/i/185395810?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89070633-62eb-4b82-b994-5f42a425e3fa_1903x1120.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_!47jP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89070633-62eb-4b82-b994-5f42a425e3fa_1903x1120.png 424w, https://substackcdn.com/image/fetch/$s_!47jP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89070633-62eb-4b82-b994-5f42a425e3fa_1903x1120.png 848w, https://substackcdn.com/image/fetch/$s_!47jP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89070633-62eb-4b82-b994-5f42a425e3fa_1903x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!47jP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89070633-62eb-4b82-b994-5f42a425e3fa_1903x1120.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">Google&#8217;s ratio between machine-generated and human-generated commits in 2015.</figcaption></figure></div><p>If you have yet to notice, many of the big AI labs started to hire a lot of experienced Dev Infra folks recently. Many of whom have years of experience in migrating monorepos onto Bazel, deploying Cloud IDEs, and setting up distributed build farms for Big Tech companies. The most notable hint would be that Codex started to adopt Bazel as a build tool.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hxYj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a58e569-f33d-4c8c-aee1-3969c9ca57e3_886x405.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hxYj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a58e569-f33d-4c8c-aee1-3969c9ca57e3_886x405.png 424w, https://substackcdn.com/image/fetch/$s_!hxYj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a58e569-f33d-4c8c-aee1-3969c9ca57e3_886x405.png 848w, https://substackcdn.com/image/fetch/$s_!hxYj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a58e569-f33d-4c8c-aee1-3969c9ca57e3_886x405.png 1272w, https://substackcdn.com/image/fetch/$s_!hxYj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a58e569-f33d-4c8c-aee1-3969c9ca57e3_886x405.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hxYj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a58e569-f33d-4c8c-aee1-3969c9ca57e3_886x405.png" width="886" height="405" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a58e569-f33d-4c8c-aee1-3969c9ca57e3_886x405.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:405,&quot;width&quot;:886,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:163897,&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://sluongng.substack.com/i/185395810?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a58e569-f33d-4c8c-aee1-3969c9ca57e3_886x405.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_!hxYj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a58e569-f33d-4c8c-aee1-3969c9ca57e3_886x405.png 424w, https://substackcdn.com/image/fetch/$s_!hxYj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a58e569-f33d-4c8c-aee1-3969c9ca57e3_886x405.png 848w, https://substackcdn.com/image/fetch/$s_!hxYj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a58e569-f33d-4c8c-aee1-3969c9ca57e3_886x405.png 1272w, https://substackcdn.com/image/fetch/$s_!hxYj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a58e569-f33d-4c8c-aee1-3969c9ca57e3_886x405.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>And if you check out the commentary on these Bazel PRs, you can easily note the impact Bazel has on the future Code Farms&#8217; performance.</p><blockquote><p>Because of the remote caching benefits we get from BuildBuddy, these new CI jobs can be extremely fast! For example, consider these two jobs that ran all the tests on Linux x86_64:</p><ul><li><p>Bazel 1m37s &#8230;</p></li><li><p>Cargo 9m20s &#8230;</p></li></ul></blockquote><p><em>From <a href="https://github.com/openai/codex/pull/8875">Codex&#8217;s PR #8875</a></em></p><blockquote><p>&#8230; as OpenAI is generally using Bazel internally for many projects</p></blockquote><p><em>From <a href="https://github.com/openai/codex/pull/8504#issuecomment-3692815834">Codex&#8217;s PR #8504</a></em></p><p>Meanwhile, most code forges are stuck in the old world, with hundreds of CI jobs re-running unconditionally for each change landed on master. No granular build graph invalidation, no confidence in the test quality, and computationally expensive to scale up for monorepos with more than 100 active users.</p><h1>Others</h1><p>I have other quick thoughts on the death of existing code forges as well:</p><ul><li><p>Coding agents do not need file system snapshots. They need a lot of commits and automatic commit push to the cloud. If you have not yet watched <a href="https://www.youtube.com/watch?v=gOVD-DrUpwQ">Durham Goode videos</a> (some on YouTube, some on Facebook videos) about how Meta designed and scaled Mecurial with push-rebase extension and Commit Cloud service, go watch them. It&#8217;s a great product roadmap to scale up forges in general.</p></li><li><p>High velocity merge queue will need a shared conflict-resolve cache. In Git, this would be <a href="https://git-scm.com/book/en/v2/Git-Tools-Rerere">git-rerere</a> cache, but distributed. In Jujutsu, I think the resolve is stored inside a commit&#8217;s header? But the ability to freely reposition commits within a queue, batching stacks of commits, can result in huge CI compute savings and speed up the agentic loops.</p></li><li><p>I have yet to explicitly state this, but Code Farm, just like Build Farm, will be a thing. Instead of headful cloud workspaces exposed to the IDE, we will now have headless cloud workspaces exposed to the agents. Similar constraints, but bigger scale and easier to manage (because unlike a human engineer, agents will not mistaken the cloud workspace is a local shell and start to install Dota 2 on it, causing disk space issues). Although prompt injection attacks are definitely a harder category to defend against.</p></li><li><p>As the CI workload increases, code forges and CI services will have to prepare ways to distribute the code changes without causing significant pressure on the git storage layer. We can see GitLab is struggling with this as it tries to revamp my <a href="https://gitlab.com/gitlab-org/gitlab-runner/-/issues/26631">6-year-old feature request</a> for sparse-checkout support, as well as introducing a new layer of pull-through caching proxy. Canva built this a while ago by <a href="https://github.com/canva-public/goblet">forking google/goblet</a> to add <a href="https://gitlab.com/gitlab-org/gitaly/-/blob/e4adf7a9510227e44b1e7f18918a6938cc64c9a6/doc/design_pack_objects_cache.md">Gitaly&#8217;s pack-object cache</a> on top. I suspect we will continue to see more of these in a post-agentic world: from a multi-tier git cache setup (local disk - local network - global) to a p2p sharing distribution system similar to Sapling&#8217;s Commit Cloud.</p></li><li><p>Don&#8217;t even get me started on Git LFS.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><h4>Housekeeping Notes</h4><p>I don&#8217;t have much time to draw up pretty diagrams, so I pulled a few of them from <a href="https://sluongng.hashnode.dev/bazel-in-ci-part-1-commit-under-test.">my previous blog series</a>. As HashNode began to block all bots and automation using CloudFlare, the RSS feed there is no longer functional. I am planning to migrate that blog series over to Substack soon and bring everything under my own domain for easier migration in the future.</p><p>So if you are interested in these topics, <strong>subscribe</strong> and stick around.</p>]]></content:encoded></item><item><title><![CDATA[bzlctx: Bazel Dependency Context for Large Language Models]]></title><description><![CDATA[Use Bazel's dependency graph to give your LLMs the context they need.]]></description><link>https://sluongng.substack.com/p/bazel-context-for-llms</link><guid isPermaLink="false">https://sluongng.substack.com/p/bazel-context-for-llms</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Fri, 07 Feb 2025 11:48:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z23D!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7dcdb8d-cc37-4339-ae88-ba82c9a146c0_608x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey everyone!</p><p>Ever wished your Large Language Model (LLM) could truly <em>get</em> your Bazel-managed codebase?  I've been working on a little tool called <strong>bzlctx</strong> that might just be the missing link. And yes, I'll be upfront: most of this post was drafted by an LLM, but I've carefully reviewed and tweaked it to make sure it's helpful and accurate!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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><h3><strong>The Problem: LLMs Need Context</strong></h3><p>When you ask an LLM to help with a specific code file (say, to generate documentation, suggest refactorings, or even write tests), it often struggles because it only sees that one file in isolation.  It's like trying to understand a single puzzle piece without seeing the rest of the picture.  Bazel, with its excellent dependency tracking, <em>knows</em> the bigger picture, but how do we get that information to the LLM?</p><h3><strong>Enter </strong><code>bzlctx</code></h3><p><strong>bzlctx</strong> (short for "Bazel Context") is a simple command-line tool that bridges this gap.  Given a source file, it uses Bazel's query capabilities to find related source files &#8211; specifically, its dependencies &#8211; and then prints their contents.  This provides a much richer context for your LLM.</p><h3><strong>How to Use It (with Examples!)</strong></h3><p>First, install it using Cargo:</p><pre><code>cargo install bzlctx

# OR, directly from GitHub:
cargo install --git https://github.com/sluongng/bzlctx</code></pre><p>Now, let's say you are working inside a Bazel workspace:</p><pre><code>bzlctx cmd/cli/main.go |\
  llm ...</code></pre><p>This pipes the contents of <code>`cmd/cli/main.go`</code> <em>and</em> its dependencies (up to a depth of 2, for now) to your LLM.  The output looks like this:</p><pre><code>==&gt; cmd/cli/main.go &lt;==
// ... contents of cmd/cli/main.go ...
==&gt; cmd/cli/utils.go &lt;==
// ... contents of cmd/cli/utils.go ...
==&gt; pkg/config/config.go &lt;==
// ...contents of pkg/config/config.go</code></pre><p>The <code>`==&gt; filename &lt;==`</code> format makes it easy for the LLM to distinguish between different files.</p><h3>Practical Example: LLM-Powered Rewriting</h3><p>I've found this incredibly useful with tools like <a href="https://github.com/simonw/llm/">Simon Willison's LLM</a> CLI.  Here's a real-world example from the <code>`bazelbuild/bazelisk`</code> repository:</p><pre><code>bzlctx core/repositories.go |\
  llm -m gemini-t 'rewrite the Repo interfaces in rust'</code></pre><p>This command grabs the context around <a href="https://github.com/bazelbuild/bazelisk/blob/1f9a1aca958cdb50b4adb84b15cdda55a600ed31/core/repositories.go#L36">core/repositories.go</a>, and then asks Google&#8217;s Gemini-thinking model to rewrite the Go interfaces in Rust.  Because the LLM has the context of related files, it can do a <em>much</em> better job for a given task!</p><h3>Limiting the Context Size</h3><p>Sometimes, the dependency graph can be huge.  <code>`bzlctx`</code> has a<code> `--limit`</code> (or <code>`-l`</code>) flag to control the maximum number of lines printed:</p><pre><code>bzlctx --limit 1000 codesearch/cmd/cli/cli.go</code></pre><p>This would show you the first few files, up to a total of 1000 lines. </p><p>It also sorts files based on their path distance to the target file, so the more relevant ones would be shown first.</p><h3>Give it a Try!</h3><p>If you're using Bazel and LLMs, I think <strong>bzlctx</strong> can significantly improve your workflow. I'd love to hear your feedback and suggestions!  You can find the code and contribute on <a href="https://github.com/sluongng/bzlctx">GitHub</a>. Let me know how you're using it!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.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 Son&#8217;s Substack! 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[New things in my 2025 setup]]></title><description><![CDATA[New things in my setup for 2025]]></description><link>https://sluongng.substack.com/p/new-things-in-my-2025-setup</link><guid isPermaLink="false">https://sluongng.substack.com/p/new-things-in-my-2025-setup</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Fri, 24 Jan 2025 10:16:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z23D!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7dcdb8d-cc37-4339-ae88-ba82c9a146c0_608x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://sluongng.substack.com/subscribe?"><span>Subscribe now</span></a></p><p>It&#8217;s 2025, which means I did not write much in 2024.<br>Part of it was because we had our first baby girl in Feb 2024, but part was also because I never felt " satisfied&#8221; with my writing. There is always a certain level of incompleteness that emits from the pile of drafts that I have. Sometimes, I would have spent days and weeks on drafts and diagrams to illustrate my posts, just so that I ended up not publishing anything.</p><p><br>So to fix that in 2025, I figure that I should just &#8220;move faster&#8221; and stop caring about quality. If folks enjoy a better writing style, then they are free to pipe my posts through w/e LLM of choice and rewrite it the way they want. It&#8217;s the thought that matters.</p><p>And with that, here is the first short post in 2025. This time, I want to let you know more about new things that I have been trying out in my daily workflow. Some hits, some misses but never stop trying.</p><h3>1. Fountain pen</h3><p>This one is a &#8220;TikTok made me do it&#8221;. I got the idea from watching a short video there.</p><p>It&#8217;s surprising to me as well as I have really bad childhood traumas with fountain pens. The Vietnamese education system which I grew up in forced all kids to learn how to write with fountain pens since 1st grade. At that age, we had to carry our pens around and ink bottles in our backpacks to school. The very same backpacks that we used to chase and hit each other with as typical 7-8-year-old kids would. Our white uniforms are always decorated with ink drops throughout the school years as some kids would weaponize their pens and swing them around to scare away others.</p><p>Yet, I do like buying this &#8220;Lamy Safari&#8221; pen for just 20 EUR on Amazon. It&#8217;s cheap, light, and does not require a separate ink bottle to get you started. Instead, most fountain pens now come with disposable ink cartridges, which is a more ergonomic option. I will probably invest in a convertible kit + ink bottle in the long term, but this does the job. I picked the Extra Fine pen nib as I do enjoy the sharper ink lines. A smaller nib also means less friction between the pen and the paper which lets you write faster.</p><blockquote><p>But how often do you write on paper in this day and age?</p></blockquote><p>Clearly not enough!</p><p>My handwriting has gone to shit over the years of using keyboards. These days I would rather brainstorm using LLM instead of draft papers. However, the slowness of writing things down by hand gives you more time to contemplate things you want to focus on. Instead of thinking of a word once when I typed it down on my keyboard, I would have to think of that same word 5-7 times when I write it down on physical paper. An enjoyable pen makes that experience more tolerable for me. We will see how long it lasts.</p><h3>2. Using LLMs more</h3><p>I was skeptical of LLMs a year ago. &#8220;Too much bullshit&#8221; as some friends of mine still say today. However, that does not stop me from keeping on trying it out throughout 2024. Every 3-4 weeks, I gave an &#8220;LLM-wrapper&#8221; service a try: OpenAI, Replit, Gemini, Bing Search, Anthropic, etc&#8230; The problem I usually give it is </p><blockquote><p>Create a CLI in Rust/Go that does foo bar using &#8230;</p></blockquote><p>And it can often do a pretty decent job. However, I would have to hand-tune a lot of things that made it never worth it. At $DAYJOB, my employer was generous enough to give me a ChatGPT plus subscription to play with but the model quality was still not at the point at which I could use it to code reliably.</p><p>However, I discovered new use cases with LLM that I had not encountered before: replacing information discovery (i.e. Google Search). At first, I started to look up different baby symptoms with it. I can describe very rough observations I have about the state of the baby and get the first hints from the LLM so that we can research further. It helped us interact with our doctors more effectively as the &#8220;House doctors&#8221; in the Netherlands can be quite&#8230; shit.</p><p>After that, I started to use LLM to help digest longer information easier. For example, we throw in a long contract from the daycare that we are registering with to ask various questions. Worth noting here that the contract was in Dutch and we were asking questions in English and Vietnamese. Not all questions were answered correctly so we would still do our diligence, but it still has saved us a bunch of time across many different contracts and legal articles. Especially with ChatGPT Search, I was able to navigate through some recent and upcoming changes to tax laws in The Netherlands much quicker and without having to hire a consultant.</p><p>Finally, I discovered the <a href="https://llm.datasette.io/">LLM CLI</a>. It seems like CLI is my favorite form factor after all. I can easily do something like `<code>cat file.go | llm &#8220;fix this&#8220;</code>` or `<code>kubectl describe pods my-pod-abcd | llm</code>` and get unstuck very quickly.<br>At work, I found myself doing this</p><blockquote><p><code>llm -m gemini-2.0-flash-exp 'im using "git commit --verbose", write a git hook using "llm -m gemini-2.0-flash-exp &lt;prompt&gt;" to help me generate the commit message from the diff. Use the existing verbose commit message as part of the prompt. craft the prompt so that the output is exactly the commit message following the conventional format'</code></p></blockquote><p>which got me a pretty decent prepare-commit-msg hook for our monorepo. After some small minor tweaks and a custom prompt inside the tweak, I now get a pretty decent commit message template to edit each time I create a patch.</p><blockquote><p><code>PROMPT="You are a commit message generator. Please create a concise and well-formatted commit message, following conventional commits format (e.g., feat: Added a new feature, fix: Resolved a bug, etc.). The message should be no longer than 50 characters for the first line. Follow up lines should be wrapped at 72 characters and provide commentary to help reviewer/reader better understand the change. <br>Here's the existing verbose commit message: </code></p><p><code>Verbose commit message: <br>\`\`\` <br>$VERBOSE_MESSAGE <br>\`\`\` </code></p><p><code>Commit message:"</code></p></blockquote><p>I don&#8217;t expect it ever to be perfect the way I want it to be. But this has already been a really good improvement given how little time I put into it. I am currently experimenting with applying the same tool inside Neovim, my daily code editor. That would save me from having to run <code>`head -456 file.rs | tail -23 | llm`</code> over and over again.</p><p>I have recently switched my family Google One account to a subscription with Gemini enabled. I expect the direct integration with GDrive, GDocs, and Gmail as well as GPhotos to be well worth the money.</p><h3>3. More Apple products</h3><p>In early 2024, with a new baby, I figured our family would have less time to spend on deep-diving into things on the Android ecosystem. I used to be that guy who rooted my phones to install low-level adblocker and mess around with different dev apis. Ain&#8217;t nobody has time for that when all you care about is whether your baby has drank enough water today. So I made a switch for my entire family to jump over to Apple.</p><p>The wife is now on an iPhone Pro 15 while I am on an iPhone Pro Max 16. And yes, the extra camera button is worth it when you want to capture those fleeting moments of the baby and share them with the grandparents who live 5 timezones away. Both me and the wife are on MacBook M-series CPU and we have a shared iPad Pro acting as an overpriced baby monitor.</p><p>Was there any problem switching to the iOS ecosystem? Yes, quite a few actually:</p><ul><li><p>Screen flickering in some views.</p></li><li><p>iCloud + services nagging in setting.</p></li><li><p>The migration from Android to iOS can get stuck and waste multiple hours.</p></li><li><p>Switching from Chrome &#8594; Safari is clunky.</p></li></ul><p>But overall, we appreciate the reliability and ease of use during this period of our life. It enables us to focus on what matters right now: our family and our work. The amount of ads we get was also reduced dramatically on iOS which is a huge plus. I&#8217;m sure we will be back to Android one day given recent developments, but I think this has been a good choice for us for the next 1-2 hardware cycles.</p>]]></content:encoded></item><item><title><![CDATA[Coming soon]]></title><description><![CDATA[This is Son&#8217;s Substack.]]></description><link>https://sluongng.substack.com/p/coming-soon</link><guid isPermaLink="false">https://sluongng.substack.com/p/coming-soon</guid><dc:creator><![CDATA[Son Luong Ngoc]]></dc:creator><pubDate>Fri, 24 Jan 2025 08:55:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z23D!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7dcdb8d-cc37-4339-ae88-ba82c9a146c0_608x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is Son&#8217;s Substack.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://sluongng.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://sluongng.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>