<?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[AlexTong.me]]></title><description><![CDATA[Field notes on building production grade software with AI from an ex-Amazon and ex-New York Times engineer.]]></description><link>https://newsletter.alextong.me</link><image><url>https://substackcdn.com/image/fetch/$s_!dUoW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F039fd895-79fa-4590-93ae-9f915aa9e2d6_512x512.png</url><title>AlexTong.me</title><link>https://newsletter.alextong.me</link></image><generator>Substack</generator><lastBuildDate>Fri, 19 Jun 2026 23:20:35 GMT</lastBuildDate><atom:link href="https://newsletter.alextong.me/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[alextong.me]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[alextongme@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[alextongme@substack.com]]></itunes:email><itunes:name><![CDATA[alextong.me]]></itunes:name></itunes:owner><itunes:author><![CDATA[alextong.me]]></itunes:author><googleplay:owner><![CDATA[alextongme@substack.com]]></googleplay:owner><googleplay:email><![CDATA[alextongme@substack.com]]></googleplay:email><googleplay:author><![CDATA[alextong.me]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[👁️ I Built Y'all an App Because My Eyes Were Dying 👁️]]></title><description><![CDATA[Your eyes are probably taking a beating. Here's everything I did to fix mine, including a free app I built for you.]]></description><link>https://newsletter.alextong.me/p/eye-break-app</link><guid isPermaLink="false">https://newsletter.alextong.me/p/eye-break-app</guid><dc:creator><![CDATA[alextong.me]]></dc:creator><pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4ad713e6-c9a5-49d2-8102-76ac72d12e20_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div id="youtube2-4A7BLMA1LIw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;4A7BLMA1LIw&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/4A7BLMA1LIw?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>Whether you're an engineer, a product manager, a designer, or literally anyone working in 2026 and probably staring at Claude / ChatGPT 24/7 &#8212; <strong>your eyes are probably taking a huuuuuuuuuge beating.</strong> And whether or not you've started to experience eye pain, I'm here to give you some relief.</p><p><strong>Because I did.</strong></p><p>About six months ago, between all of my infinite side projects plus the eight hours a day I was working, I started to notice really really sharp eye pain. I went to my eye doctor and he basically told me I was overstraining the muscles in my eye that help me view things close up &#8212; your <strong>ciliary muscles</strong>. These are the muscles that do all the focusing work when you're staring at a screen. And it was the kind of pressure that hurt <em>so bad</em> that I had to just close my eyes. I felt some relief by putting pressure on my eyes or putting a heat pad on them.</p><p>So I went down a rabbit hole on eye health, and that's what I'm writing about today. Eventually it also led me to build a free app for all of y'all to solve both my problem and hopefully what will <em>not</em> be your problem.</p><blockquote><p>If you're staring at a screen for 8+ hours a day and NOT doing anything about it &#8212; this article is for you.</p></blockquote><div><hr></div><h2>The 20-20-20 Rule &#8212; And Why It Might Not Be Enough</h2><p>So you've probably heard of the 20-20-20 rule, and if you haven't, let me just break it down for you. Basically since the late 1990s when computer use got very common, eye doctors started to advise that <strong>every 20 minutes you should look at something at least 20 feet away for 20 seconds.</strong></p><p>Now, the actual research behind these specific numbers is <em>not great.</em> While most researchers agree that the methodology is correct, what they don't agree on is how long you should be looking away and how far you should be looking away.</p><p>But what exactly is the science behind this? Well, your ciliary muscles &#8212; the ones helping you focus when you stare at a screen &#8212; basically need time to relax. If you think about it like working out:</p><blockquote><p>Picture your eyes are biceps and you've been doing bicep curls for 8 hours without any breaks jacked up on pre work out. That's what you're doing to your eyes every single day. Yes, exactly that.</p></blockquote><p>The American Optometric Association actually recommends you take a <strong>full 15-minute break every two hours</strong> of screen time <em>on top of</em> the 20-20-20 rule.</p><p>The point of all this is basically &#8212; <strong>you should be taking breaks from your screen regularly and you should be looking far away when you do that</strong>, because you need to rest the muscle in your eye that helps you see things up close.</p><div><hr></div><p> *Count Tongula's Eye Break in action*</p><h2>My Free Eye Break App</h2><p>Now, how can you get better at doing this? Well, I built a free app called <strong><a href="https://www.alextong.me/eye-break">Count Tongula's Eye Break</a></strong> &#8212; which if you don't know, Count Tongula is my alias because I'm obsessed with vampires and I just love everything about them. &#129499;</p><p>This is a <strong>free macOS menu bar app</strong> that helps enforce this rule for you. Because let's be honest &#8212; you're probably not going to remember every 20 minutes to do this. And what better way than to use the thing you're staring at all day to help you remember?</p><p>So what does it do? Every 20 minutes it will, with your permission, dim your screen with a beautiful Count Tongula-themed fog overlay and remind you to look away. It shows you a timer. And it also has that longer stretch break built in that the American Optometric Association recommended &#8212; which will trigger based on a set interval that you can customize.</p><p>Some other cool stuff I built in:</p><ul><li><p>If your screen is locked or your Mac sleeps, <strong>the timer pauses</strong> &#8212; so when you come back you're not automatically hit with an eye break reminder</p></li><li><p><strong>Multi-monitor support</strong> &#8212; if you're a coder like me or someone in tech who uses multiple monitors, this will make sure it dims <em>all</em> of them</p></li><li><p>It <strong>automatically pauses during meetings and presentations</strong> &#8212; so you won't get a fog overlay popping up in the middle of a screen share</p></li><li><p>And a lot more &#8212; streak tracking, stretch break reminders, 14 system sounds, fully customizable intervals, and a full Dracula-themed UI. <a href="https://www.alextong.me/eye-break">Check out all the features here.</a></p></li></ul><p>It's totally free and available on my website for download. Currently it's only available for Mac, but I am working on supporting Windows too because somebody emailed me and asked for it.</p><p><strong><a href="https://www.alextong.me/eye-break">Download Eye Break &#8594; Free</a></strong></p><div><hr></div><h2>Your Monitor Setup Matters More Than You Think</h2><p>Now what else can you do about your monitor setup to improve your eye health besides taking breaks?</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Tora!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6bc871-a7db-430f-8ed4-a26fb2995ce4_1280x773.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Tora!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6bc871-a7db-430f-8ed4-a26fb2995ce4_1280x773.png 424w, https://substackcdn.com/image/fetch/$s_!Tora!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6bc871-a7db-430f-8ed4-a26fb2995ce4_1280x773.png 848w, https://substackcdn.com/image/fetch/$s_!Tora!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6bc871-a7db-430f-8ed4-a26fb2995ce4_1280x773.png 1272w, https://substackcdn.com/image/fetch/$s_!Tora!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6bc871-a7db-430f-8ed4-a26fb2995ce4_1280x773.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Tora!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6bc871-a7db-430f-8ed4-a26fb2995ce4_1280x773.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6f6bc871-a7db-430f-8ed4-a26fb2995ce4_1280x773.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;No single light source dominates.&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 single light source dominates." title="No single light source dominates." srcset="https://substackcdn.com/image/fetch/$s_!Tora!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6bc871-a7db-430f-8ed4-a26fb2995ce4_1280x773.png 424w, https://substackcdn.com/image/fetch/$s_!Tora!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6bc871-a7db-430f-8ed4-a26fb2995ce4_1280x773.png 848w, https://substackcdn.com/image/fetch/$s_!Tora!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6bc871-a7db-430f-8ed4-a26fb2995ce4_1280x773.png 1272w, https://substackcdn.com/image/fetch/$s_!Tora!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6bc871-a7db-430f-8ed4-a26fb2995ce4_1280x773.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Distance</h3><p>Super important &#8212; your monitor should always be <strong>at least an arm's length away</strong> from you. Now, if you are on a laptop, that might be different. But for the most part, try to put it a bit farther away from you and then increase the font size if it's way too tiny for you to see. <em>That distance is going to help you a lot.</em></p><h3>Your Monitor's Resolution</h3><p>One more thing on monitors &#8212; I use an <strong>LG UltraFine 5K display</strong> and the reason is that higher pixel density will always result in sharper text. <strong>Sharper text means your eyes don't have to work as hard to focus.</strong> It's basically the same ciliary muscle thing we've been talking about this whole article &#8212; if the text on your screen is crisp, those muscles can relax a little more.</p><p>If you're still on a 1080p monitor, you should seriously consider upgrading to at least 4K or higher. It's probably one of the single best things you can do for your eye health besides taking breaks.</p><ul><li><p>&#9989; <strong>What I use:</strong> <a href="https://amzn.to/3PT3WFo">LG UltraFine 5K</a></p></li><li><p>&#128181; <strong>Budget pick:</strong> <a href="https://amzn.to/4v7z7Nz">Dell 27 Plus 4K Monitor (S2725QS)</a></p></li></ul><h3>Screen Height</h3><p><strong>The top of your screen should be at or slightly below your natural eye level</strong> when you're sitting down or standing. Angle it slightly upward so your neck stays neutral and you're looking very slightly down &#8212; this helps both your eyes and your posture.</p><h3>The Lighting Setup Nobody Talks About</h3><p>This one is super important &#8212; <strong>bias lighting.</strong> Bias lighting is light behind your monitor that illuminates the wall behind it. Now, if you have a desk with no wall behind it, you might want to move your desk or put some kind of panel behind it. You basically want to light the space behind your monitor.</p><p>The reason you want to do this is that when you're staring at a screen, <strong>your pupils decide how much to dilate based on the amount of light around the screen</strong> that you're looking at. So if you can lower the contrast between the amount of light radiating from the screen itself and get it to the same level of light that is behind the monitor, you can help your pupils reach a more stable level of dilation.</p><p>What I'd recommend is a <strong>dedicated bias light strip</strong> that goes directly behind your monitor &#8212; ideally covering the <strong>top edge at minimum</strong>, but preferably all 3-4 edges if you can afford it. <em>Make sure you measure your monitor before you buy one</em> &#8212; these strips come in different lengths and you want one that actually fits.</p><ul><li><p>&#9989; <strong>What I use:</strong> <a href="https://www.biaslighting.com/products/medialight-mk2-flex-6500k-cri-98-bias-lighting?variant=45676139020526">MediaLight MK2 Flex 6500K</a> &#8212; this is a proper bias light with CRI 98, not just a random LED strip from Amazon. It's worth it, trust bruv.</p></li><li><p>&#128181; <strong>Budget pick:</strong> <a href="https://amzn.to/4c8qKIU">Luminoodle by Power Practical</a> &#8212; same 6500K color temp, USB-powered, under $20</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s6PB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85066972-e9ea-4358-a2d7-eb75205ac08a_1600x1200.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s6PB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85066972-e9ea-4358-a2d7-eb75205ac08a_1600x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!s6PB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85066972-e9ea-4358-a2d7-eb75205ac08a_1600x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!s6PB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85066972-e9ea-4358-a2d7-eb75205ac08a_1600x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!s6PB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85066972-e9ea-4358-a2d7-eb75205ac08a_1600x1200.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s6PB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85066972-e9ea-4358-a2d7-eb75205ac08a_1600x1200.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85066972-e9ea-4358-a2d7-eb75205ac08a_1600x1200.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;My monitor setup with bias lighting&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="My monitor setup with bias lighting" title="My monitor setup with bias lighting" srcset="https://substackcdn.com/image/fetch/$s_!s6PB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85066972-e9ea-4358-a2d7-eb75205ac08a_1600x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!s6PB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85066972-e9ea-4358-a2d7-eb75205ac08a_1600x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!s6PB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85066972-e9ea-4358-a2d7-eb75205ac08a_1600x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!s6PB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85066972-e9ea-4358-a2d7-eb75205ac08a_1600x1200.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>My Screen Bar</h3><p>I also have a <strong>BenQ ScreenBar</strong> sitting on top of my monitor. A screen bar is basically a light that mounts to the top of your display and lights your desk surface <em>without</em> creating glare on the screen. It's the best of both worlds &#8212; you get task lighting for your keyboard and desk area, but it doesn't mess with your screen contrast. If you're going to buy one thing from this list, I'd say <strong>bias lighting first, screen bar second.</strong></p><ul><li><p>&#9989; <strong>What I use:</strong> <a href="https://amzn.to/4txd29y">BenQ ScreenBar LED Monitor Light Bar</a></p></li><li><p>&#128181; <strong>Budget pick:</strong> <a href="https://amzn.to/48v8CHU">Quntis Computer Monitor Lamp</a></p></li><li><p>&#11088; <strong>Upgrade pick:</strong> <a href="https://amzn.to/4m8nykR">BenQ ScreenBar Halo</a></p></li></ul><h3>Indirect Lighting &#8212; The Lamp</h3><p>The other type of lighting you want is <strong>a lamp off to the side</strong> that bounces light off a wall. This is separate from the bias light behind your monitor &#8212; this is about filling the room with indirect light so your screen isn't the only bright thing in your field of vision.</p><p>I'd say put it to the left or right of your desk, angled vertically so the light bounces off your top left or top right wall if you have a wall in front of your desk.</p><ul><li><p>&#9989; <strong>What I use:</strong> <a href="https://amzn.to/4bTwiIl">LED Desk Lamp with Clamp</a></p></li></ul><p>Another tip &#8212; <strong>don't have too much overhead lighting.</strong> The reason is that overhead lighting creates glare because there's too much light coming from on top of you. When you have glare on your screen, it's causing your eyes to work harder to see what's actually on the screen. You want to avoid glare at all costs.</p><p>Also &#8212; <strong>watch out for where your windows are relative to your screen.</strong> If a window is directly in front of you &#8212; behind your monitor &#8212; and letting in a lot of sunlight, the massive brightness difference between the window and your screen forces your eyes to constantly adjust. Your pupils want to constrict for the bright window but dilate for the dimmer display, and that tug-of-war fatigues your eyes fast. Having a window directly behind you isn't great either, since sunlight will reflect off your screen and cause actual glare. <strong>Ideally, windows should be to your left or right &#8212; at a 90-degree angle to your monitor.</strong> If you can't move your desk, at least get some blackout curtains or blinds.</p><p><em>This is why it's basically impossible to use a computer on a sunny day at the beach &#8212; there's too much glare and you can't actually see what's on the screen.</em></p><blockquote><p>The goal is: no single light source dominates. Your screen, the wall behind it, and the space around your desk should all be roughly the same brightness. That's what your eyes want.</p></blockquote><div><hr></div><h2>The Blinking Problem</h2><p>You probably know that you need to blink a lot, right? Another big thing here is <strong>eye moisture.</strong> What I do is I keep a bottle of eye drops at my desk at all times. <em>Every</em> desk &#8212; my desk at work, my desk at home. Because if you have to go find your eye drops, you're not going to use them. That's just how humans work.</p><p>Every time Count Tongula's Eye Break tells me to take one of those longer five-minute breaks, I'll put in some eye drops &#8212; pull down the bottom of my lower eyelid to create a pocket, let the drop settle in, and then close my eyes for about two minutes. <strong>That two minutes is about how long it takes for the drop to actually absorb into your eye.</strong></p><p><strong>Pro tip I learned way too late:</strong> while your eyes are closed, gently press your finger on the inner corner of your eye &#8212; right where your eyelid meets your nose. This is called <strong>punctal occlusion</strong> and it basically blocks the little drainage duct that would otherwise send your eye drop straight down into your nasal passages instead of letting it absorb into your eye. Without this, a lot of the drop just drains into your nose and you're basically wasting the entire eye drop. <em><strong>Two minutes, eyes closed, gentle pressure on the inner corner.</strong></em> That's the technique. Watch Dr. Sunny here do it for you live at 0:36.</p><div id="youtube2-dM9334y1hbY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;dM9334y1hbY&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/dM9334y1hbY?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>Here are my picks:</p><ul><li><p>&#9989; <strong>My pick:</strong> <a href="https://amzn.to/4sey2Ay">Refresh Tears</a> &#8212; solid everyday eye drops that get the job done.</p></li><li><p>&#11088; <strong>Upgrade pick:</strong> <a href="https://amzn.to/4m8TlCi">Refresh Plus (Preservative-Free)</a> &#8212; single-use vials with no preservatives, perfect if you're using drops more than a few times a day.</p></li></ul><p><strong>ALSO,</strong> if you are going to put eye drops in more than four times a day, you should switch to a <strong>preservative-free drop.</strong> The reason is that when you're using regular eye drops with preservatives, it can actually <em>irritate</em> your eyes with too much use. Think of it like any medicine &#8212; if you use it too much, there are side effects. Same principle.</p><div><hr></div><h2>TL;DR &#8212; Your Eye Health Checklist</h2><ul><li><p><strong>Take breaks every 20 minutes</strong> and look at something 20 feet away for 20 seconds &#8212; download Count Tongula's Eye Break <a href="https://www.alextong.me/eye-break">here</a> to help you remember</p></li><li><p><strong>Consider longer breaks too</strong> &#8212; 5-15 minutes every 2 hours</p></li><li><p><strong>Monitor at arm's length away</strong></p></li><li><p><strong>Top of screen at or slightly below eye level</strong></p></li><li><p><strong>Upgrade to at least 4K</strong> &#8212; sharper text = less strain on your eyes</p></li><li><p><strong>Put a bias light strip behind your monitor</strong></p></li><li><p><strong>Add an indirect lamp to the side</strong> &#8212; never let the screen be the only light source</p></li><li><p><strong>Get a screen bar</strong> for glare-free desk lighting</p></li><li><p><strong>Blink more + keep artificial tears on every desk</strong> &#8212; use them 2-4 times a day, eyes closed for 2 minutes after each drop!</p><ul><li><p>If you're using drops more than 4x/day, switch to preservative-free!</p></li></ul></li></ul><blockquote><h2><strong>My eyes don't hurt anymore. Yours shouldn't either.</strong></h2></blockquote><div><hr></div><p><strong>Related:</strong> <a href="https://alextong.me/newsletter/claude-code-burnout">Claude Code Is (Seriously) Burning Me Out &#8594;</a> &#8212; the productivity cycle that led me down this rabbit hole in the first place.</p><p>Notice</p><p>I'm not an eye doctor &#8212; I'm a software engineer who got really bad eye pain last year and went down a rabbit hole. Everything in this article is based on my personal experience and research, not medical advice. If you're experiencing severe eye problems, please go see an actual eye doctor. Some links in this article are affiliate links &#8212; if you buy something through them, I may earn a small commission at no extra cost to you. I only ever recommend products I actually use and alternatives I've researched.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.alextong.me/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><em>I've been a software engineer for more than half a decade, previously at Amazon and The New York Times. These are observations from the trenches &#8212; not predictions. I also built <a href="https://www.alextong.me/eye-break">Count Tongula's Eye Break</a> &#8212; a free, open-source macOS app that enforces the 20-20-20 rule.</em></p>]]></content:encoded></item><item><title><![CDATA[🗑️ Delete Your Claude Project Files]]></title><description><![CDATA[Claude can read your project files but can't update them. Here's the one-file architecture that fixes it, and why it beats editable files anyway.]]></description><link>https://newsletter.alextong.me/p/delete-your-claude-project-files</link><guid isPermaLink="false">https://newsletter.alextong.me/p/delete-your-claude-project-files</guid><dc:creator><![CDATA[alextong.me]]></dc:creator><pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/065ba3c4-b2a1-40e8-bca9-be114779e9cb_480x270.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!POVK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13548600-3b89-46f3-9cec-a5ba6b04bd99_480x270.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!POVK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13548600-3b89-46f3-9cec-a5ba6b04bd99_480x270.jpeg 424w, https://substackcdn.com/image/fetch/$s_!POVK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13548600-3b89-46f3-9cec-a5ba6b04bd99_480x270.jpeg 848w, https://substackcdn.com/image/fetch/$s_!POVK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13548600-3b89-46f3-9cec-a5ba6b04bd99_480x270.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!POVK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13548600-3b89-46f3-9cec-a5ba6b04bd99_480x270.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!POVK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13548600-3b89-46f3-9cec-a5ba6b04bd99_480x270.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13548600-3b89-46f3-9cec-a5ba6b04bd99_480x270.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:240,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#128465;&#65039; Delete Your Claude Project Files&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="&#128465;&#65039; Delete Your Claude Project Files" title="&#128465;&#65039; Delete Your Claude Project Files" srcset="https://substackcdn.com/image/fetch/$s_!POVK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13548600-3b89-46f3-9cec-a5ba6b04bd99_480x270.jpeg 424w, https://substackcdn.com/image/fetch/$s_!POVK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13548600-3b89-46f3-9cec-a5ba6b04bd99_480x270.jpeg 848w, https://substackcdn.com/image/fetch/$s_!POVK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13548600-3b89-46f3-9cec-a5ba6b04bd99_480x270.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!POVK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13548600-3b89-46f3-9cec-a5ba6b04bd99_480x270.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><em><strong>Update (June 2026). Since I wrote this, how I organize Claude projects has shifted, and I don&#8217;t run this exact Notion-hub setup day to day anymore. I&#8217;m keeping the piece up because the core idea still holds: Claude can read your project files but can&#8217;t update them, so a single source of truth it can point at beats a pile of static files. The prompts still work if you want to try it. Just read it as a snapshot of how I did things then, not my current workflow.</strong></em></p><p><strong>Ready to build?</strong> Jump to the companion article: <a href="https://alextong.me/newsletter/claude-project-hub-templates">Two Prompts That Turn Notion into Your Claude Project's Brain</a></p><div><hr></div><p>If you use Claude Projects in the Claude app for non-code work &#8212; content strategy, product specs, brand guides, research &#8212; this is for you.</p><p>I had five files in my project. Strategy docs, published articles, reference material. Claude read them every conversation. Felt organized. Felt smart.</p><p><strong>Then I deleted all of them.</strong></p><p>Not because they were bad. Because Claude Projects has a gap that will drive you nuts the second you notice it: Claude can read your project files, but <strong>it can't update them</strong>. Read-only. Every single one. Desktop app, mobile app, web &#8212; doesn't matter. Same limitation everywhere.</p><p>So if you have anything that evolves &#8212; a content strategy, a spec, a reference that changes over time &#8212; you're stuck in this loop: download the file, manually delete the old version from the project, re-upload the new one. Every. Single. Time. It's brutal. On mobile it's genuinely painful.</p><p>I spent a month testing workarounds. Tried three different approaches. One of them not only fixed the problem &#8212; it turned into a <em>better architecture</em> than editable project files would've been anyway.</p><h2>The Obvious Thing Didn't Work</h2><p>My first instinct was to just move everything to Notion and delete the project files entirely. Makes sense, right? Claude has Notion access via MCP. It can read pages, edit pages, create new database entries. Problem solved.</p><p>Except &#8212; not really.</p><p>Without project files, Claude starts every conversation <em>blind</em>. It doesn't know what pages exist in Notion, doesn't know the database IDs, doesn't know the structure. You'd have to re-explain your whole setup every single time. "Go to my Content Hub, the database ID is cx532... look for the article called..."</p><p>That's not a workflow. That's a chore.</p><p>Some people suggested using a GitHub repo with Claude Code instead. And sure, that works great &#8212; if what you're managing is code. But these aren't code files. They're content strategies, brand guides, idea banks, reference docs with images, project trackers. A repo treats all of that like source code &#8212; raw text in a file tree. No formatting, no inline images, no tables you can actually look at without squinting.</p><p><strong>Notion gives you an app.</strong> You open it on your phone, your laptop, wherever &#8212; and your docs look like docs. Tables look like tables. Images are right there. You're not opening a terminal or learning git commands to check your content calendar. <strong>Not everything belongs in a developer tool</strong>, and the people who need to touch these docs &#8212; PMs, designers, content leads &#8212; shouldn't need to learn version control to update a brand guide.</p><div id="youtube2-QVCPTzrbFsM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;QVCPTzrbFsM&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/QVCPTzrbFsM?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><h2>The Thing That Actually Works: One File That Knows Where Everything Lives</h2><p>Here's what I landed on &#8212; and it's <em>almost embarrassingly simple</em>.</p><p><strong>One markdown file.</strong> Lives in your Claude Project. Maybe 40 lines long. I called mine <strong>OVERVIEW.md</strong>.</p><p>It doesn't contain your actual content. <strong>It's a map.</strong> Think of it like a table of contents for a book you keep in a different building. The overview file tells Claude: here's where the Notion hub lives. Here's the database ID. Here's what properties exist. Here's what's been published. Here are the rules and guidelines for this project.</p><p>That's it.</p><p>Claude reads this file automatically every conversation &#8212; because it's a project file. Instantly knows the lay of the land. When it needs the actual content of an article or a doc, it fetches from Notion. One tool call. Takes a few seconds.</p><p>And here's the key &#8212; <strong>Claude can write back.</strong> Edit a draft? Update a status? Add a new entry to the database? It just does it. In Notion. Where the content actually lives.</p><p>The project file stays lightweight and stable. The Notion database stays current and editable. They work together.</p><p>If you're an engineer who uses Claude Code, you already know this pattern &#8212; it's exactly what a <strong>CLAUDE.md</strong> file does for a codebase. A small file that tells Claude "here's how this project works, here's where things live." Same architecture, just for non-code work. And unlike project files, this setup lets Claude write back &#8212; Notion stays fully editable while the overview file stays lightweight and read-only.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CB9B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66095127-fb50-4284-a52e-aa019c45caf0_1280x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CB9B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66095127-fb50-4284-a52e-aa019c45caf0_1280x768.png 424w, https://substackcdn.com/image/fetch/$s_!CB9B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66095127-fb50-4284-a52e-aa019c45caf0_1280x768.png 848w, https://substackcdn.com/image/fetch/$s_!CB9B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66095127-fb50-4284-a52e-aa019c45caf0_1280x768.png 1272w, https://substackcdn.com/image/fetch/$s_!CB9B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66095127-fb50-4284-a52e-aa019c45caf0_1280x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CB9B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66095127-fb50-4284-a52e-aa019c45caf0_1280x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66095127-fb50-4284-a52e-aa019c45caf0_1280x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The map doesn't need to change every time the territory does.&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="The map doesn't need to change every time the territory does." title="The map doesn't need to change every time the territory does." srcset="https://substackcdn.com/image/fetch/$s_!CB9B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66095127-fb50-4284-a52e-aa019c45caf0_1280x768.png 424w, https://substackcdn.com/image/fetch/$s_!CB9B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66095127-fb50-4284-a52e-aa019c45caf0_1280x768.png 848w, https://substackcdn.com/image/fetch/$s_!CB9B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66095127-fb50-4284-a52e-aa019c45caf0_1280x768.png 1272w, https://substackcdn.com/image/fetch/$s_!CB9B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66095127-fb50-4284-a52e-aa019c45caf0_1280x768.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>Why This Is Better Than You'd Think</h2><p>The obvious win is <strong>editability</strong>. But there are a few things I didn't expect.</p><p><strong>Your context window stops suffocating.</strong> When I had five project files loaded &#8212; three full articles, a strategy doc, a standalone post &#8212; that's a lot of tokens consumed before Claude even reads my first message. The overview file is maybe 50 lines. Everything else gets fetched on demand. My context window went from <em>stuffed</em> to <em>breathing room</em>.</p><p><strong>It scales without bloating.</strong> Say you've got a dozen docs in your project &#8212; specs, briefs, meeting notes, whatever. You don't need their full text loaded every conversation. But you do need to know they exist, what they're called, and where they live &#8212; in case you want to reference or update them. The overview file handles that. When you add new docs, the overview grows by a couple lines. The old approach? More and more project files until the context window is packed with content you haven't touched in <em>months</em>.</p><p><strong>Version history comes free.</strong> Notion tracks every edit. If Claude writes something wrong &#8212; edits an article intro badly, overwrites a section &#8212; you roll it back. Project files don't have that.</p><p><strong>It works from your phone.</strong> I dictate all my prompts on Claude Desktop via SuperWhisper. The Notion setup works identically on mobile &#8212; Claude reads the overview file, fetches from Notion, writes back. No re-uploading files from your phone's file picker. That workflow was genuinely painful before.</p><div id="youtube2-4TYv2PhG89A" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;4TYv2PhG89A&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/4TYv2PhG89A?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><h2>How to Set This Up Yourself</h2><p>Takes about 10 minutes.</p><p>Start a conversation in your Claude project and tell Claude to create a Notion hub page. Give it a name, tell it what database properties you need &#8212; type, status, tags, dates, whatever makes sense for your project. Have Claude migrate your existing project file content into Notion pages.</p><p>Then &#8212; the important part &#8212; have Claude generate an overview file. One markdown file. It should contain the Notion page URLs, the database ID so Claude can create new entries, a summary of what each page is, and any rules or guidelines for the project.</p><p>Download that overview file. Add it to your Claude project. Delete all the other project files. They live in Notion now.</p><p>That's it. Every conversation going forward, Claude reads the overview, knows where everything lives, fetches what it needs, writes directly to Notion.</p><p><strong>I made two starter templates you can customize in less than a minute</strong> &#8212; <a href="https://alextong.me/newsletter/claude-project-hub-templates">grab them here</a></p><h2>The Bigger Picture</h2><p>This isn't really about Notion. Or project files. Or even Claude.</p><p>It's about a pattern that keeps showing up everywhere I look: the best AI workflows aren't the ones where you give the AI all the information upfront. They're the ones where you give it a map &#8212; and let it go find what it needs.</p><p>One lightweight file that says <em>"here's what exists and where to find it."</em> That's the whole move.</p><p>And honestly? If Anthropic eventually lets Claude edit project files directly, this setup still wins. Because the separation &#8212; stable map in the project, living docs in Notion &#8212; is just a better architecture for anything that changes over time. You want your persistent context to be small and stable. You want your working documents to be wherever gives you the most flexibility.</p><p><strong>The map doesn't need to change every time the territory does.</strong></p><div><hr></div><p><em>I've been a software engineer for more than half a decade, previously at Amazon and The New York Times. These are observations from the trenches &#8212; not predictions.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.alextong.me/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://alextong.me/toolkit&quot;,&quot;text&quot;:&quot;Get the free toolkit&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://alextong.me/toolkit"><span>Get the free toolkit</span></a></p>]]></content:encoded></item><item><title><![CDATA[Two Prompts That Turn Notion into Your Claude Project's Brain]]></title><description><![CDATA[Copy one prompt, fill in your details, paste it into Claude, and your scattered project files become a single Notion hub that stays in sync.]]></description><link>https://newsletter.alextong.me/p/claude-project-hub-templates</link><guid isPermaLink="false">https://newsletter.alextong.me/p/claude-project-hub-templates</guid><dc:creator><![CDATA[alextong.me]]></dc:creator><pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4899b56f-b533-4603-a35d-a4cb7748ef37_1200x675.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wYuy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fe6534-44cc-4608-be73-dd1f774f964b_1200x675.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wYuy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fe6534-44cc-4608-be73-dd1f774f964b_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wYuy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fe6534-44cc-4608-be73-dd1f774f964b_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wYuy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fe6534-44cc-4608-be73-dd1f774f964b_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wYuy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fe6534-44cc-4608-be73-dd1f774f964b_1200x675.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wYuy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fe6534-44cc-4608-be73-dd1f774f964b_1200x675.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4fe6534-44cc-4608-be73-dd1f774f964b_1200x675.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Two Prompts That Turn Notion into Your Claude Project's Brain&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="Two Prompts That Turn Notion into Your Claude Project's Brain" title="Two Prompts That Turn Notion into Your Claude Project's Brain" srcset="https://substackcdn.com/image/fetch/$s_!wYuy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fe6534-44cc-4608-be73-dd1f774f964b_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wYuy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fe6534-44cc-4608-be73-dd1f774f964b_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wYuy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fe6534-44cc-4608-be73-dd1f774f964b_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wYuy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fe6534-44cc-4608-be73-dd1f774f964b_1200x675.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><em><strong>Update (June 2026). Since I wrote this, how I organize Claude projects has shifted, and I don&#8217;t run this exact Notion-hub setup day to day anymore. I&#8217;m keeping the piece up because the core idea still holds: Claude can read your project files but can&#8217;t update them, so a single source of truth it can point at beats a pile of static files. The prompts still work if you want to try it. Just read it as a snapshot of how I did things then, not my current workflow.</strong></em></p><p><strong>Read first:</strong> <a href="https://alextong.me/newsletter/delete-your-claude-project-files">Delete Your Claude Project Files</a> &#8212; it explains the architecture and why this setup works. Come back here when you're ready to build it.</p><div><hr></div><p>By the end of this article, you'll have a single Notion hub that replaces all your scattered Claude project files &#8212; and Claude will read from it, write to it, and stay in sync automatically. All you do is copy one prompt, fill in a few details, and paste it into Claude.</p><p>Two prompts below. One for new projects, one for migrating existing ones. Pick the one that fits.</p><h3>Before you start</h3><p><strong>You need a Claude Project.</strong> Everything below happens inside a Claude Project &#8212; not a regular conversation. If you don't have one yet, create a new project in the Claude app first. The overview file you'll generate gets added as a project file, which means every conversation in that project will automatically have it loaded as context. Without a project, there's nowhere to put it.</p><p><strong>You need Notion connected to Claude.</strong> In the Claude app, click your name in the bottom left, go to <strong>Settings</strong>, then <strong>Connectors</strong>, and click <strong>Browse connectors</strong>. Find Notion and connect it. (Note: Anthropic is moving connectors under "Customize" &#8212; if you don't see a Connectors tab, check there instead.) Takes 30 seconds. Without this, Claude can't read or write to Notion and none of this works.</p><div><hr></div><h2>Template 1: Starting a new project</h2><p>Use this if you're creating a new Claude Project from scratch and want to set up the Notion architecture from day one.</p><p><strong>Step 1:</strong> Fill in the "My project details" section at the top of the prompt below. Everything in brackets needs your own values &#8212; delete any lines you don't need. You only need to fill in the top section; the rest of the prompt references it automatically.</p><p><strong>Step 2:</strong> Start a conversation in your Claude project and paste the whole thing:</p><pre><code>My project details:
- Project name: [your project name]
- Content types: [e.g., Blog Post, Tutorial, Guide]
- Statuses: [e.g., Idea, Draft, In Progress, Done]
- Additional database properties: [e.g., Priority, Due Date &#8212; or delete this line]
- Project rules: [e.g., "Use casual tone in all drafts" &#8212; or delete this line]

Using the project details above, set up this project with Notion as the source of truth:

1. Create a Notion parent page named after my project with "Hub" appended
2. Create a Notion database under it named after my project with "Library" appended, using the content types, statuses, and any additional properties I listed
3. Generate a single overview markdown file (OVERVIEW.md) that contains:
   - Links to the Notion parent page and database
   - The database's data source ID (so I can create new entries)
   - Instructions for how to read, edit, and create content
   - My project rules from above
</code></pre><p><strong>Step 3:</strong> Claude will create everything in Notion and give you an OVERVIEW.md file.</p><p><strong>Step 4:</strong> Download the OVERVIEW.md and add it to your Claude project as a project file. That's it.</p><p>Here's what the overview file should roughly look like:</p><pre><code># Project Name &#8212; Hub

All docs live in Notion. Claude reads and writes directly there. This file is a quick-reference map.

---

## Notion Locations

Hub Page: [Notion URL will go here]

Database: [Notion URL will go here]
- Data source ID: [ID will go here]
- Properties: Title, Type, Status, [your properties]

---

## Key Pages

| Page | Description | Notion URL |
|------|-------------|------------|
| Project Spec | what it contains | URL |
| Brand Guide | what it contains | URL |

---

## Project Rules
- Always check the spec before making changes
- Use casual tone in all drafts

## How Claude Should Use This
- To read content: Fetch the Notion URL directly
- To edit content: Use Notion update tools on the page
- To add new entries: Create a new page in the database (data source ID above)
- To check status: Search or fetch the database
</code></pre><div><hr></div><h2>Template 2: Migrating an existing project</h2><p>Use this if you already have files in a Claude Project and want to migrate everything to Notion.</p><p><strong>Step 1:</strong> Fill in the "My project details" section at the top of the prompt below. Everything in brackets needs your own values &#8212; delete any lines you don't need. You only need to fill in the top section; the rest of the prompt references it automatically.</p><p><strong>Step 2:</strong> Start a conversation in your Claude project and paste the whole thing:</p><pre><code>My project details:
- Project name: [your project name]
- Content types: [e.g., Blog Post, Tutorial, Guide]
- Statuses: [e.g., Idea, Draft, In Progress, Done]
- Additional database properties: [e.g., Priority, Due Date &#8212; or delete this line]
- Project rules: [e.g., "Always check the spec before making changes" &#8212; or delete this line]

Using the project details above, migrate this project to Notion as the source of truth:

1. Create a Notion parent page named after my project with "Hub" appended
2. Create a Notion database under it named after my project with "Library" appended, using the content types, statuses, and any additional properties I listed
3. Migrate all current project file content into Notion pages in that database
4. Generate a single overview markdown file (OVERVIEW.md) that contains:
   - Links to the Notion parent page and database
   - The database's data source ID (so I can create new entries)
   - A brief summary of what each migrated page contains
   - My project rules from above
   - Instructions for how to read, edit, and create content
</code></pre><p><strong>Step 3:</strong> Claude will migrate everything to Notion and give you an OVERVIEW.md file.</p><p><strong>Step 4:</strong> Download the OVERVIEW.md file and add it to your Claude project:</p><ul><li><p>Go to your project settings</p></li><li><p>Add OVERVIEW.md as a project file</p></li><li><p>Delete all other project files &#8212; they live in Notion now</p></li></ul><p><strong>Step 5:</strong> Done. Every new conversation in that project will:</p><ul><li><p>Instantly load the overview (links, rules, structure)</p></li><li><p>Fetch full content from Notion only when needed</p></li><li><p>Write edits directly to Notion</p></li></ul><div><hr></div><h2>Tips for both templates</h2><ul><li><p>Update the overview file when you add major new pages (just add a row to the table)</p></li><li><p>Use database properties to track status so Claude can filter and search</p></li><li><p>If you need Claude to reference a specific page, just paste the Notion URL in chat &#8212; Claude will fetch it</p></li><li><p>Notion has version history &#8212; if Claude writes something wrong, you can roll it back</p></li></ul><div><hr></div><p><em>I've been a software engineer for more than half a decade, previously at Amazon and The New York Times. These are lessons from real production work, not theoretical predictions.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.alextong.me/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://alextong.me/toolkit&quot;,&quot;text&quot;:&quot;Grab the toolkit&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://alextong.me/toolkit"><span>Grab the toolkit</span></a></p>]]></content:encoded></item><item><title><![CDATA[🔥 Claude Code Is (Seriously) Burning Me Out]]></title><description><![CDATA[I'm more productive than I've ever been. I'm also more burned out than I've ever been. Those two aren't a coincidence.]]></description><link>https://newsletter.alextong.me/p/claude-code-burnout</link><guid isPermaLink="false">https://newsletter.alextong.me/p/claude-code-burnout</guid><dc:creator><![CDATA[alextong.me]]></dc:creator><pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5206cfd6-5341-4c97-8335-ef7eb1b09a03_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dzk7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39c9c024-43b9-437b-90c0-6331f974266a_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dzk7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39c9c024-43b9-437b-90c0-6331f974266a_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Dzk7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39c9c024-43b9-437b-90c0-6331f974266a_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Dzk7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39c9c024-43b9-437b-90c0-6331f974266a_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Dzk7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39c9c024-43b9-437b-90c0-6331f974266a_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dzk7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39c9c024-43b9-437b-90c0-6331f974266a_1280x720.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/39c9c024-43b9-437b-90c0-6331f974266a_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#128293; Claude Code Is (Seriously) Burning Me Out&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="&#128293; Claude Code Is (Seriously) Burning Me Out" title="&#128293; Claude Code Is (Seriously) Burning Me Out" srcset="https://substackcdn.com/image/fetch/$s_!Dzk7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39c9c024-43b9-437b-90c0-6331f974266a_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Dzk7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39c9c024-43b9-437b-90c0-6331f974266a_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Dzk7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39c9c024-43b9-437b-90c0-6331f974266a_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Dzk7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39c9c024-43b9-437b-90c0-6331f974266a_1280x720.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h2>Claude Gave Me a Productivity Problem</h2><p>I'm more productive than I've ever been in my life, full stop.</p><p>I'm also more burned out than I've ever been in my life, full stop.</p><p>Those two things are not a coincidence. That's the whole point of this article.</p><h2>The Loop Nobody Warned Me About</h2><p>Here's what actually happens when Claude Code starts working for you:</p><p>You ship something fast. Like, embarrassingly fast. You see results. You see what's NEXT. You build that too. You see what's next after that. You build that too.</p><p>Ship fast &#8594; see results fast &#8594; see MORE to build &#8594; say yes to all of it &#8594; repeat.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lSuS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bae416c-71d1-4c3f-bcda-f69144241ac0_1000x822.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lSuS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bae416c-71d1-4c3f-bcda-f69144241ac0_1000x822.png 424w, https://substackcdn.com/image/fetch/$s_!lSuS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bae416c-71d1-4c3f-bcda-f69144241ac0_1000x822.png 848w, https://substackcdn.com/image/fetch/$s_!lSuS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bae416c-71d1-4c3f-bcda-f69144241ac0_1000x822.png 1272w, https://substackcdn.com/image/fetch/$s_!lSuS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bae416c-71d1-4c3f-bcda-f69144241ac0_1000x822.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lSuS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bae416c-71d1-4c3f-bcda-f69144241ac0_1000x822.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6bae416c-71d1-4c3f-bcda-f69144241ac0_1000x822.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Your output ceiling 10x'd. Your bandwidth didn't.&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="Your output ceiling 10x'd. Your bandwidth didn't." title="Your output ceiling 10x'd. Your bandwidth didn't." srcset="https://substackcdn.com/image/fetch/$s_!lSuS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bae416c-71d1-4c3f-bcda-f69144241ac0_1000x822.png 424w, https://substackcdn.com/image/fetch/$s_!lSuS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bae416c-71d1-4c3f-bcda-f69144241ac0_1000x822.png 848w, https://substackcdn.com/image/fetch/$s_!lSuS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bae416c-71d1-4c3f-bcda-f69144241ac0_1000x822.png 1272w, https://substackcdn.com/image/fetch/$s_!lSuS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bae416c-71d1-4c3f-bcda-f69144241ac0_1000x822.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>It's not a bug. It's the design. Faster feedback loops make the backlog feel shrinkable. The backlog is never shrinkable. It's infinite. You just have a better view of it now.</p><p>I call it the Catch-22 of AI productivity. Claude Code doesn't give you more time. It gives you more visibility into everything you could build. And the gap between "what exists" and "what's possible" is bottomless.</p><h2>What Actually Opened Up For Me</h2><p>Let me be specific, because vague burnout talk is useless. In the last few months I have:</p><ul><li><p>Fully shipped Count Tongula's Eye Break &#8212; my free macOS app that enforces the 20-20-20 rule (Eye health is so important!)</p></li><li><p>Completely rebuilt my personal portfolio website from scratch</p></li><li><p>Setup my first OpenClaw</p></li><li><p>Started creating my own soda</p></li><li><p>Completely rebuilt 7 web development portfolio projects from half a decade ago</p></li><li><p>Finished producing my next dance track &#8212; drops April 3rd</p></li></ul><p>That's not a side project list. That's a whole creative life that Claude Code made feel simultaneously possible. Every single one of those things felt easy-ish. Low activation energy. Just spin up a session and go.</p><p>That's the trap.</p><p>When everything feels small and easy, you say yes to everything. And then you wake up and you're maintaining five projects, you have a 40-hour day job, and you haven't slept more than 4-5 hours a night in two weeks.</p><h2>This Isn't Just Me</h2><p>Steve Yegge &#8212; former engineer at Google and Amazon &#8212; wrote about what he called "sleep attacks." After long Claude Code sessions, he'd randomly fall asleep mid-day without warning. His colleagues were talking about installing nap pods.</p><p>A Harvard Business Review study tracked workers at a 200-person tech company for eight months. AI didn't reduce their work. It made them work faster, take on more tasks, and extend into more hours of the day &#8212; without being asked to. They specifically flagged "fatigue, burnout, and a growing sense that work is harder to step away from."</p><p>Bloomberg literally published a piece this month calling it "The Great Productivity Panic of 2026."</p><p>Vibe coding was supposed to be chill. The vibes are clearly off.</p><h2>The Fix Isn't What You Think</h2><p>Every burnout article tells you to take breaks, log off at 6pm, go touch grass. Cool. Not the answer.</p><p>The real answer: put friction back in the process. Because Claude Code removed all of it.</p><p>I actually ran this problem through five different expert perspectives &#8212; behavioral psychologist, stoic philosopher, systems designer, burnout researcher, real developers. All five landed in the same place. Not "do less." Something more specific:</p><p><strong>Rule 1: Work in 2-week sprints. Ship something. Then don't touch anything new for 3 days.</strong></p><p>That's it. When you ship &#8212; anything &#8212; you're locked out of starting new implementation work for 3 days. You can plan, document, think. No coding. No new sessions. No "just one quick thing."</p><p>Before AI, shipping felt like an ending because you were exhausted. You needed the break naturally. Now shipping feels like a green light &#8212; you close one terminal and open another. The 3-day lockout puts the ending back in artificially.</p><p><strong>Rule 2: On top of that I also built a Kanban board in Notion. Hard rule &#8212; only 3 projects in "active" at any given time. Want to add something new? Something else has to move out first.</strong></p><p>The Kanban tells me what I'm working on. The lockout tells me when to stop. Claude Code can't make either of those calls. That's the whole point.</p><h2>The Real Thing Worth Saying</h2><p>Claude Code didn't make me a more productive engineer. It made me a person who ships software, produces music, builds apps, brews soda &#8212; things I never in my life thought I would have the time or resources for.</p><p>That's genuinely incredible. I don't want to give that back.</p><p>But the expansion of what's possible is not the same as having more capacity. Your bandwidth as a human didn't 10x. Your output ceiling did. That gap &#8212; between what you can see and what you can actually sustain &#8212; that's where burnout lives.</p><p>The answer isn't to slow the tool down. It's to be more deliberate about what you point it at.</p><p>Three projects, three day breaks. Hard limit. Everything else waits.</p><p>How are you managing this? Drop your approach in the comments &#8212; genuinely curious what's working for other people.</p><div><hr></div><p><strong>Update:</strong> Anthropic's session limits accidentally became part of my fix &#8212; <a href="https://alextong.me/newsletter/notes/anthropic-tradeoff">more here &#8594;</a>.</p><p><em>I've been a software engineer for more than half a decade, previously at Amazon and The New York Times. These are observations from the trenches &#8212; not predictions.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.alextong.me/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[🌻 You're Wasting Your Best Engineering Skill]]></title><description><![CDATA[You're incredible at writing code. But you've stopped doing the thing that actually matters, and you don't even realize it.]]></description><link>https://newsletter.alextong.me/p/context-curator</link><guid isPermaLink="false">https://newsletter.alextong.me/p/context-curator</guid><dc:creator><![CDATA[alextong.me]]></dc:creator><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b5b93d13-5f72-4a6f-90bb-10494da66232_1120x630.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jTTH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84e6250b-a074-4ef6-9496-ce12e4998ed6_1120x630.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jTTH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84e6250b-a074-4ef6-9496-ce12e4998ed6_1120x630.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jTTH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84e6250b-a074-4ef6-9496-ce12e4998ed6_1120x630.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jTTH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84e6250b-a074-4ef6-9496-ce12e4998ed6_1120x630.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jTTH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84e6250b-a074-4ef6-9496-ce12e4998ed6_1120x630.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jTTH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84e6250b-a074-4ef6-9496-ce12e4998ed6_1120x630.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/84e6250b-a074-4ef6-9496-ce12e4998ed6_1120x630.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#127803; You're Wasting Your Best Engineering Skill&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="&#127803; You're Wasting Your Best Engineering Skill" title="&#127803; You're Wasting Your Best Engineering Skill" srcset="https://substackcdn.com/image/fetch/$s_!jTTH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84e6250b-a074-4ef6-9496-ce12e4998ed6_1120x630.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jTTH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84e6250b-a074-4ef6-9496-ce12e4998ed6_1120x630.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jTTH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84e6250b-a074-4ef6-9496-ce12e4998ed6_1120x630.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jTTH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84e6250b-a074-4ef6-9496-ce12e4998ed6_1120x630.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>The best engineers I know are spending their days doing something they're actually terrible at.</p><p>They're not bad at writing code &#8212; they're incredible at it. But they've stopped doing the thing they're best at, and nobody told them. They just... drifted into it. I did the same thing for way too long at work &#8212; using Claude Code heavily on a large-scale repo migration &#8212; and I didn't even notice until I stepped back and looked at how I was actually spending my time.</p><p><strong>The preparation IS the work now.</strong> That's it.</p><p>Not writing the code. Not debugging the code. Not even reviewing. The thing that determines whether Claude one-shots your ticket or hallucinates straight AI garbage &#8212; is how well you set up the problem before the AI writes a single line.</p><p>If you prepare well, Claude will understand it and probably nail it first try. If you don't, you'll spend three hours fighting an AI that's over-confidently building the wrong thing. And that's three hours of your best engineering skill &#8212; <em>your ability to think through problems</em> &#8212; completely wasted on cleanup.</p><h2>So What Did We Actually Become?</h2><p>Here's what I realized halfway through our migration: we're not writing code anymore &#8212; we're curating context.</p><p>It's basically air traffic control, right? The controller doesn't fly the planes &#8212; but every plane in the sky depends on them to land safely. They're sequencing &#8212; which plane goes first, which one holds, which runway is clear. They have a constrained space (the airspace) and if they overload it, things collide. The skill isn't in the flying. It's in the coordination.</p><p>That's what we're doing now. The "flying" &#8212; the implementation &#8212; Claude handles that. But you're the one deciding what context to load, what files to point it at, what order to tackle things in, and what constraints to set. You're managing a constrained space and sequencing work so nothing collides. And if your sequencing is wrong? The whole thing falls apart &#8212; doesn't matter how capable the aircraft are.</p><blockquote><p>You're not paid to write every line of code anymore. You're paid to know which 5% of context actually matters right now.</p></blockquote><div id="youtube2-UGRcJQ9tMbY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;UGRcJQ9tMbY&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/UGRcJQ9tMbY?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>Here's the thing about AI coding tool best practices &#8212; they basically all boil down to one constraint: when you ask an AI to solve something complex, it needs to understand the <em>whole</em> picture. Give it fragments and it guesses. Give it noise and it drowns. Fill the context window wrong and Claude doesn't warn you &#8212; it just confidently builds the wrong thing. And you'll spend three hours debugging something that should have taken fifteen minutes.</p><p>So yeah, every technique I'm about to share? Managing that constraint. You're not writing prompts anymore &#8212; you're deciding what the AI actually needs to see.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.alextong.me/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Here's Where Most People Go Wrong</h2><p>Everyone wants to give Claude the whole project at once. They all do. Like &#8212; "here's my codebase, migrate the thing, figure it out." Claude will hallucinate you into a brick wall.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mQH4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6061ef6-d7c2-46a7-91eb-52b9e0e1c5c3_554x393.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mQH4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6061ef6-d7c2-46a7-91eb-52b9e0e1c5c3_554x393.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mQH4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6061ef6-d7c2-46a7-91eb-52b9e0e1c5c3_554x393.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mQH4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6061ef6-d7c2-46a7-91eb-52b9e0e1c5c3_554x393.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mQH4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6061ef6-d7c2-46a7-91eb-52b9e0e1c5c3_554x393.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mQH4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6061ef6-d7c2-46a7-91eb-52b9e0e1c5c3_554x393.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6061ef6-d7c2-46a7-91eb-52b9e0e1c5c3_554x393.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;What your codebase looks like after giving Claude too much context at once&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="What your codebase looks like after giving Claude too much context at once" title="What your codebase looks like after giving Claude too much context at once" srcset="https://substackcdn.com/image/fetch/$s_!mQH4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6061ef6-d7c2-46a7-91eb-52b9e0e1c5c3_554x393.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mQH4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6061ef6-d7c2-46a7-91eb-52b9e0e1c5c3_554x393.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mQH4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6061ef6-d7c2-46a7-91eb-52b9e0e1c5c3_554x393.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mQH4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6061ef6-d7c2-46a7-91eb-52b9e0e1c5c3_554x393.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Claude gets confused when tasks aren't EXTREMELY scoped. And I mean <em>extremely</em>. This is what kills you &#8212; hallucinated code that looks right but does absolutely nothing.</p><p>One task per prompt. One major change per PR. Build the skeleton first. One bone at a time. Sounds slow. It's way way faster &#8212; because each one lands clean.</p><p>This matters beyond just code quality too &#8212; PR reviewability, QA testing, debugging. When something breaks, you know exactly which change caused it. Smaller, targeted context = better results. The less noise the AI has to parse, the more accurate its output.</p><p>But here's the part nobody talks about: <strong>before you systematize anything, do one full task end-to-end manually.</strong> Just one. Start to finish. No shortcuts.</p><p>That first rep is where you learn everything. Where does Claude struggle? What context does it actually need? Where does it make assumptions? What does the "happy path" look like when it goes right?</p><p>For our repo migration, the first task we migrated was messy. Took way longer than it should have. But it taught us exactly what Claude needed to succeed &#8212; which files to reference, what order to build dependencies in, what instructions to put in our repo's <code>CLAUDE.md</code>. Every task after that was dramatically faster because we'd done the spike first. Once you've done one successfully, that becomes your reference pattern &#8212; and example-driven prompts produce way more consistent results than spec-driven ones. Every. Single. Time.</p><p>And here's a subtle one that bites people constantly &#8212; <strong>tell the AI which layer something belongs in.</strong> Explicitly. If your architecture has distinct layers, Claude needs to know which one it's working in, or it'll write duplicate logic across layers. "Should the system check if a user is authenticated in layer A itself, or layer B?" If you don't specify, Claude will guess. And it will guess wrong.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_A5q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eeff819-9d1e-43ed-9e47-62d4679cc6d2_1280x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_A5q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eeff819-9d1e-43ed-9e47-62d4679cc6d2_1280x1024.png 424w, https://substackcdn.com/image/fetch/$s_!_A5q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eeff819-9d1e-43ed-9e47-62d4679cc6d2_1280x1024.png 848w, https://substackcdn.com/image/fetch/$s_!_A5q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eeff819-9d1e-43ed-9e47-62d4679cc6d2_1280x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!_A5q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eeff819-9d1e-43ed-9e47-62d4679cc6d2_1280x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_A5q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eeff819-9d1e-43ed-9e47-62d4679cc6d2_1280x1024.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3eeff819-9d1e-43ed-9e47-62d4679cc6d2_1280x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;15 minutes of prep saves 3 hours of debugging.&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="15 minutes of prep saves 3 hours of debugging." title="15 minutes of prep saves 3 hours of debugging." srcset="https://substackcdn.com/image/fetch/$s_!_A5q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eeff819-9d1e-43ed-9e47-62d4679cc6d2_1280x1024.png 424w, https://substackcdn.com/image/fetch/$s_!_A5q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eeff819-9d1e-43ed-9e47-62d4679cc6d2_1280x1024.png 848w, https://substackcdn.com/image/fetch/$s_!_A5q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eeff819-9d1e-43ed-9e47-62d4679cc6d2_1280x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!_A5q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3eeff819-9d1e-43ed-9e47-62d4679cc6d2_1280x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>The Overlooked Part: Your Mistakes Are Worth More Than Your Wins</h2><p>Once your first task works, lock it in as a reference pattern. Include the file path with line numbers so Claude can read the actual code rather than relying on your description.</p><p>But &#8212; and this is super important &#8212; don't just track what works. <strong>Track what went wrong.</strong> If you're doing repetitive work, record mistakes and how to avoid them. Counter-intuitive behaviors, one-off exceptions, anything that goes against the general architecture &#8212; document it. If you don't, Claude will follow the wrong pattern and you'll debug the same issue three times.</p><p>Here's the move: when Claude makes a mistake, tell it to update its own rules. Don't let it repeat it. Over time, your documentation becomes institutional memory &#8212; basically a compounding record of every lesson you've learned, locked in. <em>That's</em> the real competitive advantage. Not your prompting skill. Your playbook.</p><blockquote><p>Traditional code-writing ability is becoming a commodity. The scarcity now is in setup &#8212; in knowing what to ask for.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_4A_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b72c223-88be-4f34-bd60-fb0af467d632_421x236.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_4A_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b72c223-88be-4f34-bd60-fb0af467d632_421x236.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_4A_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b72c223-88be-4f34-bd60-fb0af467d632_421x236.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_4A_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b72c223-88be-4f34-bd60-fb0af467d632_421x236.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_4A_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b72c223-88be-4f34-bd60-fb0af467d632_421x236.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_4A_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b72c223-88be-4f34-bd60-fb0af467d632_421x236.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b72c223-88be-4f34-bd60-fb0af467d632_421x236.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Can't build the wrong thing if you prepare so well there's nothing to misinterpret&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="Can't build the wrong thing if you prepare so well there's nothing to misinterpret" title="Can't build the wrong thing if you prepare so well there's nothing to misinterpret" srcset="https://substackcdn.com/image/fetch/$s_!_4A_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b72c223-88be-4f34-bd60-fb0af467d632_421x236.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_4A_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b72c223-88be-4f34-bd60-fb0af467d632_421x236.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_4A_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b72c223-88be-4f34-bd60-fb0af467d632_421x236.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_4A_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b72c223-88be-4f34-bd60-fb0af467d632_421x236.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>When to Stop Preparing (And Just Ship It)</h2><p>These techniques are for complex, multi-session, multi-file work. Don't over-apply them.</p><p><strong>Separate thinking from doing</strong> &#8212; don't ask Claude to plan and implement in the same prompt. Ask it to plan first always &#8212; output a plan, not code. Review the plan. Then tell it to execute. And when things go sideways during implementation, don't keep pushing forward &#8212; go back to planning and re-plan from scratch. A fresh plan consistently beats incremental patching on a broken implementation.</p><p><strong>Know when to reset</strong> &#8212; long sessions degrade in quality. When Claude starts doing weird stuff &#8212; inserting defaults you didn't ask for, ignoring constraints you set &#8212; it's cheaper to start a fresh session with a clean prompt than to keep fighting. This is another reason well-scoped tasks matter: if your prompts are self-contained, starting fresh is painless. (<a href="https://substack.com/@alextongme/note/c-278463109?r=8fhnm&amp;utm_source=notes-share-action&amp;utm_medium=web">Tactical note on when to throw the session away &#8594;</a>)</p><p>If the task fits in one prompt and one PR &#8212; a one-line bug fix, a simple function addition, a config change &#8212; just do it directly. Not every single task needs a dependency chain, a skeleton, and a reference pattern. The right question is: "Will the AI need more context than fits cleanly in one session?" If yes, prepare. If no, just ask.</p><h2>The Bottom Line</h2><p>You used to be measured by how much code you could write. Now you're measured by how well you prepare. And that's not a demotion &#8212; it's a promotion you didn't ask for. Most people still haven't realized they got it.</p><p>The engineers getting the best results with Claude aren't the ones writing the cleverest prompts. They're the ones who prepare so well that Claude has no room to fail. Break the problem down. Scope the task. Give Claude exactly what it needs &#8212; nothing more, nothing less. And when things get messy, kill the session and start fresh.</p><p>The code writes itself now. Your job is to make sure it's writing the right thing.</p><div><hr></div><p><em>I've been a software engineer for more than half a decade, previously at Amazon and The New York Times. These are lessons from real production work, not theoretical predictions.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.alextong.me/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[🧛 Stop Reading Every Line of Code!]]></title><description><![CDATA[If you keep reviewing code like it's 2016 in 2026, your process is going to break.]]></description><link>https://newsletter.alextong.me/p/code-review-wrong</link><guid isPermaLink="false">https://newsletter.alextong.me/p/code-review-wrong</guid><dc:creator><![CDATA[alextong.me]]></dc:creator><pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1cbc9ffb-bee4-4793-9c68-e4b1a03d58c8_640x360.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RAD2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F438ca7cc-9604-45f0-b915-bb8a93274d51_640x360.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RAD2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F438ca7cc-9604-45f0-b915-bb8a93274d51_640x360.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RAD2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F438ca7cc-9604-45f0-b915-bb8a93274d51_640x360.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RAD2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F438ca7cc-9604-45f0-b915-bb8a93274d51_640x360.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RAD2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F438ca7cc-9604-45f0-b915-bb8a93274d51_640x360.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RAD2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F438ca7cc-9604-45f0-b915-bb8a93274d51_640x360.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/438ca7cc-9604-45f0-b915-bb8a93274d51_640x360.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#129499; Stop Reading Every Line of Code!&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="&#129499; Stop Reading Every Line of Code!" title="&#129499; Stop Reading Every Line of Code!" srcset="https://substackcdn.com/image/fetch/$s_!RAD2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F438ca7cc-9604-45f0-b915-bb8a93274d51_640x360.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RAD2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F438ca7cc-9604-45f0-b915-bb8a93274d51_640x360.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RAD2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F438ca7cc-9604-45f0-b915-bb8a93274d51_640x360.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RAD2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F438ca7cc-9604-45f0-b915-bb8a93274d51_640x360.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>I've been using Claude Code HEAVY at work. Like, 8 hours a day speaking to 6 different robots at the same time, working on 6 tickets at the same time. So much so that our team cannot handle the amount of PRs that we're spitting out because we're just not able to keep up with the output. The more I use it, the more I'm convinced of this fact:</p><p><strong>We're doing code review wrong.</strong></p><p>And our process is already breaking in 2026. Our default assumption is outdated:</p><blockquote><p>"A human wrote every line, so a human should read every line."</p></blockquote><p>That world is quickly fading. If you keep reviewing things like it's 2016 in 2026, your process is going to break. Whether you're an engineer, a manager, or a product manager &#8212; this problem will affect how you do everything.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6kOn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af7ace6-34a1-4cb2-adbd-e69d0f92a8c2_1400x1148.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6kOn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af7ace6-34a1-4cb2-adbd-e69d0f92a8c2_1400x1148.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6kOn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af7ace6-34a1-4cb2-adbd-e69d0f92a8c2_1400x1148.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6kOn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af7ace6-34a1-4cb2-adbd-e69d0f92a8c2_1400x1148.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6kOn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af7ace6-34a1-4cb2-adbd-e69d0f92a8c2_1400x1148.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6kOn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af7ace6-34a1-4cb2-adbd-e69d0f92a8c2_1400x1148.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1af7ace6-34a1-4cb2-adbd-e69d0f92a8c2_1400x1148.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;meow&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="meow" title="meow" srcset="https://substackcdn.com/image/fetch/$s_!6kOn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af7ace6-34a1-4cb2-adbd-e69d0f92a8c2_1400x1148.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6kOn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af7ace6-34a1-4cb2-adbd-e69d0f92a8c2_1400x1148.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6kOn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af7ace6-34a1-4cb2-adbd-e69d0f92a8c2_1400x1148.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6kOn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af7ace6-34a1-4cb2-adbd-e69d0f92a8c2_1400x1148.jpeg 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><h2>We Stopped Reading Assembly &#8212; But This Isn't Quite The Same Move</h2><p>We've been in a similar situation before. When we moved from assembly to higher-level languages, nobody said "hey, we still need to review the entire assembly output." We trusted the abstraction. We were fine just reviewing the higher-level code. We shifted our focus. This AI-generated shift is similar, but a hundred times bigger &#8212; and it has one critical difference.</p><p>Here we go. We already tolerate a lot of black boxes constantly. You're not reading every npm package you install. Nobody reviews the JavaScript that TypeScript compiles down to. Nobody reads the server configs AWS provisions when you write in Terraform. You write a SQL query and you let the query planner decide how to execute.</p><p>So here's the critical difference. Compilers, like the examples I just gave, are deterministic and formally verified. LLMs are not. Two identical prompts fed to Claude can produce very different code. Worse, AI agents actively drift from their own instructions as context bloats. Your CLAUDE.md file might say "don't insert default values," but the agent might do it anyway 3,000 tokens in. I don't know if this will get fixed with better models because it seems very fundamental to how these models work to begin with.</p><p>So how can we fix our code review bottleneck problem? With better guardrails.</p><h2>Review The Plan, Then Skim The Diff</h2><p>If implementation is increasingly generated &#8212; and it is &#8212; the highest-leverage review shifts earlier in the process: plans, constraints, interfaces, architecture, risks, tests.</p><p>For most changes, when you're reading the PR summary, you're asking: Does this plan sound correct? Are the constraints right? Are there any edge cases? Do the tests on the PR prove the behavior? That's much higher leverage than reading every single line.</p><p>For things like auth, payments, or permission checks, you probably still want targeted line-by-line reading even when the plan looks solid. Why? Because agents will drift. Plans will not capture every single implementation error or nitpick. Critical code like this always deserves human eyes on every line. I'm not saying we should move to a no-review process &#8212; I'm saying not all code deserves the same depth of review. Some code gets a skim. Some code gets every line read. The skill is knowing which is which.</p><h2>The Review Bottleneck Nobody Wants To Admit</h2><p>Here's a dirty secret. Code is being written way WAY faster than it can possibly be reviewed by a human.</p><p><em>Teams with high AI adoption merged 98% more PRs, but PR review time increased 91%.</em></p><p>Faros AI analyzed telemetry across 10,000+ developers and confirmed this. You're producing 2x the output but reviews take 2x as long. And that's before parallelization &#8212; engineers running 3&#8211;5 sessions at once across worktrees are generating multiple streams at once.</p><p>Teams that used to push out 10 PRs a week are now staring at 50&#8211;100. If your code review stays as "carefully read everything line by line" while Claude turns every engineer into a PR production factory, your org becomes a firehose with a human-sized funnel. Something needs to change.</p><h2>My Proposed Solution</h2><p>Tiered review systems.</p><p><strong>Tier 1:</strong> fully automated &#8212; linting, static analysis, unit tests, security scanning, type checking. No human involved.</p><p><strong>Tier 2:</strong> peer review for behavior, correctness, and "does this match the intent?"</p><p><strong>Tier 3:</strong> senior/security review for critical paths &#8212; auth, payments, PII, system boundaries. Most changes should never need Tier 3.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qHti!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61ed549-b75e-47c3-94d2-78a793d4a47d_1200x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qHti!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61ed549-b75e-47c3-94d2-78a793d4a47d_1200x720.png 424w, https://substackcdn.com/image/fetch/$s_!qHti!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61ed549-b75e-47c3-94d2-78a793d4a47d_1200x720.png 848w, https://substackcdn.com/image/fetch/$s_!qHti!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61ed549-b75e-47c3-94d2-78a793d4a47d_1200x720.png 1272w, https://substackcdn.com/image/fetch/$s_!qHti!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61ed549-b75e-47c3-94d2-78a793d4a47d_1200x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qHti!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61ed549-b75e-47c3-94d2-78a793d4a47d_1200x720.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e61ed549-b75e-47c3-94d2-78a793d4a47d_1200x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Most code gets a skim &#8212; only the dangerous code gets every line read.&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="Most code gets a skim &#8212; only the dangerous code gets every line read." title="Most code gets a skim &#8212; only the dangerous code gets every line read." srcset="https://substackcdn.com/image/fetch/$s_!qHti!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61ed549-b75e-47c3-94d2-78a793d4a47d_1200x720.png 424w, https://substackcdn.com/image/fetch/$s_!qHti!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61ed549-b75e-47c3-94d2-78a793d4a47d_1200x720.png 848w, https://substackcdn.com/image/fetch/$s_!qHti!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61ed549-b75e-47c3-94d2-78a793d4a47d_1200x720.png 1272w, https://substackcdn.com/image/fetch/$s_!qHti!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61ed549-b75e-47c3-94d2-78a793d4a47d_1200x720.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Every layer should have AI-assisted review. And here's the key insight &#8212; <a href="https://alextong.me/newsletter/notes/two-claudes-code-review">don't let your agent grade its own homework</a>. A separate subagent will catch semantic issues before the code ever reaches human eyes &#8212; in under a minute. Always start a fresh session to review your code.</p><h2>Guardrails Become The Product</h2><p>So, if we stop reading everything line by line &#8212; and I'm saying that we should &#8212; then guardrails stop being nice-to-haves and start becoming must-haves. They become the actual real task that you need to do. AI in its current state has a lot of its faults. It can silently insert defaults, it can name things badly without proper context from you, it can drift from instructions, it can also hallucinate completely once your context is too bloated. So you're going to need guardrails to catch these.</p><p>When I say guardrails, I'm talking about tests. You're going to need way more test coverage than most production companies actually have. You need critical testing, integration testing, end-to-end testing, regression tests for every single bug that you find. Your tests become the contract of your task. But is there a problem with also using AI to generate tests too?</p><p>Why yes, of course. So test quality also needs close review, especially for critical ones. Using something like a coverage helper can totally be gamed by AI. What matters is that your tests prove that what could be a dangerous piece of code actually works correctly. You should probably create a test for every production incident that happens. Similar to Thoriq's advice &#8212; one of the principal engineers at Anthropic &#8212; you should always be telling Claude about your bugs that you run into and your gotchas. You probably should also be having security checks running on every PR in your GitHub workflows.</p><p>Architecture Decision Records also become super important. Your CLAUDE.md is kind of already a lightweight version of this. The teams that I've seen getting the most out of Claude treat CLAUDE.md as a living document. Every time a mistake is noticed, they update their CLAUDE.md file. That CLAUDE.md file becomes institutional memory &#8212; a compounding record of all lessons learned. Observability gets way more important too with this approach. Telling Claude how to read your logs, tracings, metrics, and alerts will just make this entire workflow work way smoother. If it's very well documented and it's clear what it's examining, you'll know when there are bugs and when to fix them and how to fix them.</p><p>This also changes how junior engineers learn &#8212; but that's a whole other conversation, and <a href="https://alextong.me/newsletter/notes/claude-junior-engineering-jobs">I've since written about it here</a>. Short version: the apprenticeship isn't dead, it just looks different now.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!61BZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf8bf5c-360e-49e4-a79c-4f0e1250464c_1400x931.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!61BZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf8bf5c-360e-49e4-a79c-4f0e1250464c_1400x931.jpeg 424w, https://substackcdn.com/image/fetch/$s_!61BZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf8bf5c-360e-49e4-a79c-4f0e1250464c_1400x931.jpeg 848w, https://substackcdn.com/image/fetch/$s_!61BZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf8bf5c-360e-49e4-a79c-4f0e1250464c_1400x931.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!61BZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf8bf5c-360e-49e4-a79c-4f0e1250464c_1400x931.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!61BZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf8bf5c-360e-49e4-a79c-4f0e1250464c_1400x931.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/acf8bf5c-360e-49e4-a79c-4f0e1250464c_1400x931.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;i like dogs and cats, dont worry&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="i like dogs and cats, dont worry" title="i like dogs and cats, dont worry" srcset="https://substackcdn.com/image/fetch/$s_!61BZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf8bf5c-360e-49e4-a79c-4f0e1250464c_1400x931.jpeg 424w, https://substackcdn.com/image/fetch/$s_!61BZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf8bf5c-360e-49e4-a79c-4f0e1250464c_1400x931.jpeg 848w, https://substackcdn.com/image/fetch/$s_!61BZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf8bf5c-360e-49e4-a79c-4f0e1250464c_1400x931.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!61BZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf8bf5c-360e-49e4-a79c-4f0e1250464c_1400x931.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>TLDR: What I'd Actually Do Next Week</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Thl4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e18ddf-40ba-4472-bffc-79a20b31e08d_220x179.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Thl4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e18ddf-40ba-4472-bffc-79a20b31e08d_220x179.png 424w, https://substackcdn.com/image/fetch/$s_!Thl4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e18ddf-40ba-4472-bffc-79a20b31e08d_220x179.png 848w, https://substackcdn.com/image/fetch/$s_!Thl4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e18ddf-40ba-4472-bffc-79a20b31e08d_220x179.png 1272w, https://substackcdn.com/image/fetch/$s_!Thl4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e18ddf-40ba-4472-bffc-79a20b31e08d_220x179.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Thl4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e18ddf-40ba-4472-bffc-79a20b31e08d_220x179.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c5e18ddf-40ba-4472-bffc-79a20b31e08d_220x179.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;yep&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="yep" title="yep" srcset="https://substackcdn.com/image/fetch/$s_!Thl4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e18ddf-40ba-4472-bffc-79a20b31e08d_220x179.png 424w, https://substackcdn.com/image/fetch/$s_!Thl4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e18ddf-40ba-4472-bffc-79a20b31e08d_220x179.png 848w, https://substackcdn.com/image/fetch/$s_!Thl4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e18ddf-40ba-4472-bffc-79a20b31e08d_220x179.png 1272w, https://substackcdn.com/image/fetch/$s_!Thl4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e18ddf-40ba-4472-bffc-79a20b31e08d_220x179.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Cap your PRs at ~400 lines or so.</strong> Enforce this on GitHub. Only allow overrides if someone explicitly tries to override, which also alerts your team.</p><p><strong>Create a risk tier rubric.</strong> Automate low-risk PRs. High-risk PRs &#8212; the ones that might modify user data or auth &#8212; require senior eyes and targeted diff reading.</p><p><strong>Require a thorough PR summary.</strong> PR summaries are probably the most important artifact now. I'll be writing a separate article on this, so look out for it.</p><p><strong>Make automated checks mandatory.</strong> Type checking, security scans, test coverage. All of this must be a requirement now. Not nice-to-have. No exceptions.</p><p><strong>Set up AI review during development, not just after it hits GitHub.</strong> Get into the habit of spawning a new AI agent to review your code after you write it on your own terminal. Look into using Claude's new /simplify command. Don't ever let your agents grade their own homework.</p><p><strong>Document your rules so Claude can read them.</strong> Put CLAUDE.md files in every single repo with more in-depth rules in the .claude/rules folder. When Claude makes a mistake, always update these files.</p><p><strong>Track your PR review queue.</strong> Start putting metrics around how long PRs take to review. This is where the bottleneck shows up first &#8212; and you should have good observability on it.</p><h2>The Bottom Line</h2><p>The role is shifting from "write code, review code" to "design thorough Jira ticket work, translate tickets into concise yet thorough prompts, define your guardrails, and then verify the outcome."</p><p>This isn't a con &#8212; it's a huge upgrade. But only if you earn it with the correct infrastructure. So stop reading every line of code by default. But don't confuse that with trusting everything Claude says blindly. You need to trust the guardrails, the tests, the gates. Human judgment should come in for things that only humans can judge &#8212; like product requirements, for example &#8212; and make sure you're still applying human judgment at the boundaries where the real damage happens.</p><p>So don't stop reviewing. Just stop reviewing everything the same way you've been doing your whole life.</p><p><em>I've been a software engineer for more than half a decade at both Amazon and The New York Times, recently using Claude extensively in production workflows. These are observations from the trenches, not theoretical predictions. The shift is already happening &#8212; prepare yourselves!</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.alextong.me/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>