Will Larson's Blog, page 2
May 23, 2025
Stuff I learned at Carta.
Today’s my last day at Carta, where I got the chance to serve as their CTOfor the past two years. I’ve learned so much working there, and I wantedto end my chapter there by collecting my thoughts on what I learned.(I am heading somewhere, and will share news in a week or two afterfirming up the communication plan with my new team there.)
The most important things I learned at Carta were:
Working in the details –if you took a critical lens towards my historical leadership style,I think th...
May 11, 2025
systems-mcp: generate systems models via LLM
Back in 2018, I wrote lethain/systemsas a domain-specific language for writing runnable systems models,and introduced it with this blog post modeling a hiring funnel.While it’s far from a perfect system, I’ve gotten a lot of value out of it over the last seven years,because it allows me to maintain systems models in version control.
As I’ve been playing with writing Model Context Protocol (MCP) servers,one I’ve been thinking about frequently is one to help writing systems syntax, and I fina...
How to provide feedback on documents.
At Carta, we recently ran a reading group forFacilitating Software Architectureby Andrew Harmel-Law.We already loosely followed the ideas of anarchitectural advice process (from this 2021 articleby the same Andrew Harmel-Law), but in practice we found that internal tech spec and architecture decision record (ADR) authors tended toexclusively share their documents locally within their team rather than more widely.
As we asked authors why they preferred sharing locally, the most common answe...
May 3, 2025
Public company comparables.
A few years ago I wrote about reading a Profit & Loss statement,which is a foundational executive skill. I also subsequently wrote about ways to measure your engineering organization.Despite having written those, I still spend a lot of time wondering about effective ways to representan engineering organization to your board of directors.
Over the past few years, one of the most useful charts I’ve found for explaining an R&D organizationis a scatterplot of R&D spend as a % of margin versus Yo...
How to filter out old email from inbox
Every few years I take a pass at reducing the chaos in mypersonal inboxes. There are simply too many emails to deal with,and that generally leads to me increasingly failing to follow up on important email.
Up to this point, my strategy has largely been filtering out emails that Inever want to read. But there’s another category of email which is stuffI often want to read when it’s fresh, but never want to read after it’s fresh.For example, calendar reminders, some mailing lists, some news le...
April 24, 2025
How should Stripe deprecate APIs? (~2016)
While Stripe is a widely admired company for things like itscreation of the Sorbet typer project, I personallythink that Stripe’s most interesting strategy work is also among its most subtle:its willingness to significantly prioritize API stability.
This strategy is almost invisible externally.Internally, discussions around it were frequent and detailed, but mostly confined to dedicated API design conversations.API stability isn’t just a technical design quirk, it’s a foundational decision ...
April 22, 2025
library-mcp: working with Markdown knowledge bases
At work, we’ve been building agentic workflows to support our internal Deliveryteam on various accounting, cash reconciliation, and operational tasks.To better guide that project, I wrote my own simple workflow toolas a learning project in January.Since then, the Model Context Protocol (MCP)has become a prominent solution for writing tools for agents, and I decided to spend sometime writing an MCP server over the weekend to build a better intuition.
The output of that project is library-mc...
April 20, 2025
Refreshed StaffEng.com and a few other sites
Ahead of announcing the title and publisher ofmy thus-far-untitled book on engineering strategyin the next week or two, I put together a website for its content.That site is pretty much the same format as this blog,but with some improvements like better mobile rendering on / than this blog has historically had.
After finishing that work, I ported the improvements back to lethain.com, but alsodecided to bring them to staffeng.com.That was slightly trickier because, unlike this blog, StaffEn...
April 17, 2025
Why did Stripe build Sorbet? (~2017)
Many hypergrowth companies of the 2010s battled increasing complexity intheir codebase by decomposing their monoliths.Stripe was somewhat of an exception, largely delaying decomposition untilit had grown beyond three thousand engineers and had accumulated a decade of development in its core Ruby monolith.Even now, significant portions of their product aremaintained in the monolithic repository, and it’s safe to say this was only possiblebecause of Sorbet’s impact.
Sorbet is a custom static...
Why did Stripe build Sorbet? (~2017).
Many hypergrowth companies of the 2010s battled increasing complexity intheir codebase by decomposing their monoliths.Stripe was somewhat of an exception, largely delaying decomposition untilit had grown beyond three thousand engineers and had accumulated a decade of development in its core Ruby monolith.Even now, significant portions of their product aremaintained in the monolithic repository, and it’s safe to say this was only possiblebecause of Sorbet’s impact.
Sorbet is a custom static...


