<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Lee Tsai — Writing</title>
    <subtitle>Notes and essays on engineering leadership, strategy, and building.</subtitle>
    <link href="https://leetsai.org/blog/feed.xml" rel="self"/>
    <link href="https://leetsai.org/blog/"/>
    <updated>2026-09-26T00:00:00Z</updated>
    <id>https://leetsai.org/blog/</id>
    <author>
        <name>Lee Tsai</name>
    </author>
    <entry>
        <title>My Second Brain, as a Globe</title>
        <link href="https://leetsai.org/blog/second-brain-globe/"/>
        <updated>2026-09-26T00:00:00Z</updated>
        <id>https://leetsai.org/blog/second-brain-globe/</id>
        <summary>Months of my notes, drawn from their links alone, and what I found when I checked how private they really are.</summary>
        <content type="html"><![CDATA[<p>I've been building a personal second brain for months now. Here's a visualization of it.</p>
<div style="margin:1.5rem 0"><iframe src="/blog/second-brain-globe/globe" title="A spinning globe of notes and the links between them" style="width:100%;height:clamp(460px,120vw,660px);border:0;border-radius:12px" loading="lazy"></iframe></div>
<p class="lift">I want to own this. I <em>should</em> own this. It's my information, after all.</p>
<p>Yes, Claude knows a lot about me, but we should have agency over our information. I want it created a certain way, I want to use it in some situations and not in others, and most of all, I shouldn't be spooked by how much information about me is out there.</p>
<p>With this setup, my knowledge lives in plain text files in a folder on my own machine. I separate public from private.</p>
<aside class="note">Like a Pensieve in the Potterverse, there are certain pockets that Claude has to ask my permission to access. It's not perfect, but asking first means less of it goes back to Anthropic's servers.</aside>
<p>With the latest Muse rollout, I used Claude side by side with Muse, where my agent is named Atticus, and my gates of not sharing my information held. Claude reads my vault, and Atticus only got counts, links and broad labels for the clusters, never the full content. The globe above is that same view.</p>
<p>I've been able to unlock a different level of automating tasks using different agents, and this setup has reduced the lock-in effect over something we should have complete domain agency over.</p>
<p>Admittedly, every <code>.md</code> Claude reads goes to Anthropic to be processed, so my setup is currently gating information by my permission to access certain knowledge bases. And of course, the model training toggle is off, along with the geo metadata collection.</p>
<p class="lift">Unfortunately, deleting a local <code>.md</code> doesn't take back what an agent already read.</p>
<p>Claude Code keeps its own session logs on my Mac, and Muse keeps its own history of everything I've said to Atticus.</p>
<p>The Claude Code app on my Mac enforces those permissions before the model sees the contents, though a broad search across the vault could still reach in. The personal details it used to load in every session, like my phone number, now live in one of those pockets and get read only when a task needs them.</p>
<p class="pause" aria-hidden="true">· · ·</p>
<p class="lift">The files are still mine, and I'm still tightening how much of them each agent gets to see.</p>
<p>Perhaps it's time to take the plunge and run an open-weight LLM on my own machine. More to come, but this is an early share as the next two weeks get hectic.</p>
]]></content>
    </entry>
    <entry>
        <title>Below the Abstraction</title>
        <link href="https://leetsai.org/blog/below-the-abstraction/"/>
        <updated>2026-09-04T00:00:00Z</updated>
        <id>https://leetsai.org/blog/below-the-abstraction/</id>
        <summary>Don&#39;t be Jared in the driverless car. Patt and Patel on abstraction, 2001, read with an LLM in mind.</summary>
        <content type="html"><![CDATA[<p><em>This one's for my peers who feel as conflicted using AI as I sometimes do, and for anyone questioning why they're still learning how to program. There's always a place for understanding the layers below.</em></p>
<p>Remember that scene from <em>Silicon Valley</em> where Jared gets into a driverless car? He thought he was going to Palo Alto, but he ended up in a shipping container on its way to Arallon.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin:1.5rem 0"><iframe src="https://www.youtube-nocookie.com/embed/ECsCK7Pxakw" title="Silicon Valley: Jared and the driverless car" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen loading="lazy"></iframe></div>
<p>Don't be like that with your AI.</p>
<p>Nine months ago, that was me. Minus the ocean crossing, but not by much.</p>
<p>If you find yourself asking your AI to &quot;please fix it,&quot; or &quot;go build it,&quot; or &quot;do what X, Y and Z would do,&quot; I hope you read on. I was hacking away, asking my AI to build so, so many things. I've abandoned many of them. I've reworked a few of the remainders.</p>
<p>Yesterday I was doing the reading for a grad course I'm taking, and I hit this paragraph in Patt and Patel's <em>Introduction to Computing Systems</em>:</p>
<blockquote>
<p><strong>The Bottom Line</strong></p>
<p>Abstractions allow us to be much more efficient in dealing with all kinds of situations. It is also true that one can be effective without understanding what is below the abstraction as long as everything behaves nicely. So, one should not pooh-pooh the notion of abstraction. On the contrary, one should celebrate it since it allows us to be more efficient.</p>
<p>In fact, if we never have to combine a component with anything else into a larger system, and if nothing can go wrong with the component, then it is perfectly fine to understand this component only at the level of its abstraction.</p>
<p>But if we have to combine multiple components into a larger system, we should be careful not to allow their abstractions to be the deepest level of our understanding. If we don't know the components below the level of their abstractions, then we are at the mercy of them working together without our intervention. If they don't work together, and we are unable to go below the level of abstraction, we are stuck. And that is the state we should take care not to find ourselves in.</p>
</blockquote>
<p>They wrote that in 2001. The book walks you up from 0's and 1's, through gates and a little instruction set, through assembly, to C. They were talking about circuits. Read it again with an LLM in mind and it still holds, 25 years later.</p>
<p>You can be effective with an LLM without understanding what's under it, as long as everything behaves nicely, and you should celebrate that. But once you combine components into a larger system (agents calling tools, pipelines feeding pipelines, generated code you never read), the model's output becomes the deepest level of your understanding. When the components stop working well together, you can't go a level down. And that's a problem.</p>
<h2>What &quot;below the abstraction&quot; means when AI owns the layers and you'd rather not open the box</h2>
<p>For Patt and Patel it meant knowing the bits, the gates, the instruction set, and the assembly underneath. For an LLM, a layer below is the code it wrote, so being able to read code is being able to go down the layers of abstraction. For me, in 2026, it means three things, and the first one is the precondition for the other two.</p>
<ol>
<li>
<p><strong>Know what &quot;behaves nicely&quot; means for the thing you asked for.</strong> Your why and your what. The how is what you bought the abstraction for. But if you can't say why a thing exists and what it's supposed to do, you'll never notice when it stops behaving. Neither will the model.</p>
</li>
<li>
<p><strong>Every decision your AI makes either goes through you, or gets audited and reviewed by you.</strong> Some of mine are pre-approved by design: a queue of tickets I've explicitly marked as safe to work overnight. Some I review after the fact. The ones I worry about are the decisions that were neither, and I try to keep that bucket empty. Over the past several months I've worked through about 400 Linear stories and hundreds of pull requests. I've reviewed about half of those PRs myself.</p>
</li>
<li>
<p><strong>Have the paper trail.</strong> Breadcrumbs to follow, so when something breaks you can trace back to exactly what happened and at which layer. There's no magic here. Just abstractions upon abstractions, like how it was when the first computer came to life.</p>
</li>
</ol>
<p>The most useful thing I built for this is a team of falsifier skills. Their job is to tell me why certain things shouldn't be done, or how things could go wrong. They speak the truth because they're built that way, to make sure what's built continues to work properly. One of them recently challenged a new idea I was excited about and told me I realistically don't have the time to pursue it. Like what a best friend would say to you. I burn tokens on understanding why as much as I use them to build.</p>
<h2>How I'll know if I've slipped</h2>
<p>Two questions, for any system I've handed to the AI:</p>
<ol>
<li>Can I say, without looking it up, why something &quot;I&quot; built exists and what it's for?</li>
<li>When my system breaks, can I trace what happened, layer by layer, back to the decision that caused it?</li>
</ol>
<p>If either answer is no, then call me Jared! The &quot;reviewed about half&quot; number is the one I watch. If it drops toward zero while the PR count keeps climbing, then the abstraction has become the deepest level of my understanding, and I'm at the mercy of the components working together without me.</p>
<p>Patt and Patel wrote a timeless book. They were writing about transistors and circuits, and 25 years later it gave me a grounded way to have my cake and eat it too: keep my abstractions, and still know the way down, even if I never make it all the way to the 0's and 1's.</p>
<p>How far down the stack can you still go?</p>
]]></content>
    </entry>
</feed>
