Irrational Exuberancehttps://lethain.com/Recent content on Irrational ExuberanceHugo -- gohugo.ioen-usWill LarsonSun, 25 Jan 2026 13:00:00 -0700Should you include engineers in your leadership meetings?https://lethain.com/should-include-eng-in-eng-leadership/Sun, 25 Jan 2026 13:00:00 -0700https://lethain.com/should-include-eng-in-eng-leadership/<p>While <em><a href="https://staffeng.com/">Staff Engineer</a></em> was first and foremost an attempt to pull the industry towards my perspective on staff-plus engineering roles, writing it also changed my opinions in a number of ways. Foremost, it solidified my belief that the industry too often treats engineers like children to be managed, rather than adults to be involved, and that I needed to change some of my own leadership practices that I&rsquo;d inadvertently adopted.</p> <p>When I started writing it, I had already shifted my opinion about reporting hierarchy, believing that it was important to have engineers reporting directly to senior leaders rather than reporting to leaf managers. But I hadn&rsquo;t gone the whole distance to include them in my core leadership meeting. However, for the last six years I have had active engineers in my senior-most leadership group, I&rsquo;m glad that I&rsquo;ve adopted this practice, and I intend to continue it going forward.</p> <h2 id="mechanics">Mechanics</h2> <p>The core approach here is:</p> <ol> <li>Have a weekly meeting with my directs and key cross-functional partners. For example, at Stripe, this was my direct reports, our HRBP, and the recruiter we worked with most closely.</li> <li>Elevate a small number of senior-most engineers to report to me directly as Head of Engineering / CTO, who then naturally start to join that weekly meeting</li> <li>Everyone is included in all discussions, e.g. there are no managerial discussions that the engineers are excluded from unless there&rsquo;s a very specific reason (e.g. excluding engineers from a performance calibration meeting for their peers at the same level)</li> <li>If anyone violates the meeting&rsquo;s trust, whether they are an engineer or a manager, they get in a lot of trouble</li> </ol> <p>This is a simple formula, but has worked well for me the past decade. There absolutely are topics that some people don&rsquo;t care about too much, but I try to push my leadership team to care widely, even if things don&rsquo;t impact them directly.</p> <h2 id="upsides">Upsides</h2> <p>It&rsquo;s easy for managers to get into a mode where they are managing the stuff around reality, without managing reality itself. That is much harder when engineers who write and maintain the company&rsquo;s software are in the room, which is the biggest benefit of including them. Similarly, there are many decisions and discussions that would have to be punted to another forum without effective engineering representation in the room. You might not be able to finalize the technical approach to a complex problem with only a few engineers in the room, but you can at least evaluate the options much further.</p> <p>Another major benefit is that these engineers become a second propagation mechanism for important context. Sometimes you&rsquo;ll have a manager who isn&rsquo;t communicating effectively with their team, and while long-term that has to be solved directly, having these engineers means that information can flow down to their teams through the engineers instead.</p> <p>Finally, this sets an expectation for the managers in the room that they should be in the details of the technical work, just as the engineers in the room should understand the managerial work.</p> <h2 id="downsides">Downsides?</h2> <p>There are relatively few downsides to this approach, but it does serve as a bit of a filter for folks who have a misguided view of what senior leadership entails. For example, there are some engineers who think senior leadership is having veto power over others without being accountable for the consequences of that veto. Those folks don&rsquo;t survive long in this sort of meeting. Some would argue that&rsquo;s a downside, but I wouldn&rsquo;t.</p> <hr> <p>While I can conceive of working in some future role where I am simply <em>not allowed</em> to implement this pattern, I really can&rsquo;t otherwise imagine not following it. It&rsquo;s just been transformative in better anchoring me in the actual work we do as engineers, rather than the &ldquo;work around work&rdquo; that is so much of management.</p>Writing Visualizations with Remotionhttps://lethain.com/blog-recap-2026/Sun, 25 Jan 2026 12:00:00 -0700https://lethain.com/blog-recap-2026/<p><a href="https://www.remotion.dev/">Remotion</a> is having a bit of a moment at the moment, and I decided to play around with the <a href="https://www.remotion.dev/docs/ai/claude-code">Claude Code integration</a>. Here are a couple videos I was able to make in &lt;10 minutes summarizring data on my blog.</p> <p>First, here is published posts over time. I had Claude write some scripts to generate this dataset, and then did a series of prompts to get the right visual. It was pretty straightforward, worked well, and I imagine I could have gotten to the right video much faster if I&rsquo;d had a clearer destination when I started.</p> <video controls width="100%"> <source src="https://lethain.com/static/blog/2026/BlogPostsChart.mp4" type="video/mp4"> </video> <p>Second, here&rsquo;s a video of showing the published blog posts over time, my most frequently used tags at that point in time, and how many posts I published at each employer along the way.</p> <video controls width="100%"> <source src="https://lethain.com/static/blog/2026/BlogPostsTimeline.mp4" type="video/mp4"> </video> <p>Altogether, this was a really fascinating to see how effectively Claude and Remotion together were able to generate fairly complex videos. This is definitely something I could imagine using again.</p>Curiosity is the first-step in problem solving.https://lethain.com/curiosity-first-step-problem-solving/Sun, 25 Jan 2026 10:00:00 -0700https://lethain.com/curiosity-first-step-problem-solving/<p>Despite my best efforts, I have been wrong a lot over the years. I&rsquo;ve been wrong about technology patterns (in 2014, I thought microservices would take over the world), I&rsquo;ve been wrong about management techniques (I used to think systems thinking was <em>the</em> ultimate technique, but I&rsquo;ve <a href="https://lethain.com/how-to-safely-think-in-systems/">seen so many mistakes rooted in over-reliance on systems thinking</a>), and a bunch of other stuff as well.</p> <p>Early on, I spent a lot of time thinking about how to be wrong less frequently. That&rsquo;s a noble endeavor, and one I still aim to improve at today. However, a lot of the problems you encounter later in your career are <a href="https://lethain.com/navigating-ambiguity/">deeply ambiguous</a>, and it simply isn&rsquo;t possible to eliminate bad outcomes. Some examples of this are:</p> <ol> <li>Hiring is always a probabilistic endeavor. Even the best hires can struggle in a given company/role or have a life-changing event that leads to poor fit</li> <li>The 2020 pandemic broke many business models that were doing extremely well before then. Similarly, many companies overindexed on the shifts online driven by the pandemic, overhiring in ways that resulted in significant long-term harm to those companies</li> <li>Pursuing data locality for your product: there&rsquo;s always a cost or capability consequence when you shard your data model more finely across geopolitical regions, and geopolitical regions shift frequently and surprisingly. No matter how accurate your original guess is about the next two years of data locality changes, you will be wrong if you&rsquo;re operating in enough countries</li> </ol> <p>In every one of those examples, you know upfront that you simply don&rsquo;t have all the information you&rsquo;d like to have, and still need to make a decision to move forward. As a result, these days I spend far more time thinking about how to make being wrong <strong>cheap</strong> rather than how to <strong>avoid</strong> being wrong.</p> <p>Of everything I&rsquo;ve tried, demonstrating curiosity is consistently the best technique I&rsquo;ve found to reduce the cost of being wrong. These days, if I regret being wrong about something, it&rsquo;s almost always because I engaged in problem solving before exercising curiosity. I feel this so strongly that &ldquo;curiosity is the first step of problem solving&rdquo; has become a steadfast engineering value in the organizations that I lead.</p> <p>Some examples of demonstrating curiosity well and poorly:</p> <ol> <li> <p>Someone thinks we shouldn&rsquo;t hire someone that I&rsquo;ve worked with closely.</p> <p><strong>(Bad)</strong> Assume they are wrong.</p> <p><strong>(Good)</strong> Explain your mental model of why you think the candidate would work well, and ask them where they do or don&rsquo;t agree with that mental model.</p> <p><strong>(Best)</strong> Spend time upfront aligning with interviewers on the specific fit you&rsquo;re focused on for this specific role.</p> </li> <li> <p>Someone is asking for help logging into an internal dashboard where the internal login steps are extensively documented in your internal wiki.</p> <p><strong>(Bad)</strong> Get slightly snippy with them about not reading the documentation.</p> <p><strong>(Good)</strong> Ask them if they are running into something that isn&rsquo;t covered by the documentation.</p> <p><strong>(Best)</strong> Replace this with a chat bot that uses the <strong>(Good)</strong> approach automatically instead of having a human do this.</p> </li> <li> <p>Someone proposes introducing a new programming language for your internal stack.</p> <p><strong>(Bad)</strong> Tell them that they need to follow the existing architecture document.</p> <p><strong>(Good)</strong> Mention that this seems in conflict with the current architecture doc, and ask them how they&rsquo;re thinking about that conflict.</p> <p><strong>(Best)</strong> Make sure new-hire onboarding includes links to those materials, and create an LLM-driven RFC reviewer that directs RFC writers to existing materials they should reference in their RFC.</p> </li> <li> <p>Someone doesn&rsquo;t show up for an incident that they are on-call for.</p> <p><strong>(Bad)</strong> Tell them they failed to meet on-call expectations.</p> <p><strong>(Good)</strong> Ask them what happened that led them to missing their on-call expectations.</p> <p><strong>(Best)</strong> Create automation to ensure folks going on-call are notified ahead of time, and to detect anyone going on-call whose notification mechanisms aren&rsquo;t appropriately configured.</p> </li> </ol> <p>In each of these cases, showing curiosity is not about being unwilling to hold folks accountable, and it&rsquo;s not about consensus-based decision making. Instead, it&rsquo;s starting each discussion by leaving space for the chance that you&rsquo;re missing important information. Often you&rsquo;re not missing information, and then the next step <em>is</em> to hold folks accountable, but demonstrating curiosity helps you avoid applying accountability without context, which damages relationships without providing any benefit.</p>Stripe's Lighthouse Hiring pattern.https://lethain.com/lighthouse-hiring/Sun, 25 Jan 2026 09:00:00 -0700https://lethain.com/lighthouse-hiring/<p>I did a lot of hiring at Uber, some days I would be doing back-to-back 30 minute phone screens for several hours in a row. That said, while Uber taught me how to hire at scale, it was Stripe that taught me how to hire creatively.</p> <p>Some of that was learning the fundamental mechanics like <a href="https://lethain.com/cold-sourcing/">how to cold source</a>, optimizing <a href="https://lethain.com/hiring-funnel/">hiring funnels</a>, and designing <a href="https://lethain.com/designing-interview-loops/">interview loops</a>, but Stripe had some fairly unique ideas that I haven&rsquo;t heard discussed much elsewhere. One of those was Stripe&rsquo;s <a href="https://stripe.com/blog/bring-your-own-team">Bring Your Own Team</a> (BYOT) concept, which invited teams to apply together as a sort of light-weight acquihire approach.</p> <div class="ba b--light-gray"> <p><img src="https://lethain.com/static/blog/2026/stripe-byot.png" alt="Screenshot of Stripe&rsquo;s BYOT blog post"></p> </div> <p>The BYOT approach captured folks&rsquo; attention, but it was ultimately more effective as an idea showing Stripe&rsquo;s originality rather than as a hiring practice. By the point that I left, zero teams had been hired through the BYOT mechanism, although we did talk to some. On the other hand, one of the hiring ideas that Stripe didn&rsquo;t blog about publicly, but worked extremely well in practice, is the idea of Lighthouse Hiring.</p> <p>Lighthouse Hiring is the idea that hiring well-connected folks makes subsequent hires both easier and higher quality. Sure, hiring those well-known folks is difficult, but if you&rsquo;re trying to hire ten great people, then spending more time hiring one &ldquo;lighthouse hire&rdquo; can improve the quality and velocity of the overall hiring push.</p> <p>A few examples of Stripe&rsquo;s lighthouse hiring:</p> <ul> <li><a href="https://jvns.ca/">Julia Evans</a> is one of the best known tech writers, undoubtedly the best known tech zine artist, and a prolific organizer of interesting projects and conferences. Julia&rsquo;s presence at Stripe was a core piece of my cold sourcing email for years</li> <li><a href="https://avibryant.com/">Avi Bryant</a>, who wrote the BYOT blog post, was a well-known and well-connected data engineer, and was the connection point to many Stripe hires from both data ecosystem and out of Twitter</li> <li><a href="https://medium.com/@emdashry">Raylene Yung</a> was an early engineering leader at Facebook, and extremely well connected in the tech ecosystem. She was the first contact point for a tremendous number of hires out of Facebook and the broader tech ecosystem</li> </ul> <p>There are many other examples you could pick from, and importantly not all of them are widely-known, just widely-connected. Julia is a tech internet mainstay, but Raylene operated more from personal networks rather than social media networks. Any sort of high quality network can be the underpinning of a successful lighthouse hire.</p> <p>This mechanism worked exceptionally well, but there is a complex underside to Lighthouse Hires: strong networks, particularly publicly visible networks, create a complex power dynamic that some managers can struggle to navigate. If you&rsquo;re relying on a public personality, and they get frustrated at work, then your lighthouse hiring strategy is going to implode on you. Similarly, hiring them to begin with can be a challenge if you don&rsquo;t have an interesting role, but carving out a uniquely interesting role for one hire will come across as biased internally, undermining your relationship with the broader team.</p> <p>These are all navigable, and I think Stripe would have been less successful if it hadn&rsquo;t used this pattern, but it takes some nuance to deploy effectively.</p>Pressure Without a Plan.https://lethain.com/pressure-without-a-plan/Sun, 25 Jan 2026 08:00:00 -0700https://lethain.com/pressure-without-a-plan/<p>When we <a href="https://lethain.com/digg-v4/">launched Digg v4</a>, the old site turned off, but the new site didn&rsquo;t turn on. There was a lot of pressure to get things working, but no one knew what to do about it. It took almost a month to get it wholly functioning. It was not a pleasant month, with many false starts while we tried to dig out of launching an unfinished, desperate product.</p> <p>That launch was a foundational early career experience for me. However, it was not a unique one, as many leaders inject that sort of pressure into their teams as a routine management technique. Some examples of the pressure without a plan pattern that I&rsquo;ve seen:</p> <ol> <li> <p>The aforementioned Digg V4 launch was pressure without a plan in two ways. First, a fixed launch date was set to motivate engineering, but we had no clear mechanism to launch on that date. Fixing things after the launch was pressure without a plan as well.</p> </li> <li> <p><a href="https://lethain.com/uber-service-migration-strategy/">Uber&rsquo;s service migration</a> had a well-defined platform as the <em>destination</em> for things removed from the Python monolith, but initially did not have a clear plan for leaving the monolith other than escaping the top-down pressure.</p> <p>Pressure without a plan is almost the defining characteristic of 2010s era service decomposition projects. Calm and Carta&rsquo;s initial approaches had some elements of this as well, which is why I ended up quickly pausing both after joining.</p> </li> <li> <p>Metrics-only AI adoption at many companies falls into this bucket, with a focus on chiding non-participation without understanding the reasons behind the non-participation. (At Imprint, we&rsquo;ve tried hard <a href="https://lethain.com/company-ai-adoption/">to go the other direction</a>.)</p> </li> </ol> <p>Pressure itself is often useful, but pressure without a plan is chaos, unless your team has an internal leader who knows how to reshape that energy into pressure with a plan. Your aspiration as a leader should be to figure out how to become that internal leader.</p> <p>Being that person is not only the best way to help your team succeed (convincing folks who love &ldquo;pressure without a plan&rdquo; not to use it is&hellip; hard), it&rsquo;s also some of the most interesting work out there. <em>Crafting Engineering Strategy</em>&rsquo;s chapter on <a href="https://lethain.com/testing-strategy-iterative-refinement/">strategy testing</a> is my approach to iteratively refining a plan <em>before</em> committing to its success, and how I&rsquo;ve learned to turn &ldquo;pressure without a plan&rdquo; into a situation that makes sense.</p> <p>As an ending aside, I think the origin of this pattern is the misapplication of <a href="https://en.wikipedia.org/wiki/Management_by_objectives">management by objectives</a>. The theory of management by objectives is that the executing team is involved in both defining the goal and the implementation. That sounds good, almost what <em><a href="https://www.amazon.com/Escaping-Build-Trap-Effective-Management/dp/149197379X">Escaping the Build Trap</a></em> recommends. However, in practice it&rsquo;s very common to see executives set targets, and then manage a low-agency team to hit those goals which the team believes are impossible, which leads very precisely to the &ldquo;pressure without a plan&rdquo; pattern.</p>Learning from Every's Compound Engineeringhttps://lethain.com/everyinc-compound-engineering/Mon, 19 Jan 2026 10:00:00 -0700https://lethain.com/everyinc-compound-engineering/<p>One of the relatively few AI-native products I use is <a href="https://cora.computer/">Cora.computer</a> which summarizes my personal inbox. It&rsquo;s not perfect, but it&rsquo;s done a much better job than my collection of filters at managing the ever-growing onslaught of spam and unsolicited email that flows in.</p> <p>I&rsquo;ve run into a few issues with Cora, which ended up in me following folks at <a href="https://every.to/">Every</a> to report the issues, and more recently this led me to see their work on <a href="https://every.to/chain-of-thought/compound-engineering-how-every-codes-with-agents">compound engineering</a> and specifically the <a href="https://github.com/EveryInc/compound-engineering-plugin/">compound-engineering-plugin</a>.</p> <div class="ba b--light-gray"> <p><img src="https://lethain.com/static/blog/2026/compound-eng.png" alt="Screenshot of EveryInc&rsquo;s Compound Engineering summary"></p> </div> <p>Compound Engineering is two extremely well-known patterns, one moderately well-known pattern, and one pattern that I think many practitioners have intuited but have not found a consistent mechanism to implement. Those patterns are:</p> <ol> <li> <p><strong>Plan</strong> is decoupling implementation from research. This is well understood, e.g. Claude&rsquo;s plan mode, although it can certainly be done better or worse by being more specific about which resources to consult (specs, PRDs, RFCS, issues, etc)</p> </li> <li> <p><strong>Work</strong> is implementing a plan. This is well understood, and the core of agentic coding. Again, this can be done better or worse, but much of that depends more on the quality of your codebase, tests, and continuous integration harness than the agent itself</p> </li> <li> <p><strong>Review</strong> is asking the agent to review the changes against your best-practices, and identify ways it could be improved. I think most practitioners have <em>some</em> version of this, but standardization is low, even within a given company.</p> </li> <li> <p><strong>Compound</strong> is asking the agent to summarize its learnings from a given task into a well-defined, structured format (basically a wiki) which is consulted by future iterations of the <strong>plan</strong> pattern. This interplay between the <strong>compound</strong> and <strong>plan</strong> steps creates the compounding mechanism.</p> <p>Many practitioners are implicitly compounding, but it&rsquo;s often done manually through their own work. For example, I&rsquo;d often ask the agent to update our <code>AGENTS.md</code> or skills based on a specific problem encountered in a task, but it required my active attention to notice the issue and suggest incorporation.</p> </li> </ol> <p>Taken together, these four steps <em>are not</em> shocking but <em>are</em> an extremely effective way to convert these intuited best-practices into something specific, concrete, and largely automatic within a company by adding a few commands (e.g. <code>workflow:plan</code>, <code>workflow:review</code>, &hellip;) and updating your <code>AGENTS.md</code> to instruct the agent when and how to use those commands.</p> <p>Implementing within Imprint&rsquo;s frontend and backend monorepos was straightforward, taking about an hour. Most of this was iterating on the last mile of details, for example we want our plans in <code>.claude/plan-*.md</code> format to match our existing <code>.gitignore</code> pattern, and none of it was complex. Most importantly, this frees up a topic that many of our engineers (including me) were trying to find a standard approach. Now we have one, and can move on to the next problem.</p> <p>If recent history is our guide, it&rsquo;s a solid guess that many of the practices in compound engineering will get absorbed into the Claude Code and Cursor harnesses over the next couple of months, at which point using these techniques explicitly will be indistinguishable from folks who are entirely unaware they&rsquo;re using them. But we&rsquo;ll see. Until then, this is a cheap, useful experiment that you can implement in an hour.</p>Sharing Claude transcripts.https://lethain.com/sharing-claude-transcripts/Sat, 10 Jan 2026 07:15:00 -0800https://lethain.com/sharing-claude-transcripts/<p>One of my central premises for supporting <a href="https://lethain.com/company-ai-adoption/">internal adoption of LLMs</a> is that adoption depends on easy discovery of what&rsquo;s possible and what&rsquo;s good. That is why our internal prompts driving agents are stored in a shared Notion database, but it also begged the question: our most advanced prompting and interactions are happening in Claude Code, which are hard to see.</p> <p>Thankfully, Simon Willison previously wrote <a href="https://simonwillison.net/2025/Dec/25/claude-code-transcripts/">a tool to extract transcripts from Claude Code</a> called <a href="https://github.com/simonw/claude-code-transcripts"><code>claude-code-transcripts</code></a>, which we were able to wire together into an internal repository of Claude Code sessions and a viewer on Cloudflare pages (and behind Cloudflare authentication into our SSO).</p> <p>There are three components here. First, an index of all the pages.</p> <div class="ba b--light-gray"> <p><img src="https://lethain.com/static/blog/2026/claude-sessions-index.png" alt="Claude Sessions index showing transcript archive with contributors and sessions"></p> </div> <p>That page links into the transcripts generated by Simon&rsquo;s tool.</p> <div class="ba b--light-gray"> <p><img src="https://lethain.com/static/blog/2026/claude-transcript-detail.png" alt="Claude Code transcript detail view showing prompts, messages, and tool calls"></p> </div> <p>Finally, we have an internal CLI named <code>imp</code> that is available on every laptop, which now has an additional tool <code>imp claude share-session</code> that will open <code>claude-code-transcripts</code>, allow you to select a session of choice, and then merge it into the holding repository.</p> <div class="ba b--light-gray"> <p><img src="https://lethain.com/static/blog/2026/claude-share-session-cli.png" alt="Terminal CLI for sharing Claude sessions"></p> </div> <p>Altogether, this was an hour or two of work, and a bit of an experiment in emergent process design. In the short-term, I am enjoying asking our biggest Claude Code users to share their sessions so that I can cherry-pick their practices.</p>