<?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[Davis Treybig]]></title><description><![CDATA[Thinking in public about topics I find interesting in computing infrastructure. ]]></description><link>https://davistreybig.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!A25H!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65712cc2-1fff-482c-ac2c-f8c57efa1913_400x400.png</url><title>Davis Treybig</title><link>https://davistreybig.substack.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 21 Jun 2026 10:36:49 GMT</lastBuildDate><atom:link href="https://davistreybig.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Davis Treybig]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[davistreybig@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[davistreybig@substack.com]]></itunes:email><itunes:name><![CDATA[Davis Treybig]]></itunes:name></itunes:owner><itunes:author><![CDATA[Davis Treybig]]></itunes:author><googleplay:owner><![CDATA[davistreybig@substack.com]]></googleplay:owner><googleplay:email><![CDATA[davistreybig@substack.com]]></googleplay:email><googleplay:author><![CDATA[Davis Treybig]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Autonomous product loops]]></title><description><![CDATA[There are now a number of high-profile startups like Resolve and Firetiger that aim to create some type of autonomous observability loop.]]></description><link>https://davistreybig.substack.com/p/autonomous-product-loops</link><guid isPermaLink="false">https://davistreybig.substack.com/p/autonomous-product-loops</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Tue, 16 Jun 2026 19:26:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!A25H!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65712cc2-1fff-482c-ac2c-f8c57efa1913_400x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There are now a number of high-profile startups like <a href="https://resolve.ai/">Resolve</a> and <a href="https://www.firetiger.com/">Firetiger</a> that aim to create some type of autonomous observability loop. The basic idea is that an agent continuously monitors production data, identifies errors or concerning changes in metrics, and then acts like an on-call engineer, submitting PRs for code changes to fix such issues. Assuming it works well, you end-up with a &#8220;self healing&#8221; product. </p><p>I think an identical pattern can be applied to product loops - the cycle of collecting usage data on your product, identifying gaps &amp; areas of improvement, and then having a coding agent submit changes to hill climb against those gaps. What&#8217;s interesting is that while there are probably 10+ companies doing observability loops, almost no one is doing this for product. </p><p>Analogous to how observability agents monitor logs, metrics, and traces, the signals to consider here would be:</p><ol><li><p><strong>Instrumentation</strong> - Event data on product usage, including things like conversion funnels</p></li><li><p><strong>Session replay </strong>- Recorded user sessions</p></li><li><p><strong>Experimental data</strong> - Results from A/B tests or other forms of experiments and staged rollouts</p></li></ol><p>What&#8217;s interesting is that AI can, I think, heavily influence the way we have traditionally thought about setting up and monitoring all of these signals. </p><p>The classic issue with instrumentation is that it is a pain to setup and manage. The PM is often the one who wants to instrument things, but the engineer has to write the instrumentation logic. Features get shipped all the time without someone remembering to instrument them. And instrumentation logic becomes sprawling - with tons of duplicate event types being created for the same logical concept. </p><p>What one could instead imagine is a coding agent that sits on every PR, automatically identifies the right way to instrument it given the existing codebase, the way existing features are instrumented, and the goal/purpose of the feature, and auto adds instrumentation logic. Basically - CodeRabbit but for product instrumentation. </p><p>The classic issue with session replay is analysis - if you store tends of thousands of session replays, how do you draw holistic conclusions? How do you separate signal from noise outside of someone manually watching certain replays. </p><p>VLMs can play a massive role in changing this - semantically analyzing large sets of replays and turning them into structured, qualitative insights like &#8220;Users who visit the checkout page tend to get confused by the Apple Pay feature&#8221;. This means you are no longer sitting on a repository of replays which your PMs can watch 1/1000th of, but rather a set of constantly refreshed insights like you had a UXR team watching every user use your product 24/7. </p><p>The classic issue with experimentation is experimental setup &amp; analysis - it is difficult to go through the end-to-end process of setting up the right feature flags with the right randomization and then analyzing the data properly, often bottlenecked by 1-2 data scientists on your team familiar with experimentation. But, coding agents are very capable of adding feature flag logic to your features, and then running data analysis on the results. Similar to instrumentation, you can imagine this happening pseudo-automatically, suggested by an agent during PRs and then analyzed asynchronously as the data comes in. You can also imagine the agent running <a href="https://davistreybig.substack.com/p/synthetic-product-feedback">simulated &#8220;experiments&#8221; synthetically</a> to handle low sample size environments. </p><p>If you tie these things together, you can imagine a form factor roughly like the following:</p><ol><li><p>An agent constantly monitors all product data in the background, deriving clusters of insights from product telemetry, experiments, and session replays. Users can query these insights via MCP/API in tools like Cursor as they develop new features. </p></li><li><p>As obvious areas for improvement emerge based on the product data, the agent submits PRs to the team with proposed fixes and their associated rationale. For example - the agent might submit a PR suggesting that two pages in the onboarding flow are merged because the recent addition of a new onboarding page drastically lowered activation rate. </p></li><li><p>An agent runs on every PR, analyzing whether the PR merits changes in how product data is captured and whether the functional change is aligned with what the product telemetry suggests. This could look like suggesting an instrumentation event is added, or saying that the premise of a new feature is inconsistent with the data from a bunch of recent session replays, with links to those specific session replays. </p></li></ol><p>One could build this directly on top of whatever tools the customer is already using for product measurement - StatSig, PostHog, Amplitude, etc - though I suspect there will end up being an opportunity to rethink the storage layers of some of these systems to better account for agent based analysis. But the easiest entrypoint is an agent with API access to whatever tools you use, which can basically automate these &#8220;reasoning&#8221; layers on top of the data. </p><p>If done correctly, I think this makes the entire product analytics &amp; experimentation category essentially headless - there will almost never be a need to visit a UI to see conversion funnels or similar, because the system should simply surface the relevant data as it is needed during feature development and/or play the role of the person who analyses the data to determine changes that should be made. </p><p>I have almost no doubt this will work to at least some extent, because it already works in observability. And while I think observability is <em>slightly</em> easier to get right because production errors are black and white things that must be fixed, whereas improving your product tends to be more subjective, at their core they are the same concept, just with different signals that need to be considered. </p><p><a href="https://posthog.com/code">Posthog Code</a> is the closest thing I have seen to this so far, though I don&#8217;t love the IDE-like form factor. I think the better insertion points for something like this is in the PR, and in existing coding agent tools via MCP/CLI. And then I think there is a lot of value in starting tool-agnostic. </p><p></p>]]></content:encoded></item><item><title><![CDATA[How Agents Use Systems Differently]]></title><description><![CDATA[Why databases, distributed systems, & more will need to be re-architected for a new type of user]]></description><link>https://davistreybig.substack.com/p/how-agents-use-systems-differently</link><guid isPermaLink="false">https://davistreybig.substack.com/p/how-agents-use-systems-differently</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Thu, 14 May 2026 15:09:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/264bbfc7-0217-4107-a0d1-80af1533d1a4_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Increasingly, coding agents are the ones provisioning and interacting with systems such as databases, distributed systems, computing runtimes, APIs, and similar types of cloud services. This is driving a need to redesign such systems to account for the fact that agents use them quite differently than humans, and have somewhat divergent requirements.</p><p>This blog post outlines the patterns I have seen thus far that seem to be most universally beneficial and important for serving agents. Note that I am not aiming to discuss <a href="https://biilmann.blog/articles/introducing-ax/">&#8220;agent experience&#8221;</a> here - which gets more at things like how to make it easy for agents to discover, understand, and use your service (e.g. account creation via CLI, markdown based docs, everything as an API) - but rather how systems should be designed differently to serve agent workload patterns.</p><h3><strong>Snapshotting &amp; Time Travel</strong></h3><p>Agents make a lot of mistakes, but are good at back-tracking and correcting those mistakes if there is an easy way to do so. Systems that therefore make it easy to regularly snapshot system state at a low overhead and then recover from that start are particularly amenable to agent query patterns.</p><p>Good examples of this include <a href="https://blog.replit.com/inside-replits-snapshot-engine">Replit&#8217;s snapshot engine</a> and how every sandbox vendor is pushing hard on supporting full memory + disk snapshots (e.g. <a href="https://blog.replit.com/inside-replits-snapshot-engine">Cloudflare</a>, <a href="https://www.daytona.io/docs/en/snapshots/">Daytona</a>). See also <a href="https://www.tigrisdata.com/blog/fifty-agents-one-bucket/#snapshots-make-every-agent-run-replayable">Tigris recent post on snapshotting</a>.</p><h3><strong>Branching &amp; Copy-on-Write</strong></h3><p>The ability to rapidly branch the state of a system at a low relative cost is extremely valuable for agents.</p><p>Agents benefit from high degrees of parallelism, exploring many different ideas or options simultaneously and then converging on the optimal ones. As a result, agents tend to want to branch the system state much more readily than humans typically do, and it is thus essential that techniques like <a href="https://en.wikipedia.org/wiki/Copy-on-write">copy-on-write</a> are used to make this more efficient.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!__K1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9b5aff-c8ca-4445-ae7c-79d87b511a6e_1183x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!__K1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9b5aff-c8ca-4445-ae7c-79d87b511a6e_1183x768.png 424w, https://substackcdn.com/image/fetch/$s_!__K1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9b5aff-c8ca-4445-ae7c-79d87b511a6e_1183x768.png 848w, https://substackcdn.com/image/fetch/$s_!__K1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9b5aff-c8ca-4445-ae7c-79d87b511a6e_1183x768.png 1272w, https://substackcdn.com/image/fetch/$s_!__K1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9b5aff-c8ca-4445-ae7c-79d87b511a6e_1183x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!__K1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9b5aff-c8ca-4445-ae7c-79d87b511a6e_1183x768.png" width="1183" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe9b5aff-c8ca-4445-ae7c-79d87b511a6e_1183x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1183,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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="" srcset="https://substackcdn.com/image/fetch/$s_!__K1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9b5aff-c8ca-4445-ae7c-79d87b511a6e_1183x768.png 424w, https://substackcdn.com/image/fetch/$s_!__K1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9b5aff-c8ca-4445-ae7c-79d87b511a6e_1183x768.png 848w, https://substackcdn.com/image/fetch/$s_!__K1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9b5aff-c8ca-4445-ae7c-79d87b511a6e_1183x768.png 1272w, https://substackcdn.com/image/fetch/$s_!__K1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9b5aff-c8ca-4445-ae7c-79d87b511a6e_1183x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://www.databricks.com/blog/how-agentic-software-development-will-change-databases">This Databricks blog post about how agents do software engineering mirrors the broader way agents use systems - large numbers of parallel experiments run at a high rate</a></figcaption></figure></div><p>Furthermore, in such scenarios, you often want each agent&#8217;s exploration to be sandboxed such that it can not interfere with other agents, nor mess up your production state. For example, if your agent is developing a new data pipeline that hydrates a production table, you ideally want the agent to be able to fully explore and test doing that without there being any risk of corrupting the production state.</p><p>Correspondingly, I think the importance of &#8220;git-like&#8221; semantics in systems is going up a lot - because if you are branching, you also want first class resolution operations like rebasing, merging, etc.</p><p>I will note that, in spite of the large number of databases advertising efficient branching, there is still a lot of performance optimization work to be done in this space. See for example the <a href="https://arxiv.org/pdf/2604.17180">BranchBench</a> paper</p><blockquote><p><em>We evaluate state of the art systems including Neon, DoltgreSQL, Tiger Data, Xata, and PostgreSQL baselines, and find a fundamental tension: systems optimized for fast branching suffer up to 5&#8722;4000&#215; slower reads as branches deepen, while systems optimized for fast data operations incur 25&#8722;1500&#215; higher branch creation and switching latency. Further, no current system supports the representative workloads at scale. These results highlight the need for branch native DBMSes designed specifically for agentic exploration.</em></p></blockquote><p>Good examples of database doing this and advertising it specifically as a useful tool for agents include <a href="https://neon.com/guides/git-worktrees-neon-branching#the-solution-part-2-neon-database-branching">Neon DB Branching</a>, <a href="https://www.bauplanlabs.com/post/git-for-data-formal-semantics-of-branching-merging-and-rollbacks-part-1">Bauplan Git-for-Data</a>, <a href="https://www.tigrisdata.com/blog/bucket-forking-deep-dive/">Tigris bucket forking</a>, <a href="https://www.databricks.com/blog/how-agentic-software-development-will-change-databases">Databricks lakebase branching</a>, and <a href="https://www.tryardent.com/">Ardent Postgres cloning</a>.</p><p>Another good example of this playing out recently is how git worktrees have become enormously popular with coding agents, when they were traditionally quite niche versus simply doing branches. Worktrees are essentially a more &#8220;complete&#8221; version of branching than a git branch since they encapsulate the environment and the code.</p><p>Yet even here, there is more work to be done - see for example the following thoughts from one of the leading sandbox vendors, Daytona:</p><blockquote><p><em>Consider coding agents running in a sandbox. Today, you have two options - you can create real branches, but they leak into the remote, or you can skip branching and lose clean merge-back. What you really want is complete branch, rebase, and merge functionality within the sandbox that doesn&#8217;t leak to the remote until you want it to. The primitive still isn&#8217;t there - Vedran, CTO of Daytona</em></p></blockquote><h3><strong>Rapid scale up &amp; scale down</strong></h3><p>Agent workloads tend to be very spiky - with much higher variance jumps up and down than human workloads.</p><p>As an illustrative example, consider the role of a data analyst. A human investigating something might:</p><ol><li><p>Run a query</p></li><li><p>Spend a few minutes analyzing the results</p></li><li><p>Spend a few minutes updating the query or writing a new query</p></li><li><p>repeat</p></li></ol><p>Each query is interleaved by a lot of human time to analyze, consider, and identify the next step - with the end-to-end workload being effectively spaced out over intervals.</p><p>An agent data analyst investigating the same thing will collapse all the above steps into a rapid series of back-to-back queries all run in a very short time span, then be done. The overall workload got condensed from maybe an hour to &lt;1 minute.</p><p>This dramatically increases the need for infrastructure that is designed to rapidly scale up &amp; rapidly scale down. Without this, you will either be unable to respond to agent demands, or you will be massively over provisioned and thus very cost ineffective.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7-dd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4f842e-7743-47e7-83e1-20b6a415e6ba_889x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7-dd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4f842e-7743-47e7-83e1-20b6a415e6ba_889x768.png 424w, https://substackcdn.com/image/fetch/$s_!7-dd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4f842e-7743-47e7-83e1-20b6a415e6ba_889x768.png 848w, https://substackcdn.com/image/fetch/$s_!7-dd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4f842e-7743-47e7-83e1-20b6a415e6ba_889x768.png 1272w, https://substackcdn.com/image/fetch/$s_!7-dd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4f842e-7743-47e7-83e1-20b6a415e6ba_889x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7-dd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4f842e-7743-47e7-83e1-20b6a415e6ba_889x768.png" width="889" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f4f842e-7743-47e7-83e1-20b6a415e6ba_889x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:889,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7-dd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4f842e-7743-47e7-83e1-20b6a415e6ba_889x768.png 424w, https://substackcdn.com/image/fetch/$s_!7-dd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4f842e-7743-47e7-83e1-20b6a415e6ba_889x768.png 848w, https://substackcdn.com/image/fetch/$s_!7-dd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4f842e-7743-47e7-83e1-20b6a415e6ba_889x768.png 1272w, https://substackcdn.com/image/fetch/$s_!7-dd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4f842e-7743-47e7-83e1-20b6a415e6ba_889x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://x.com/ivanburazin/status/2044913732619272618?s=20">Ivan Burazin (Daytona)</a></figcaption></figure></div><p>Most traditional systems infrastructure - especially more stateful systems - has generally assumed some degree of always-running components and some fixed floor on operational cost. Serverless, highly elastic infrastructure has, for the most part, been more of a niche.</p><p>Agents are completely upending this. Databricks has a fantastic blog post showing how <a href="https://www.databricks.com/blog/how-agentic-software-development-will-change-databases">on Lakebase, thanks to agents, the median database compute time is less than 10 seconds</a> (visual below). If you do not have a database system designed for this degree of ephemerality - likely built around concepts like stateless compute workers, no specialized coordinators &amp; leaders, and separation of storage &amp; compute - it is almost impossible to serve the workload economically.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SwYb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956b8705-828d-4ee4-b885-70645d6375d8_1267x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SwYb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956b8705-828d-4ee4-b885-70645d6375d8_1267x768.png 424w, https://substackcdn.com/image/fetch/$s_!SwYb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956b8705-828d-4ee4-b885-70645d6375d8_1267x768.png 848w, https://substackcdn.com/image/fetch/$s_!SwYb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956b8705-828d-4ee4-b885-70645d6375d8_1267x768.png 1272w, https://substackcdn.com/image/fetch/$s_!SwYb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956b8705-828d-4ee4-b885-70645d6375d8_1267x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SwYb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956b8705-828d-4ee4-b885-70645d6375d8_1267x768.png" width="1267" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/956b8705-828d-4ee4-b885-70645d6375d8_1267x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1267,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SwYb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956b8705-828d-4ee4-b885-70645d6375d8_1267x768.png 424w, https://substackcdn.com/image/fetch/$s_!SwYb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956b8705-828d-4ee4-b885-70645d6375d8_1267x768.png 848w, https://substackcdn.com/image/fetch/$s_!SwYb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956b8705-828d-4ee4-b885-70645d6375d8_1267x768.png 1272w, https://substackcdn.com/image/fetch/$s_!SwYb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956b8705-828d-4ee4-b885-70645d6375d8_1267x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There is now research that suggests that extreme burstiness of agent query patterns can actually create more even profound problems systems. <a href="https://github.com/BauplanLabs/SAO-workshop/blob/main/papers/9.pdf">This paper by MongoDB</a> highlights how what they call &#8220;agent spikes&#8221; - super rapid, high volume, retry heavy agent query patterns - are actually so different from human patterns that they can cause ongoing degradation or failure of a system because they get into a negative feedback loop with dynamic mechanisms like load shedding and queue management. In other words, human system design is so poorly adapted to agents that agents can simply <em>break</em> the system. </p><p>See also <a href="https://x.com/tudor_g/status/2044410096592048363?s=20">Xata&#8217;s recent OSS launch</a> focused on the platform being designed for agents, highlighting &#8220;automatic scale-to-zero and wake-up on new connections&#8221; as a core reasons why.</p><h3>High-concurrency</h3><p>Agents are capable of much more parallel query patterns than humans. Web search is good example of this. If you ask Claude to do deep research on a topic, it will do 10+ web searches in parallel. This is profoundly different from how humans do web search, which looks more like a single threaded series of sequential queries.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0i8v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94523500-0d8e-4c9e-a8dd-02539c0e1481_944x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0i8v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94523500-0d8e-4c9e-a8dd-02539c0e1481_944x768.png 424w, https://substackcdn.com/image/fetch/$s_!0i8v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94523500-0d8e-4c9e-a8dd-02539c0e1481_944x768.png 848w, https://substackcdn.com/image/fetch/$s_!0i8v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94523500-0d8e-4c9e-a8dd-02539c0e1481_944x768.png 1272w, https://substackcdn.com/image/fetch/$s_!0i8v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94523500-0d8e-4c9e-a8dd-02539c0e1481_944x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0i8v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94523500-0d8e-4c9e-a8dd-02539c0e1481_944x768.png" width="944" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94523500-0d8e-4c9e-a8dd-02539c0e1481_944x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:944,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0i8v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94523500-0d8e-4c9e-a8dd-02539c0e1481_944x768.png 424w, https://substackcdn.com/image/fetch/$s_!0i8v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94523500-0d8e-4c9e-a8dd-02539c0e1481_944x768.png 848w, https://substackcdn.com/image/fetch/$s_!0i8v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94523500-0d8e-4c9e-a8dd-02539c0e1481_944x768.png 1272w, https://substackcdn.com/image/fetch/$s_!0i8v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94523500-0d8e-4c9e-a8dd-02539c0e1481_944x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Claude&#8217;s Deep Research will run a ton of parallel web searches - each shown in a section on the right - vastly more than a human would</figcaption></figure></div><p>This behavior is largely a function of the fact that agents have a much higher effective information processing bandwidth than humans. This means that systems designed for agents need to account for much higher degrees of concurrency and parallelism, particularly in the context of an <em>individual client.</em></p><p>I suspect that this may substantially influence how a system caches. The more parallelism, the higher the need for, and opportunity for, intelligent re-use of work. A parallel swarm of agents trying to solve something for a given user are very likely to make semi-redundant queries that produce similar results.</p><p>For example if a bunch of agents are doing exploratory analysis on a Snowflake table, and agent 1 runs:</p><pre><code><code>SELECT col1 FROM table WHERE date = January</code></code></pre><p>While agent 2 runs:</p><pre><code><code>SELECT col1 FROM table WHERE date &gt;= January and &lt; March</code></code></pre><p>One could essentially rewrite query 2 as:</p><pre><code><code>SELECT col1 FROM table WHERE date &gt;= February and &lt; March 
UNION
SELECT the previous query from cache</code></code></pre><p>While this sort of semantic caching optimization could be useful for humans, its importance goes up dramatically in more concurrent query environments because it increases the likelihood of a cache hit. Thus, the concurrency present in agentic may pressure systems towards more sophisticated cache optimizations - some interesting recent examples in the OLAP space being <a href="https://github.com/XiangpengHao/liquid-cache">LiquidCache</a> and <a href="https://arxiv.org/pdf/2411.08203">Bauplan&#8217;s differential cache</a> (reminiscent in some ways of <a href="https://pdos.csail.mit.edu/papers/noria:osdi18.pdf">Noria</a>)</p><h3>Isolation &amp; Contention Management</h3><p>In many cases, systems designed for agents will need to deal with a much higher rate of contention given the dramatically higher net volume of queries &amp; requests being made by agents in parallel.</p><p>This increases the importance of techniques that help mitigate contention and encourage isolated edits/changes. Branching is one such approach, but there are others.</p><p>For example, designing a storage layout to account for many agents wanting to make many very small edits in parallel without having to place locks on very large segments of data - an advantage <a href="https://mesa.dev/">Mesa&#8217;s</a> versioned filesystem has over solutions like S3 Files.</p><p>Another example of this is conflict-resolution techniques like <a href="https://www.figma.com/blog/how-figmas-multiplayer-technology-works/">CRDTs</a>. For products where a large number of humans and agents are jointly collaborating on shared state, data structures like CRDTs that allow for high degrees of parallel edits or manipulation of data may become more popular.</p><h3>High volume, small data</h3><p>In general, agents gravitate towards doing high volumes of &#8220;small&#8221; data work. Coding agents are creating 10000x the number of repos that existed before, but each repo tends to be much smaller on average. Data analysis agents tend to do a lot of small to medium sized analyses, but far fewer giant queries. Agents running sandboxes tend to produce a huge number of very small filesystems.</p><p>An immediate impact of this paradigm is it breaks the rate limit assumptions of a lot of existing infrastructure - e.g. companies like Lovable literally can not use Github because they exceed repo creation rate limits by multiple orders of magnitude, leading to companies like <a href="https://mesa.dev/">Mesa</a> &amp; <a href="https://relace.ai/">Relace</a>. The more subtle impact is it fundamentally changes how you want to store data and metadata.</p><p>Storage systems are designed around assumptions on the rough shape of a workload - the ratio of (number of objects) to (size per object) to (operations per object), the metadata-to-data ratio, the typical lifetime where an object is &#8220;hot&#8221;, the read-to-write ratio, etc.</p><p>If you suddenly have 1000x more cardinality, a totally different metadata to data ratio (as you need to keep track of a lot more data but each object is much smaller), and a different object lifecycle - things can utterly break. <a href="https://www.sciencedirect.com/science/article/pii/S1319157821002585">The &#8220;Small File Problem&#8221; in Hadoop is a classic, older example of this pattern</a>. </p><p>This has a substantial impact on system design. Advanced namespace techniques like hash based addressing, prefix sharding, and other more efficient ways to traverse large name spaces become important. It becomes more critical to ensure there is not a high metadata overhead per object - e.g. large footers or headers. As the read-to-write ratio of the workload changes (in the git repo example, you are creating thousands times the number of repos but each repo is accessed way less often, and in many cases a repo might never be accessed again after 30-60 seconds), you need to compact differently. Your sharding, file layout, metadata management, and storage format strategies may also need to change. </p><p>Consider filesystems in agent sandboxes. If you have huge numbers of tiny sandbox filesystems, what is the right implementation? The simple solution is an individual volume per sandbox, but this is extremely expensive. The more complex solution is a shared volume base with per-sandbox copy-on-write overlays - which is what many of the more advanced agent sandbox vendors now do. But this then introduces new questions - what is the set of bases you store? When is it better to have a new base vs. store a diff? How do you re-balance your bases over time as the filesystems evolve? A whole new design space emerges to try to solve the problem.</p><p>As another example, the CEO of Firebolt recently put together a <a href="https://www.linkedin.com/posts/wagjamin_iceberg-summit-presentation-activity-7450253680764772352-pFQw?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAA8hjT8BOrnr3rZlqZodchQ5N9LxCEttivc">good presentation for Iceberg Summit</a> discussing how agent workloads require a substantial rethinking of some combination of the Iceberg storage format and query engines above it. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cxpm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e872ef5-1c5a-406d-a2ca-a61f87164721_1110x616.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cxpm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e872ef5-1c5a-406d-a2ca-a61f87164721_1110x616.png 424w, https://substackcdn.com/image/fetch/$s_!Cxpm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e872ef5-1c5a-406d-a2ca-a61f87164721_1110x616.png 848w, https://substackcdn.com/image/fetch/$s_!Cxpm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e872ef5-1c5a-406d-a2ca-a61f87164721_1110x616.png 1272w, https://substackcdn.com/image/fetch/$s_!Cxpm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e872ef5-1c5a-406d-a2ca-a61f87164721_1110x616.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cxpm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e872ef5-1c5a-406d-a2ca-a61f87164721_1110x616.png" width="1110" height="616" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e872ef5-1c5a-406d-a2ca-a61f87164721_1110x616.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:616,&quot;width&quot;:1110,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72591,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/197400733?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e872ef5-1c5a-406d-a2ca-a61f87164721_1110x616.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Cxpm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e872ef5-1c5a-406d-a2ca-a61f87164721_1110x616.png 424w, https://substackcdn.com/image/fetch/$s_!Cxpm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e872ef5-1c5a-406d-a2ca-a61f87164721_1110x616.png 848w, https://substackcdn.com/image/fetch/$s_!Cxpm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e872ef5-1c5a-406d-a2ca-a61f87164721_1110x616.png 1272w, https://substackcdn.com/image/fetch/$s_!Cxpm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e872ef5-1c5a-406d-a2ca-a61f87164721_1110x616.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://www.linkedin.com/posts/wagjamin_iceberg-summit-presentation-activity-7450253680764772352-pFQw?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAA8hjT8BOrnr3rZlqZodchQ5N9LxCEttivc">Ben Wagner - Firebolt</a></figcaption></figure></div><p>Beyond being higher volume, agents also tend to be far more iterative than humans, and are often most effective assuming rapid iteration with a tight feedback loop. A human that needs to do a big analysis might meticulously write the query that does the entire thing, all at once. Agents tend to be better at writing a baseline query, looking at the results, repeating at high rate. This lends itself much more towards these sorts of &#8220;small data&#8221; systems, where a lot of small queries build up on one another.</p><p>A good example of this is the popularity of grep in coding agents over more complex, high scale search databases - it is easier for the agent to run a massive number of smaller grep queries in many situations.</p><p>As a result, systems designed for high volumes of &#8220;small data&#8221; tend to work better for agents - e.g. <a href="https://sqlite.org/">SQLite</a>, <a href="https://motherduck.com/">Motherduck</a>, <a href="https://www.bauplanlabs.com/">Bauplan</a>, etc. These systems can not support extremely large scale data workloads and tend to be designed to run only on single machines (vs. distributed), but in return they are simpler to run, lower cost, and more performant within that scale.</p><h3>High volume, low cost</h3><p>Agents tend to dramatically increase the overall load on systems for a few, multiplicative reasons.</p><p>First, agents tend to be expansionary in terms of how often infrastructure is used - e.g. vibe coding platforms and Claude Code are resulting in many orders of magnitude more code in the world than existed before, data analyst agents are resulting in way more people running way more data analysis queries than before.</p><p>Second, as I mentioned earlier, agents&#8217; more parallel approach to querying systems also mean each of those individual tasks tend to involve way more queries to the system.</p><p>As a result, the effective query load on a system is likely to go up by many orders of magnitude relative to what it was before, which can explode cost. One portfolio company I work with, Bauplan, is seeing data workloads grow by 10-100x once agents use their DB vs. humans. Clickhouse&#8217;s visual below captures this explosion of volume well. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yi5Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a2e5feb-e8bf-40db-abb7-94544593dd8d_1688x604.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yi5Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a2e5feb-e8bf-40db-abb7-94544593dd8d_1688x604.png 424w, https://substackcdn.com/image/fetch/$s_!Yi5Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a2e5feb-e8bf-40db-abb7-94544593dd8d_1688x604.png 848w, https://substackcdn.com/image/fetch/$s_!Yi5Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a2e5feb-e8bf-40db-abb7-94544593dd8d_1688x604.png 1272w, https://substackcdn.com/image/fetch/$s_!Yi5Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a2e5feb-e8bf-40db-abb7-94544593dd8d_1688x604.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yi5Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a2e5feb-e8bf-40db-abb7-94544593dd8d_1688x604.png" width="1456" height="521" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a2e5feb-e8bf-40db-abb7-94544593dd8d_1688x604.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:521,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:446776,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/197400733?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a2e5feb-e8bf-40db-abb7-94544593dd8d_1688x604.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Yi5Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a2e5feb-e8bf-40db-abb7-94544593dd8d_1688x604.png 424w, https://substackcdn.com/image/fetch/$s_!Yi5Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a2e5feb-e8bf-40db-abb7-94544593dd8d_1688x604.png 848w, https://substackcdn.com/image/fetch/$s_!Yi5Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a2e5feb-e8bf-40db-abb7-94544593dd8d_1688x604.png 1272w, https://substackcdn.com/image/fetch/$s_!Yi5Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a2e5feb-e8bf-40db-abb7-94544593dd8d_1688x604.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://clickhouse.com/blog/building-a-data-platform-for-agents">Clickhouse - a data platform for agents</a></figcaption></figure></div><p>This greatly increases the importance of cost reduction mechanisms and architectures that solve for cost - such as tiered storage architectures, sophisticated caching, or compression techniques.</p><p>As an example, <a href="https://turbopuffer.com/">Turbopuffer&#8217;s</a> object storage native architecture gained a lot of traction over earlier in-memory vector DBs like Pinecone thanks to offering an insane cost reduction (100x+). The primary user of vector databases are agents running retrieval queries as a tool to gather context, and complex agents want to run <em>tons</em> of retrieval queries to solve a task. The cost component was a fundamental enabler of the desired agent workload pattern. </p><p>To my earlier point about &#8220;high volume, small data&#8221; - Turbopuffer&#8217;s architecture also optimized for a large # of (relatively) smaller vector index namespaces, rather than a small number of very large vector index namespaces which is what was much more common in traditional search use cases like consumer web search or eCommerce recommendation systems. This tradeoff maps very well to vertical RAG &amp; agent companies - e.g. Turbopuffer has to serve Cursor, which has millions of customers each with their own set of search namespaces which are dynamically queried by the Cursor agent. </p><h3>Session-based, stateful queries</h3><p>Relative to humans, agents tend to be much more session-oriented in how they engage with systems. Consider web search as an example. A given human looking something up might type a query, look at the results, and may perhaps repeat once or twice but for the most part the search is singular and one-off.</p><p>In contrast, agents default to highly, highly sequential queries that all build off of each other. You see this, for example, with how coding agents use grep - it is not uncommon for a coding agent to run 5, 10, or even 30 sequential search queries in a row against your codebase to find what it is looking for, each refined from the last.</p><p>From a systems perspective, what makes this pattern interesting is that it is possible to natively bake the idea of a &#8220;session&#8221; into a query system, not dissimilar from how recommendation systems in products like TikTok have traditionally used the full sequence of actions a user has taken to inform the next suggestion.</p><p>Going back to the web search example, most web search APIs today have no concept of stored state across queries - each query is stateless, not informed at all by previous queries. This is because the traditional way web search APIs have been used is extremely one off. Recommendation systems generally only work when there is a <em>lot</em> of sequential interaction data - humans don&#8217;t demonstrate this except in consumer product categories like social media, but agents demonstrate it <em>everywhere.</em></p><p>What if instead, the web search API had a session ID that could be used to allow each successive query to be partially informed by previous queries, skewing the search away from results you&#8217;ve already seen and towards a more refined understanding of what you want?</p><p>I think there is a <em>lot</em> of optimization that could be done in a such a case, such as:</p><ol><li><p>Caching of incremental or partial results likely to re-appear in subsequent queries (see <a href="https://arxiv.org/abs/2411.08203">this paper</a> as a similar idea in DBMS)</p></li><li><p>Intelligent reformulation of query N via a semantic understanding of what the user attempted to do in queries 0...N to avoid repeated or redundant work</p></li><li><p>Predictive querying of data in anticipation of what an agent is likely to query next</p></li></ol><p>Clickhouse touches on the idea of a stateful session in their recent blogpost on &#8220;A<a href="https://clickhouse.com/blog/agent-facing-analytics">gent Facing Analytics</a>&#8221;: </p><div class="callout-block" data-callout="true"><h4><strong>A server-side state for AI Memory</strong></h4><p>AI systems can retain and recall information over time which can help them make better decisions, personalize responses, or improve performance based on past interactions. This is often referred to as &#8220;AI memory&#8221;.</p><p>In the database, we can envision server-side features to support maintaining a state for the agents, the same way interactive users can maintain sessions with their settings and preferences preserved. This can be extended to various cache levels if recurring queries are submitted (especially relevant for data discovery queries) and will require reliable ways to identify agent users and the scope of their tasks.</p></div><p>This idea, by the way, can also be mapped to the parallel query patterns I described early - agents both branch wide and recurse deeply, and really you want the system to understand that all of this maps to a single &#8220;session&#8221; where the agent is trying to analyze or understand something.</p><h3>Open the engine</h3><p>I generally think that the rise of agents manipulating systems will lead many systems to expose a lot more, lower level APIs and &#8220;open their engine&#8221; more, because agents are FAR more capable of manipulating these low level APIs than humans.</p><p>Agents - as a general rule - want thin, dumb APIs, not &#8220;thick&#8221; APIs. <a href="https://softwaredoug.com/blog/2025/09/22/reasoning-agents-need-bad-search">Doug Turnbull&#8217;s blog does an excellent job articulating why this is the case for search engines</a> (see also <a href="https://softwaredoug.com/blog/2025/06/03/liberating-search">liberating search from the search engine</a>). Most search engines today natively bake in a lot of logic around query understanding, query expansion, ranking, boosting, rescoring, etc. Such engines expose some ability to tweak this, but a lot of it is more like black magic in the engine.</p><p>But when LLMs are your user, you have transitioned from a dumb client, smart server assumption to a smart client assumption. The LLM is, in many cases, better at doing some of these things like query expansion and query understanding than your system is! And so the traditional breakdowns of what a system should do on its own vs. what it should let the client influence change, and in many cases you want to allow the client to manipulate all of these things in a much more precise, controlled fashion.</p><p>Imagine a web search API that exposed all the ranking systems, all the search metadata, all the query expansion, all the indices, and more to the agent, allowing it to very precisely articulate what it does and doesn&#8217;t want to do for each query. I have spoken to multiple senior people at leading AI labs who have begged the major web search API providers for agents to build this as they know it would improve their agent&#8217;s quality - but thus far no one has built it. They have clearly seen in internal evals that each incremental degree of control improves the agent&#8217;s quality on web retrieval. Instead, we&#8217;re left with web search APIs that still treat the entire search engine as a black box, supporting at most a few query parameters on top of your query.</p><p>When you are serving humans, exposing too much customization and flexibility can really shoot you in the foot - the system becomes too complex to learn, it is too easy for your users to mess things up, and the benefits your users get from such degree of an open system is often minimal. But, this all changes when you are serving agents - who in many cases are much better at conceptualizing the full scope of the system, and are often better at dynamically tweaking all of these parameters.</p><p><a href="https://www.shaped.ai/blog/why-grep-is-beating-your-vector-db">This blog post by Shaped</a> is a great illustration of this concept - discussing how <em>&#8220;information retrieval is moving from a static pipeline to a dynamic decision tree, where the agent builds and provisions the right tool on the fly based on the data&#8221;. </em>They argue the right architecture for that is an information retrieval system that lets an agent dynamically compose arbitrary sets of retrieval systems as it does its work, rather than a more opinionated retrieval system that always does things in a pre-determined or pre-configured way.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qLat!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fedc97-de48-47a3-9bf9-6c29e869f451_1319x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qLat!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fedc97-de48-47a3-9bf9-6c29e869f451_1319x768.png 424w, https://substackcdn.com/image/fetch/$s_!qLat!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fedc97-de48-47a3-9bf9-6c29e869f451_1319x768.png 848w, https://substackcdn.com/image/fetch/$s_!qLat!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fedc97-de48-47a3-9bf9-6c29e869f451_1319x768.png 1272w, https://substackcdn.com/image/fetch/$s_!qLat!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fedc97-de48-47a3-9bf9-6c29e869f451_1319x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qLat!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fedc97-de48-47a3-9bf9-6c29e869f451_1319x768.png" width="1319" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99fedc97-de48-47a3-9bf9-6c29e869f451_1319x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1319,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qLat!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fedc97-de48-47a3-9bf9-6c29e869f451_1319x768.png 424w, https://substackcdn.com/image/fetch/$s_!qLat!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fedc97-de48-47a3-9bf9-6c29e869f451_1319x768.png 848w, https://substackcdn.com/image/fetch/$s_!qLat!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fedc97-de48-47a3-9bf9-6c29e869f451_1319x768.png 1272w, https://substackcdn.com/image/fetch/$s_!qLat!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fedc97-de48-47a3-9bf9-6c29e869f451_1319x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The same idea likely applies to many other types of systems - such as query planning and query optimization in SQL databases. We already see agents being potentially more effective at aspects of query optimization than traditional SQL optimizers - <a href="https://www.databricks.com/blog/are-llm-agents-good-join-order-optimization">such as join order selection</a> (caveating cost/latency considerations). Why shouldn&#8217;t agents be able to influence rebalancing, write vs. read amplification, consistency vs. availability, and other common tradeoffs in systems?</p><p>I correspondingly think the value of composable, flexible, and &#8220;plugin&#8221;-able systems will go up a lot. For example, in SQL engines, might <a href="https://datafusion.apache.org/">Datafusion</a> end up being a more powerful tool than <a href="https://duckdb.org/">DuckDB</a> for agent usage given Datafusion is so much more modular?</p><h3>Simulation and sampling</h3><p>Agents benefit from being able to easily run preliminary tests of ideas in a fast, cheap, non-destructive way before fully doing something. Aside from branching, there are a number of other ways a system might be able to support such workflows.</p><p>One is simulation - tooling that makes it easy to mock or mimic what might happen to a production system were a given change to happen. <a href="https://github.com/project-vera/vera">Vera is a cool example of a third party tool trying to do this</a>, though I also think there is an opportunity for production systems to more natively support this kind of workflow.</p><p>Second is sampling - a system that can return a preview or directional overview of what will happen if something is done, before it fully occurs.</p><p>A simple traditional version of this is how the statistics engines in most SQL query engines can give a likely estimate or bound of the number of rows that will be queried or the estimated cost of a query. These sorts of flows make it easy to give the agent rapid feedback <em>before</em> a high cost or irreversible action is taken.</p><p>It&#8217;s interesting to consider what it might look like to really design a system around these sorts of probing or exploratory queries such as <em>&#8220;SELECT * LIMIT 5&#8221; or &#8220;SELECT category, COUNT(*) AS C From table GROUP BY 1&#8221;</em>. A few things that come to mind include:</p><ol><li><p><strong>Approximate query processing </strong>- Exploratory queries are, almost by definition, not very correctness constrained. One could in theory take advantage of this in numerous ways, such as having a long-lived cache for sampling queries you are okay being an hour stale, or allowing the user to provide a correctness bound as a query parameter. <a href="https://datasketches.apache.org/">Sketches</a> are a popular version of the latter in OLAP databases to efficiently compute an estimate of mean, median, etc, though one could imagine the idea being taken much further - such as allowing a more generalized &#8220;precision&#8221; parameter on a query.</p></li><li><p><strong>Specialized storage</strong> - Why not have an optimized physical layout on disk for a sample of a table, if it will be one of the most popular types of query an agent runs on that table?</p></li></ol><p><a href="https://clickhouse.com/blog/agent-facing-analytics#improved-discoverability">Clickhouse directly touches on this in a recent blog where they discuss how &#8220;improved discoverability&#8221;</a> is likely one of the key tenets you need to design around when building an OLAP system for agents. They propose building SQL extensions that make this easier - <em>&#8220;Think of it like a server-side version of pandas.describe() designed specifically for agents.&#8221;</em></p><p>The <a href="https://arxiv.org/pdf/2509.00997">&#8220;Supporting Our AI Overlords&#8221; paper</a> outlines a much more ambitious version of optimizing for sampling queries. They discuss designing a database around &#8220;probes&#8221;, which are semi-structured queries that the system can answer to steer the querying agent. These might include exploratory queries that aim to identify relevant tables or sub-tables (&#8221;Which tables relate to sales?&#8221;), contextual queries that give background context which allow the system to nudge the agent in the right way (&#8221;I am trying to gut check if east coast sales team is doing better than west coast&#8221;), or accuracy &amp; termination criteria (&#8221;I only need to get a rough sense on whether the east coast team is doing a lot better than the west coast&#8221;). The paper explores how one could dramatically redesign a database to support these sorts of inquiries natively, essentially treating this as a first class type of query with its own optimizer alongside traditional SQL queries.</p><p>Taking this idea further, you might imagine how a system could be designed to proactively recommend followup queries or related lines of inquiry after an agent makes a query - essentially becoming more like a proactive recommendation system than a passive execution engine.</p><p>The broader point is that agents benefit a lot from small nudges, directional answers, and fast feedback - and there are a lot of ways to design a system around this.</p><h3>Local Execution</h3><p>Agents particularly benefit from having local, embedded, lightweight versions of systems that they can easily test and iterate on without having to go through the headache of manipulating production infrastructure which has more state, more risk, and more cost associated with it.</p><p>As an example, I think that coding agents are <em>massively</em> increasing the need for a way to reliably emulate github actions locally - leading to projects like <a href="https://agent-ci.dev/">Agent CI</a>. I would argue grep&#8217;s popularity in coding agents is another very good example of this - in many cases it is more efficient for an agent to use the lightweight local search system than the heavy remote search system.</p><p><a href="https://www.youtube.com/watch?v=hZiTg_995e4">MotherDuck&#8217;s original vision</a> of an OLAP data processing system that was built around dual client + server side execution by decomposing a query plan across local storage and cloud storage is interesting idea to potentially revisit. I could see these sorts of hybrid execution architectures becoming more popular in a world of agents where you want the compute speed of the system to be impedance-matched with the reasoning speed of the agent.</p><h3>Query Complexity</h3><p>Agents tend to write much more complex queries than humans. Often, they are far more &#8220;well-specified&#8221;, by that I mean taking advantage of a full set of parameters or operators. </p><p>Search is an obvious case of this, where a human search query is often no more than 4-6 words (whether on web, an eCommerce site, or somewhere else), but agents will write much longer search queries mapping to exactly what they are looking for. </p><p>This structurally changes how you design a search engine. For example, <a href="https://turbopuffer.com/blog/fts-v2-maxscore">see how Turbopuffer has updated its search techniques to account for this type of query</a>. Many agents actually try to write web search queries that exceed the query length permitted by most web search engines of 32 words - their system is not structurally designed to fulfill queries longer than that. </p><p>In a related vein, I think <a href="https://ahrefs.com/blog/google-advanced-search-operators/">&#8220;operators&#8221;</a> - or specialized precise filters in web search engines such as &#8220;site:&#8221; and &#8220;link:&#8221; - will need to make a come back for agents. Many web search operators slowly deprecated many operators over the past decade as humans tend not to use them, and they add indexing and query engine complexity on the backend. </p><p>This idea applies broadly across query engines and APIs. Because agents are quite capable at understanding documentation and fully taking advantage of very specialized query parameters, the juice may be worth the squeeze to add far more niche query configurations or API parameters if they allow an agent to more precisely define it&#8217;s intent and objective. </p><h3>Other, smaller ideas</h3><ol><li><p><strong>Fail fast</strong> - As we&#8217;ve discussed, agents benefit a lot from fast feedback loops. Another version of this is designing systems to be able to fail much sooner via pre-processing, type checks, and other types of safety checks. This is harder when serving humans because humans tend to be lazy (e.g. see how humans love Python), but agents are very good at annotating code that they write. So, it may be much more tenable to build SDKs and CLIs that have strong typing and other types of validation annotations natively built in</p></li><li><p><strong>Transactionality</strong> - I think agents will favor systems that have strong transactionality guarantees built into to complex sequences of operations. For example, if a data agent needs to ingest data, transform it, and move it somewhere else, the entire loop should be reversible and atomic. It should be impossible to hit a partial execution result. This is a very difficult primitive to build in complex distributed systems, but makes it much more tenable for the agent to try, fail, and iterate. </p></li></ol><h3>Putting it together - an observability case study</h3><p>I&#8217;ll round this out with a case study from Firetiger, which recently wrote a great post on <a href="https://blog.firetiger.com/we-built-an-observability-database-for-agents-not-humans/">designing an observability database for agents</a>. </p><p>Observability databases for humans need to primarily optimize for the dashboard use case - low latency queries over very large datasets. A lot of the traditional optimizations in observability serve this use case by attempting to minimize the cost and latency of these large queries, such as by pre-aggregating data, sampling data, caching results, or similar. </p><p>As we have discussed, agents, in contrast, want to explore large amounts of data in a much more parallel, exploratory, and dynamic way. The Firetiger team touches on how this greatly increases the importance of:</p><ol><li><p><strong>Supporting exhaustive, high cardinality data</strong> - as agents have semi infinite processing bandwidth, can sift through everything, and don&#8217;t just want the top level aggregates</p></li><li><p><strong>Supporting immense query volume due to parallel explorations</strong> - increasing the importance of separating compute from storage, having serverless compute workers that can spin up and down quickly, and having strong isolation between workers so they can not block or compete with each other. Basically, you want to optimize for throughput and concurrency, not latency</p></li><li><p><strong>Dealing with the small files problem for fresh, quickly accessible data</strong> - via techniques like an ingest service that merges concurrent writes into tables, and intelligently compacting and expiring older data &amp; metadata</p></li><li><p><strong>Data discoverability &amp; sampling</strong> - Tools for agents to discover what data exists and how to query it</p></li><li><p><strong>Schematization</strong> - To make it easier for agents to understand how to navigate what is normally unstructured telemetry data and increase token efficiency</p><p> </p></li></ol><p>Note how many of these are <em>hard</em> system tradeoffs - optimizing for aggregates vs. random specialized reads, optimizing for latency vs throughput, optimizing for concurrency vs. serialized operations. These are not minor differences or abstraction sugarcoating. </p><p>I thus think it is invariable you will see a new version of every type of computer science system emerge that is designed for agents. The sheer number of ways you can redesign each system is too substantial for this to not be the case. </p><p>More fundamentally, I suspect that agents will end up blurring the lines of traditional systems categories, creating new categories all together. One obvious example of this is that agents seem to blur the lines between OLTP and OLAP significantly, which is partially why Databricks is pushing the <a href="https://youtu.be/tpqqZTcFLA0?si=QDuZvRXEubt4ZS1z&amp;t=48">&#8220;lakebase&#8221; architecture</a> so much (<a href="https://aicouncil.com/talks26/from-postgres-to-clickhouse-and-back-building-a-unified-oltp-olap-database-for-ai-workloads">see also this Clickhouse talk from last year)</a>. But, I think this will play out in more complex ways that are difficult to predict right now. </p><h3>Infrastructure companies deeply exploring these ideas</h3><p>I am sure there are some I am missing, and of course some of these ideas were popularized in systems completely outside of the scope of AI agents but become more important when serving agents, but nonetheless here is a rough take on the startups more aggressively pursuing the types of ideas outlined in this blog post, separated by category:</p><ol><li><p>Git &amp; Filesystems - <a href="https://relace.ai/">Relace</a>, <a href="https://mesa.dev/">Mesa</a>, <a href="https://pierre.computer/">Pierre</a>, <a href="https://ersc.io/">ESRC</a></p></li><li><p>CI - <a href="https://www.blacksmith.sh/">Blacksmith</a>, <a href="https://agent-ci.dev/">AgentCI</a></p></li><li><p>Object Storage - <a href="http://tigrisdata.com/">Tigris</a></p></li><li><p>Web Search - <a href="https://exa.ai/">Exa</a>, <a href="https://parallel.ai/">Parallel</a>, <a href="https://www.firecrawl.dev/">Firecrawl</a></p></li><li><p>OLAP - <a href="https://www.bauplanlabs.com/">Bauplan</a>, <a href="https://motherduck.com/">Motherduck</a>, <a href="https://clickhouse.com/">Clickhouse</a>, <a href="https://www.firebolt.io/">Firebolt</a></p></li><li><p>OLTP - <a href="http://neon.com/">Neon</a> (Databricks), <a href="https://xata.io/">Xata</a>, <a href="https://turso.tech/">Turso</a></p></li><li><p>Observability - <a href="https://www.firetiger.com/">Firetiger</a>, <a href="https://nominal.dev/">Nominal</a></p></li><li><p>Search &amp; Recommendations - <a href="https://turbopuffer.com/">Turbopuffer</a>, <a href="https://www.trychroma.com/">Chroma</a>, <a href="https://www.shaped.ai/">Shaped</a>, <a href="https://www.lancedb.com/">Lance</a>, <a href="https://hornet.dev/">Hornet</a></p></li><li><p>General Sandbox/Compute - <a href="https://modal.com/">Modal</a>, <a href="https://www.daytona.io/">Daytona</a>, <a href="https://e2b.dev/">e2b</a>, <a href="https://sprites.dev/">Sprites</a>, <a href="https://opencomputer.dev/">OpenComputer</a></p></li></ol><p>I am <strong>extremely</strong> interested in investing in startups using ideas like these to rebuild or rethink infrastructure categories, and in talking to people redesigning large existing systems along these lines. Please get in touch if so - davis @ innovationendeavors.com</p><p></p><p><em>Thanks to Chris Riccomini, Jacopo Tagliabue, Apurva Mehta, &amp; Vedran Jukic for providing feedback &amp; input on this.</em></p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[The two software development stacks]]></title><description><![CDATA[As a developer tools startup, do you build for the agent-only stack, the AI + humans stack, or both?]]></description><link>https://davistreybig.substack.com/p/the-two-software-development-stacks</link><guid isPermaLink="false">https://davistreybig.substack.com/p/the-two-software-development-stacks</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Thu, 16 Apr 2026 19:27:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!A25H!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65712cc2-1fff-482c-ac2c-f8c57efa1913_400x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today, virtually all developer tool startups are spending their time trying to rethink their product to serve<em> </em>software engineer with fleets of AI coding agents at their disposal. AI coding agents are changing most, if not all, workflows in the software development lifecycle and are putting enormous pressure on existing tooling for humans to adapt. </p><p>Yet, at the same time, a parallel version of the software development lifecycle is emerging - the &#8220;agent only&#8221; stack. This is the software development stack for code that no human ever sees &#8212; code that is written, built, tested, and deployed by an agent completely outside of the scope of a traditional software engineering team. A simple example of this would be any &#8220;ephemeral&#8221; code written Claude as you interact with it. </p><p>Almost no one is thinking about building developer tools for this parallel SDLC, yet I am increasingly confident that all layers of the existing SDLC will be rethought for it. </p><p>My central argument in this post is that more developer tools companies should consider going after this market, rather the &#8220;human + AI&#8221; market, as it is very new, very rapidly growing, utterly underserved, and will likely ultimately eclipse the size of the traditional software development lifecycle tools market. </p><h3>The agent-only stack</h3><p>The most obvious version of the &#8220;agent-only&#8221; stack today is vibe coding applications. Companies like Lovable, Bolt, and Replit are products where, every time a user interacts with the product, a substantial amount of code is being generated behind the scenes. That code needs to be tested, compiled, executed, and hosted somewhere. But it is completely separate from the way we traditionally think about a software engineering lifecycle - there is no pull request, no human code review, and in 99% of cases no human will ever look at that code. The code is an invisible implementation detail rather than an artifact a team of engineers collaborates on. </p><p>You are already starting to see &#8220;developer tool&#8221; startups serve this market in a specialized way - e.g. a few of the major vibe coding startups now use <a href="https://code.storage/">code.storage</a> as their headless git storage layer. This is interesting for two reasons. First, <a href="https://pierre.computer/">Pierre</a>, the parent company of code.storage, was originally trying to displace Github for humans for a few years, and recently decided to just pivot fully into this direction instead. Second, code.storage is very clearly not attempting to serve the human software engineer use case at all - but is rather going all in on trying to serve the agent-only use case. </p><p>I would also argue that the sandbox companies are are version of this - they are essentially cloud development environments for agents, not humans. Indeed, one of the most prominent companies in agent sandboxes, Daytona, was originally building CDEs for humans. This is another success case of a developer tool startup that went all in on the agent-only stack, to great success. </p><p>While vibe coding was the first customer segment, the market for these sorts of ideas now extends far beyond just vibe coding startups. Any product that produces dynamically generated UIs or encourages &#8220;personal software&#8221; as a pattern are using code generation agents to produce code under the hood. <a href="https://davistreybig.substack.com/p/all-agents-will-become-coding-agents">Almost every agent using a sandbox is using code generation for things like tool calling, file manipulation, data processing, and similar even if the agent is not in of itself a code gen agent</a>. Any AI tool that supports that idea of &#8220;Skills&#8221; is writing persistent code that needs to be stored, versioned, and ultimately support operations like merging or approvals. Any Claude Cowork style product is producing numerous files &amp; artifacts that need to be treated like code. </p><p>I am quite positive that this agent-only software development stack will end up recreating most of the key ideas that exist in the human SDLC. Code storage is the first step, after which will follow testing, CI, collaborative editing/approval workflows (amongst agents), CD, and monitoring, exactly mirroring the progression that occurred from 2005-2020 with the cloud software development stack for humans.</p><p>In simpler terms - there is going to be an invisible, &#8220;headless&#8221; SDLC that ends up being a core component of most, if not ultimately all, agents. </p><h2>The strategic question for dev tool startups</h2><p>This brings me to what I think is the most consequential strategic question for developer tool startups right now: which stack do you build for?</p><p>If you are a dev tool startup working on some aspect of the software development lifecycle, you have three options:</p><p>1. <strong>Adapt for the human-assisted stack</strong> &#8212; Take what you are building and evolve it for a world where human engineers use agents as part of their existing workflow. This is the obvious move, and it is where most of the market&#8217;s attention is focused today.</p><p>2. <strong>Build for the agent-only stack</strong> &#8212; Pivot or orient your product entirely around serving the needs of agent-generated code that humans never touch. This space is much earlier, more unknown, and more rapidly changing &#8212; but it is also completely greenfield.</p><p>3. <strong>Try to serve both</strong> &#8212; Build a product that straddles both worlds. In some cases, this is feasible. An AI code review tool, for example, could plausibly serve both the human use case (by integrating with GitHub Actions and reviewing PRs before humans look at them) and the agent use case (by being a Claude code hook that runs micro-reviews as the agent writes code, completely outside the scope of Github or humans reviewing the review).</p><p>Increasingly, my perspective is that if you are a dev tool startup, the right answer is to go all in on the agent-only use case and to deprioritize &#8212; or even ignore &#8212; the human use case. There are several reasons for this.</p><p>First, the market is larger and growing faster. I believe that very shortly, the volume of agent-generated code produced in agent-only contexts &#8212; vibe coding apps, vertical AI agents, autonomous systems &#8212; will surpass the volume of code produced in human software engineering teams. </p><p>Second, the opportunity is dramatically more underserved. The human-assisted stack, while evolving, has a rich ecosystem of existing tools and well-understood workflows. The agent-only stack has essentially nothing purpose-built for it today and no &#8220;status quo&#8221; solutions. Consider my code storage example earlier - even <em>if</em> your code storage paradigm was dramatically better than git and Github for humans using AI agents, displacing Github is extraordinarily difficult because of the ecosystem &amp; network effects around Github. Every other developer tool integrates with Github, every software engineer is used to Github, and every team has a huge amount of config state stored in their CI pipelines. None of this is an issue if you serve the agent vibe coding an app in Lovable. </p><p>Third, the design constraints are fundamentally different. Agent-only developer tools must be built API-first and headless, essentially becoming more like &#8220;infrastructure&#8221; than a SaaS tool. Deployment may need to be cloud-prem rather than SaaS. The business model must be usage based, not seat based. UIs and workflows don&#8217;t matter, and in many cases you need to rethink the core abstractions to serve the agent use case. Finally, fundamental assumptions regarding infrastructure may differ - for example, see how many vibe coding apps struggle with github rate limits on repo creation because repo creation was traditionally a very rare/occasional thing for a human software team, but a vibe coding app probably wants to create a repo <em>per user session</em>. These sorts of factors are also why it will be very hard to serve <em>both</em> agents and human - these are hard fork decisions that are difficult to blend. </p><p>Consider observability. What would an observability solution look like for the agent-only stack? All config and setup would need to be via API, dashboards would be completely irrelevant, you&#8217;d want to design around an autonomous feedback loop where issues in the deployed software immediately trigger the agent to write new code or update code, and you may very well want to redesign or reconsider the database layer because you will need to deal with a very high volume of &#8220;micro apps&#8221; rather than a small number of &#8220;heavy apps&#8221;  </p><p>Another interesting one to consider is task management. What would a Linear or Asana look like for the &#8220;agent-only&#8221; stack? Is there room for a product like this? </p><p>The hard part about building for this market is it is still so new and emerging. But, that is also what makes it exciting. Today, there are an extremely small number of companies I am aware of focused entirely on this market segment: </p><ol><li><p><strong>Code storage &amp; versioning (e.g. Github for agent-only stack)</strong> - https://code.storage/, https://mesa.dev/, https://www.freestyle.sh/</p></li><li><p><strong>Sandboxes (eg. developer environments for agent-only stack) - </strong>Daytona, e2b, Runloop, etc</p></li><li><p>Essentially nothing in testing, review, CICD, observability, task management, etc</p></li></ol><p>As a result, I think this is a really rich area to explore as a startup right now. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Engines & kernels, not applications]]></title><description><![CDATA[Why LLMs will turn most engineering & design software into infrastructure]]></description><link>https://davistreybig.substack.com/p/engines-and-kernels-not-applications</link><guid isPermaLink="false">https://davistreybig.substack.com/p/engines-and-kernels-not-applications</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Wed, 28 Jan 2026 00:49:49 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4b94f9e3-0456-44e1-9122-66d362708b4c_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A large cohort of the most valuable software companies in the world can be thought of as a very sophisticated engine or kernel, with a UI on top. Examples of this include:</p><ol><li><p>Solidworks - CAD Geometry Kernel + UI</p></li><li><p>Ansys - Simulation engine + UI</p></li><li><p>Figma - Web-based vector graphics engine + UI</p></li><li><p>After Effects - Motion graphics kernel + UI</p></li><li><p>Premiere - Video processing engine + UI</p></li><li><p>DaVinci Resolve - Color grading engine + UI</p></li><li><p>Unreal Engine - Game engine + Editor UI</p></li><li><p>Wolfram Mathematica - Symbolic computation engine + UI</p></li><li><p>Gurobi - Operations research solver + UI</p></li><li><p>Revit - BIM engine + UI</p></li><li><p>Hex/Jupyter - OLAP Python kernel + UI</p></li></ol><p>Essentially, almost any product serving sophisticated &#8220;builders&#8221; (engineers, architects, designers, etc) looks like this. </p><p>For the most part, I would argue that somewhere between 90-99% of the IP and value of these products lies in the computational complexity of the engine, with the UI and user workflow for the most part really just being a UI that maps to the API surface of the engine. Indeed, aside from Figma, I think almost none of the the products I list above can be considered &#8220;elegant&#8221; or &#8220;simple to use&#8221; - but people learn to use them anyways because they are powerful. </p><p>Traditionally, it was critical for such products to build out and think about the UI as the main (if not <em>only</em>) way for people to use these products. An engine without the workflow would have been completely inaccessible to the people who need to use these tools. </p><p>However, large language models (specifically coding agents) are beginning to change this dramatically. Coding agents are very good at assembling on-the-fly UIs. They are also amazing at mapping a complex user request into a set of API calls. And correspondingly, they seem quite promising for solving the classic challenge these products have in terms of accessibility, learning curve, &amp; product complexity. </p><p>BlenderGPT is a fun, but simple example of this, which uses LLMs to script Blender, the 3D design software. The &#8220;stack&#8221; essentially becomes LLM + Blender Engine, with the UI of Blender becoming somewhat irrelevant. </p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;473424e1-1b97-47d2-9510-7ec734c27f44&quot;,&quot;duration&quot;:null}"></div><p>I think we are already at the point where this paradigm of a Claude CoWork style interface on top of one these engines is in some cases more powerful and flexible than simply using the application itself. </p><p>The first vector by which this occurs is that AI allows for automation of larger, complex, and especially more procedural tasks. It can map semantic intent to a large loop of doing a bunch of things in a certain order - something you could of course do yourself, but which would take forever. </p><p>The second vector by which this occurs is that AI can help with discovery and fully &#8220;accessing&#8221; the breath of what the tool offers. Even very experienced professionals in these domains are often unaware of the full range of functionality embedded in these very complex engines. As an example, even hardware engineers with 10-20 years of experience often don&#8217;t feel like they are experts in CAD simulation. AI makes these sorts of workflows that matter, but are outside of the &#8220;core&#8221;, accessible. </p><p>The third vector is flexibility. You can have something closer to personalized, ephemeral UI as you do things - which in some cases is more powerful than the fixed UI paradigms of these tools. This also allows for things like progressive disclosure of complexity. </p><p>You are starting to see bits and pieces of this in the wild. <a href="https://marimo.io/">Marimo</a> is popular partially because the notebooks are stored as pure python, meaning that you can treat Marimo more like the &#8220;engine&#8221; of a data science notebook. <a href="https://rive.app/">Rive</a> is interesting because it can be used as an embedded animation rendering engine fully programmatically, something note really possible with AfterEffects. </p><p>Similarly, there are now a number of startups that are applying ChatGPT style UIs on top of these engines - similar to BlenderGPT. </p><p>As LLMs continue to improve and progress, I think that the right way to think about this type of software will be purely as an engine or kernel, not really as an &#8220;application&#8221;. And I think this will be very, very disruptive to many of these categories as a result. </p><p>I specifically think this creates two general themes of startup opportunity that are interesting:</p><ol><li><p><strong>Code-gen based automation of existing &#8220;Engine + UI&#8221; Tools</strong> - Build an LLM based, conversational UI that allows one to dynamically manipulate products like Blender, Unreal, Premiere, or similar via code generation. Essentially, use AI to treat the existing products like engines, not applications. I think in many cases this can both expand the scope of who can use these sorts of tools, as well as vastly increase the productivity of the people already using these tools</p></li><li><p><strong>Build an &#8220;engine&#8221; startup in one of these categories designed for programmatic use</strong> - Ultimately, most of these products were <em>not</em> designed to be used more like infrastructure than like applications. While many expose some kind of scripting or extension API, they are ultimately limited. And more importantly, if you were purposefully designing the interface for an agent writing code against it, it would almost certainly look different. Systems for agents look different, as we have seen with how many traditional software infrastructure categories are being rewritten for agents. </p></li></ol><p>What&#8217;s interesting about #1 is that you can finally side-step the biggest traditional challenge in these spaces - feature density - because you can access all existing features via code generation. What&#8217;s interesting about #2 is that you can start with a very small/specific scope, because in the programmatic case you often just need to do 1-2 things better, vs. rather than having to do everything better because you are trying to replace the core system of engagement. In other words - LLMs structurally remove the classic reasons it has been hard to build new startups in these categories. </p><p>A few years ago, I invested in a company, <a href="https://www.modyfi.com/">Modyfi</a>, that built a completely novel GPU-accelerated graphics engine that ran inside the browser. It allowed for real time rendering &amp; compositing of motion graphics in situations where AfterEffects might have needed 10+ minutes to render. At the time, they also attempted to build a novel UI &amp; workflow tool to make use of this engine, but this was very difficult to do because it was going to take forever to be at feature parity with AfterEffects from a UX perspective and workflow perspective. The company eventually sold to Figma.  </p><p>I think that if Modyfi were started today, the better approach may actually be to try to monetize the <em>engine</em> mostly via AI-based code generation as the interface. Essentially, Modyfi becomes more like a &#8220;tool&#8221; in the agent world than an application. This would have saved the team so much time &amp; money, let them get to market faster, and honestly played more into the companies&#8217; unique strengths. </p><p>I am very interested in teams going after ideas along these lines. All of these feature dense &#8220;engine&#8221; categories are much more up for grabs than they ever were before. Shoot me a note if you&#8217;re building in this area - davis @ innovationendeavors.com</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[All agents will become coding agents]]></title><description><![CDATA[Code generation will be the most ubiquitous tool for AI Agents]]></description><link>https://davistreybig.substack.com/p/all-agents-will-become-coding-agents</link><guid isPermaLink="false">https://davistreybig.substack.com/p/all-agents-will-become-coding-agents</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Tue, 13 Jan 2026 23:08:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3f21867e-88a2-431a-8a84-a157a6fcb270_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Yesterday, Anthropic launched <a href="https://claude.com/blog/cowork-research-preview">Claude Cowork</a>, a new consumer product experience that helps you get work done by putting a rich UI on top of Claude Code. Anthropic themselves admits that this came as a result of seeing countless Claude Code power users using Claude Code for things that have nothing to do with software engineering - like <a href="https://open.substack.com/pub/peteryang/p/automate-your-life-with-claude-code-teresa-torres?utm_campaign=post-expanded-share&amp;utm_medium=web">managing your personal todo list</a> or <a href="https://x.com/madhavsinghal_/status/2009062384846152052?s=20">handling your emails</a>. </p><p>It turns out that the &#8220;LLM + Computer&#8221; agent paradigm that Claude Code pioneered, where an LLM has access to a file system, a bash terminal, code generation, and similar linux computing primitives is <em>exceptionally</em> powerful - regardless of whether you actually need to write code as part of your actual task. </p><p>I increasingly think it is likely that <em>all</em> agents will move towards this architectural design pattern. In other words, all agents will become coding agents. </p><p>This post will explore early examples of this across different applied AI startups, discuss reasons for why this architecture is so powerful, and explore its downstream implications on startup opportunities in applied AI and AI infrastructure. </p><h3><strong>Code generation as a universal tool</strong></h3><p>Why does code generation matter for non-coding agents? Lets begin by exploring the common set of reasons why code generation is so effective for non-software-engineering agents. </p><h4>Code as a reasoning layer</h4><p>The vast majority of AI startups need to do nuanced, mathematical reasoning of some form as part of their core function. AI accounting startups need to do spreadsheet manipulation. AI financial research startups need to be able to pivot and filter financial data. AI document processing startups need to manipulate numerical data extracted from tables and aggregate/summarize it. AI research scientists will need to analyze research results.  </p><p>Doing this type of precise reasoning in token space is very, very unreliable due to how language models tokenize language. What is much more effective is treating all numerical manipulation as a code generation problem, similar to <a href="https://arxiv.org/abs/2512.20745">AgentMath</a>. </p><h4>Code as a tool-calling layer</h4><p>Traditional tool-calling paradigms (ala <a href="https://arxiv.org/abs/2210.03629">ReAct</a>) have the LLM repeatedly process the context, identify the next tool to use, run that tool, and repeat. </p><p>This is both inefficient (since it requires calling an LLM for every tool call) and more prone to mistakes than to ask the LLM one time to produce code to run a sequence of tool calls that allow the agent to make progress. </p><p>For example, imagine an agent is tasked to synthesize a bunch of financial records, and has access to a company search tool &amp; a fetch financials for company tool. What you want to do is: </p><ol><li><p>Search for all companies</p></li><li><p>For each company, fetch financials</p></li><li><p>For each financial record, compute a score</p></li><li><p>Save the result </p></li></ol><p>This task is much more effectively achieved by having the LLM write the code to execute this loop once, and to then <em>procedurally</em> execute the loop, rather than having linearly call tool &gt; reason about next step &gt; call tool &gt; reason about next steps etc. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uzHC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5be2bfa-dd15-4a6f-835b-d318e6142c61_1530x588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uzHC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5be2bfa-dd15-4a6f-835b-d318e6142c61_1530x588.png 424w, https://substackcdn.com/image/fetch/$s_!uzHC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5be2bfa-dd15-4a6f-835b-d318e6142c61_1530x588.png 848w, https://substackcdn.com/image/fetch/$s_!uzHC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5be2bfa-dd15-4a6f-835b-d318e6142c61_1530x588.png 1272w, https://substackcdn.com/image/fetch/$s_!uzHC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5be2bfa-dd15-4a6f-835b-d318e6142c61_1530x588.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uzHC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5be2bfa-dd15-4a6f-835b-d318e6142c61_1530x588.png" width="1456" height="560" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5be2bfa-dd15-4a6f-835b-d318e6142c61_1530x588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:560,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:100170,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/183612266?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5be2bfa-dd15-4a6f-835b-d318e6142c61_1530x588.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uzHC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5be2bfa-dd15-4a6f-835b-d318e6142c61_1530x588.png 424w, https://substackcdn.com/image/fetch/$s_!uzHC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5be2bfa-dd15-4a6f-835b-d318e6142c61_1530x588.png 848w, https://substackcdn.com/image/fetch/$s_!uzHC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5be2bfa-dd15-4a6f-835b-d318e6142c61_1530x588.png 1272w, https://substackcdn.com/image/fetch/$s_!uzHC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5be2bfa-dd15-4a6f-835b-d318e6142c61_1530x588.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://vmisra.notion.site/Ephemeral-code-and-yes-agents-1963d301380b4a90b9c1477e8ef13584">This blog post</a> is a great deeper dive on this concept, and t<a href="https://blog.replit.com/automated-self-testing">his recent post by Replit reflects the same idea</a>. <a href="https://simonwillison.net/2025/Oct/16/claude-skills/#skills-depend-on-a-coding-environment">Claude is moving its default tool-use paradigm to Claude Skills</a>, which stores tools in a file system which can be found via bash and file system commands, is a direct reflection of the market moving in this direction. </p><h4>Code as a context management layer</h4><p>Computing environments provide a powerful substrate for dealing with context management. This <a href="https://www.youtube.com/watch?v=6_BcCthVvb8">video</a> and <a href="https://rlancemartin.github.io/2025/10/15/manus/">blog</a> about context engineering in Manus are some of the best illustrations of this that I have seen. </p><p>Manus stores context in the filesystem of a computing environment, utilizes bash commands &amp; file paths to progressively disclose context and tools, and decomposes most user tasks into some combination of: 1. Web access, 2. Code generation, 3. Context search, 4. Computing utilities (bash, file system, etc). </p><p>The reason this works so well is that most context &amp; tools are, by default, hidden from the LLM at any step, but the LLM always has access to a few utilities (e.g. bash commands) that allow it to progressively disclose data or tools it may need. This avoids context rot, and also saves you a <em>lot</em> of cost and latency thanks to minimizing token usage. </p><p>Note that using code for tool-calling is a particularly important version of this. <a href="https://www.reddit.com/r/Anthropic/comments/1nkdtiw/mcp_server_context_rot/">Loading up a ton of MCP servers completely overloads the context window of most models</a>, but having a small set of composable tools + code as an orchestration layer allows this to be avoided. </p><p>A lot of research work is now taking these ideas further. For example, <a href="https://github.com/alexzhang13/rlm-minimal">RLMs</a> explore an agent architecture where the context is represented as a variable in memory that is not shown in any way to the LLM unless it specifically asks for it using various tools (grep, peeking, etc). </p><p>I think this will become the predominant pattern for context engineering - treat context as data that can be dynamically accesses via a small set of powerful primitives (e.g. search). </p><h4>Code for universal interoperability</h4><p>The most effective AI products meet you where you are, allowing you to input data in any way (e.g. upload any file type) or integrate them into whatever systems you use. However, it is difficult if not impossible to pre-build every integration all your users may want, or a custom tool for any kind of input the user may provide. </p><p>What can work - though - is allowing your agent to write code to dynamically process any input, write any last mile integration, or do anything on the web (via browser use) or on your computer (via computer use). </p><p>A simple, but illustrative, example of this is how recent advances in code generation models have suddenly allowed an influx of new &#8220;AI Copilot&#8221; products to be built that help automate IDE-like products that lack robust plugin or extension ecosystems. You can&#8217;t build a Cursor-style product for tools like Adobe Premiere, Adobe After Effects, Solidworks, Ansys, and Cadence because these tools are not open source and don&#8217;t have fully expressive extension ecosystems, but they all have scripting languages one can write code against.  </p><p>It is almost a truism that AI products are more effective the more data that they can reference, and code generation is the best way to allow maximum flexibility on data ingestion. </p><h4>Code is infinitely expressive</h4><p>ChatGPT used to have specialized pan &amp; zoom tools to manipulate images that users upload. Now, it just writes code to do image processing, which is a much more flexible architecture because the system can do far more than only panning or zooming - but rather achieve the vast majority of image processing tasks. </p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://x.com/corbtt/status/1992978507958456411?s=20&quot;,&quot;full_text&quot;:&quot;coding agents are eating the world.\n\ndid you know that when chatgpt needs to get a closer look at an image, it no longer has specific pan/zoom tools -- it just busts out python and takes a look with matplotlib? &quot;,&quot;username&quot;:&quot;corbtt&quot;,&quot;name&quot;:&quot;Kyle Corbitt&quot;,&quot;profile_image_url&quot;:&quot;https://pbs.substack.com/profile_images/1991638137173688320/cAEpKRUy_normal.jpg&quot;,&quot;date&quot;:&quot;2025-11-24T15:27:58.000Z&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/G6h7JQOasAAMqpe.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/gPsJJIlT9W&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:9,&quot;retweet_count&quot;:3,&quot;like_count&quot;:57,&quot;impression_count&quot;:7533,&quot;expanded_url&quot;:null,&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>If you want your agent to be able to do almost anything your users want, the best way to achieve it is to allow the agent the write code. It is near impossible to fully enumerate all the tools or capabilities a given agent should have in any domain, and so having code as a fallback almost always improves agent quality. </p><h4>Code generation for ephemeral software</h4><p>Everything we have discussed so far has more to do with the internals of how an agent thinks &amp; processes data. However, I also think code generation has a lot of value as a UX paradigm for interacting with agents. </p><p>While natural language interfaces for agents will not go away, there is clear value in having structured UIs that complement or augment natural language. And the best way to achieve this is to allow the agent to dynamically write ephemeral, last-mile software for the user as it does its job. </p><p>Claude Artifacts was the first great example of this, and you now see this pattern of &#8220;conversation on the left, ephemeral UI on the right&#8221; becoming much more common in consumer AI products. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-nqU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1c143c-3550-4c49-ac9e-a0d0962552be_1636x841.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-nqU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1c143c-3550-4c49-ac9e-a0d0962552be_1636x841.png 424w, https://substackcdn.com/image/fetch/$s_!-nqU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1c143c-3550-4c49-ac9e-a0d0962552be_1636x841.png 848w, https://substackcdn.com/image/fetch/$s_!-nqU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1c143c-3550-4c49-ac9e-a0d0962552be_1636x841.png 1272w, https://substackcdn.com/image/fetch/$s_!-nqU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1c143c-3550-4c49-ac9e-a0d0962552be_1636x841.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-nqU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1c143c-3550-4c49-ac9e-a0d0962552be_1636x841.png" width="1456" height="748" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a1c143c-3550-4c49-ac9e-a0d0962552be_1636x841.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:748,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Anthropic Brings 'Artifacts' Split-Screen View to All Claude Users | PCMag&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="Anthropic Brings 'Artifacts' Split-Screen View to All Claude Users | PCMag" title="Anthropic Brings 'Artifacts' Split-Screen View to All Claude Users | PCMag" srcset="https://substackcdn.com/image/fetch/$s_!-nqU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1c143c-3550-4c49-ac9e-a0d0962552be_1636x841.png 424w, https://substackcdn.com/image/fetch/$s_!-nqU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1c143c-3550-4c49-ac9e-a0d0962552be_1636x841.png 848w, https://substackcdn.com/image/fetch/$s_!-nqU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1c143c-3550-4c49-ac9e-a0d0962552be_1636x841.png 1272w, https://substackcdn.com/image/fetch/$s_!-nqU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1c143c-3550-4c49-ac9e-a0d0962552be_1636x841.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I suspect that <em>all agents</em> will end up benefitting massively from this, because regardless of what type of user your AI product serves, they will benefit from having micro-apps and structured UIs to interact with. </p><p>_ </p><p>The TLDR of the above is that - making the core of your agent a coding agent with access to a computing environment gives you such a powerful baseline that it is hard to imagine not doing it at this point. </p><p>Indeed, one of the biggest themes I see right now amongst AI startups are &#8220;Claude Code Wrappers&#8221; going after first-wave RAG/agent startups. In many cases, this strategy actually allows you to build a superior product in weeks thanks to all the benefits of code generation architectures. Claude Code taking so much market share from Windsurf/Cursor/etc despite being a random side project at Anthropic initially is a great example of this - the &#8220;LLM + Computer&#8221; agent paradigm was so powerful in of itself that it outweighed years of feature development. </p><p>I&#8217;d love to, for example, see a startup apply these ideas to &#8220;Deep Research&#8221; as a category. I think you could almost immediately build a 10x better deep research product than what OpenAI &amp; Gemini currently offer by:</p><ol><li><p>Storing all primary data (e.g. web search results, scraped web data) in a file system for ongoing access &amp; context management. Today&#8217;s deep research products discard this data, when instead they could create a dynamic data lake associated with the research report that lets you continue to query/process the data without needing to restart the web search. </p></li><li><p>Using code for mathematical manipulation. Almost all deep research involves numerical manipulation &amp; data analysis. This should be treated more like a code generation problem</p></li><li><p>Making deep research outputs dynamic, living artifacts rather than just static word documents - think a lightweight javascript app rather than a word document. </p></li><li><p>Using code generation to enable additional functionality for data ingestion - e.g. allow me to provide auth credentials or an API key for the deep research agent to write code to login private/proprietary systems and combine that with public web research</p></li></ol><h3><strong>Downstream implications</strong></h3><p>Let&#8217;s presume that everything I have said thus far plays out, and all vertical agents start to make heavy use of code generation. What is the impact of this, and what opportunities might emerge from it? </p><h4>Computing sandboxes become a default agent primitive</h4><p>The first, and most obvious implication is that computing sandboxes for agents become a universal infrastructure need. </p><p>If every agent writes code, then every agent needs to isolate untrusted code execution, and every agent needs access to a filesystem and a terminal. Manus&#8217;s architecture revolving so heavily on <a href="https://e2b.dev/">e2b</a> is illustrative of this. </p><p>Today, sandboxes are mostly used by pure-play code generation agents, but as more of the market moves to code-centric architectures, more AI startups will need to adopt tooling in this space. I suspect that the computing sandbox will be as universal of a need as search/retrieval engines like Turbopuffer, Chroma, &amp; LanceDB.</p><p>While it will certainly be possible to DIY an agent sandbox on top of k8s containers or MicroVMs, I suspect best-in-class products will end up winning, analogous to how few serious AI startups simply use PGVector or FAISS for retrieval. There is a lot of room for technical innovation in this space across:</p><ol><li><p>Virtualization - e.g. cold start times, isolation boundaries</p></li><li><p>Distributed systems - e.g. dealing with persistent state, syncing to remote state, cross-sandbox state, rapidly attaching large state to the VM</p></li><li><p>Environment definition/harness - e.g. what are all the right tools to expose in a sandbox and the right abstractions. Feels like file systems and git are particularly rich areas</p></li><li><p>Features/ergonomics - e.g. passing data in/out of sandbox, remote view of sandbox, etc  </p></li></ol><p>While there are already a number of products in this category - both specialized startups (Modal, e2b, Daytona, Runloop) and offerings from large cloud vendors (Cloudflare, Vercel) - my feeling is that the market here is still very early and there is a lot of room for further innovation. </p><p>I also think it&#8217;s possible that the idea starts to extend beyond "sandbox&#8221; to &#8220;cloud&#8221; - e.g. each agent has access to its own cloud account with a range of computing primitives (VMs, Queues, Databases, Object Storage, etc) rather than centering around just the VM. Pertinent tweet <a href="https://x.com/ShrivuShankar/status/2005647763380285610">here</a>. </p><h4>A new SDLC stack will emerge for ephemeral code</h4><p>If all agents begin to write large amounts of &#8220;ephemeral&#8221; code for reasoning, context management, function calling, and last-mile micro apps, we will invariably start applying many the same concepts that exist in normal software development to this code, including version control, unit tests, integration tests, code review, CICD workflows, and more. </p><p>I think this will end up looking like a high performance, &#8220;headless&#8221; Github that rhymes with existing human-centric SDLC workflows, but differs substantially in a few key ways, such as:</p><ol><li><p><strong>Performance</strong> <strong>- </strong>You&#8217;ll want to be able to run an end-to-end CICD pipeline for the code in the span of seconds (or less)</p></li><li><p><strong>Automation</strong> - The end-to-end workflow will need to be fully automated, and not contingent on human triggers or involvement</p></li><li><p><strong>Git</strong> - I think you can probably rethink many aspects of VCS for this use case. For example, you likely want a VCS paradigm where every change is a commit, that natively supports <a href="https://martinfowler.com/bliki/SemanticDiff.html">semantic diffs</a>, and that allows for extremely parallel branching &amp; conflict resolution. You may also want to store agent trajectories in git (<a href="https://newsletter.pragmaticengineer.com/p/the-pulse-157-internal-dev-tooling">Meta now does this</a>) and use a storage format that allows for better search &amp; OLAP style queries over the git history for the agent to understand what was tried previously. </p></li><li><p><strong>API Design </strong>- My guess is many aspects of the Github API would be done differently for this workflow. For example, you probably want much more flexibility and control over what verification or review layers are applied to each piece of code, rather than a &#8220;monolithic&#8221; CICD pipeline. Some core concepts may also benefit from being modified - for example I am not sure the &#8220;repo&#8221; as the core unit of work is still the right idea given agents will write a lot of very small/micro code chunks. </p></li><li><p><strong>Consumer Facing UI</strong> - You may end up wanting some kind of UI component that allows the <em>end user</em> (e.g. the user of the AI agent product which writes ephemeral code) to somehow visualize or understand or modify the code that was written or used, especially for any ephemeral UX components created </p></li></ol><p>A few companies are early in exploring ideas here like <a href="https://www.relace.ai/">Relace</a> and <a href="https://www.freestyle.sh/">Freestyle</a>, but I think there is a lot more to be done. </p><h4>Specialized &#8220;computing environment&#8221; tools</h4><p>My guess is that there will be startup opportunities to build best in class version of each major &#8220;computing environment&#8221; tool. For example - if file systems remain one of the marquee components of agent architectures, then what would a file system offering built from first principles for agents look like? </p><p>I think most of these opportunities will look like open sourcing a free library that can be included in whatever sandbox provider or offering you are using, and then monetizing a cloud layer on top of that that is needed for multi-agent systems, very long running agents that might pause &amp; resume, and/or cases where the agent must manipulate data that exceeds the memory constraints of the sandbox. </p><p>Successful teams will do a lot of work on harness engineering for that tool, ensuring that the abstraction is optimal for agent quality. The benefit of using the specialized provider will be this plus the cloud sync distributed systems layer. </p><p>Beyond file systems, I think this might also apply to OLTP databases, OLAP databases, search engines, durable execution/parallelism/threading, and git. </p><p></p><p>_</p><p>If you are applying these architectural ideas to vertical agent categories, or building infrastructure centered around these ideas, I&#8217;d love to talk to you - reach out at davis @ innovationendeavors.com</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Documentation as tool for agents]]></title><description><![CDATA[I was recently vibe coding a wedding website with Replit, and noticed that Replit Agent now includes a documentation step as part of its workflow.]]></description><link>https://davistreybig.substack.com/p/documentation-as-tool-for-agents</link><guid isPermaLink="false">https://davistreybig.substack.com/p/documentation-as-tool-for-agents</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Thu, 13 Nov 2025 19:21:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zouI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I was recently vibe coding a wedding website with Replit, and noticed that Replit Agent now includes a documentation step as part of its workflow. After it finishes a task and thinks it is at a checkpoint, it will autonomously decide to update the documentation in the repository. This was not something I asked it to do.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zouI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zouI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png 424w, https://substackcdn.com/image/fetch/$s_!zouI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png 848w, https://substackcdn.com/image/fetch/$s_!zouI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png 1272w, https://substackcdn.com/image/fetch/$s_!zouI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zouI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png" width="896" height="432" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:432,&quot;width&quot;:896,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58400,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/178651966?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zouI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png 424w, https://substackcdn.com/image/fetch/$s_!zouI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png 848w, https://substackcdn.com/image/fetch/$s_!zouI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png 1272w, https://substackcdn.com/image/fetch/$s_!zouI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ce4170-7049-478d-85d6-c40d6f2095d6_896x432.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Replit documentation step</figcaption></figure></div><p>If we look at the Replit.md it produces, we see a README style document that touches on overall intent, design goals, key features, architectural design, and similar. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2aBo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfaadda-9df9-43e9-a36d-0efabf7dcf14_1948x1734.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2aBo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfaadda-9df9-43e9-a36d-0efabf7dcf14_1948x1734.png 424w, https://substackcdn.com/image/fetch/$s_!2aBo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfaadda-9df9-43e9-a36d-0efabf7dcf14_1948x1734.png 848w, https://substackcdn.com/image/fetch/$s_!2aBo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfaadda-9df9-43e9-a36d-0efabf7dcf14_1948x1734.png 1272w, https://substackcdn.com/image/fetch/$s_!2aBo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfaadda-9df9-43e9-a36d-0efabf7dcf14_1948x1734.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2aBo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfaadda-9df9-43e9-a36d-0efabf7dcf14_1948x1734.png" width="1456" height="1296" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0bfaadda-9df9-43e9-a36d-0efabf7dcf14_1948x1734.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1296,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:371811,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/178651966?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfaadda-9df9-43e9-a36d-0efabf7dcf14_1948x1734.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2aBo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfaadda-9df9-43e9-a36d-0efabf7dcf14_1948x1734.png 424w, https://substackcdn.com/image/fetch/$s_!2aBo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfaadda-9df9-43e9-a36d-0efabf7dcf14_1948x1734.png 848w, https://substackcdn.com/image/fetch/$s_!2aBo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfaadda-9df9-43e9-a36d-0efabf7dcf14_1948x1734.png 1272w, https://substackcdn.com/image/fetch/$s_!2aBo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bfaadda-9df9-43e9-a36d-0efabf7dcf14_1948x1734.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is very interesting because, from the perspective of the user, the Replit.md file is mostly an implementation detail. While Replit does allow you to find the file in its file viewer UI, this is fairly difficult to get to, and in the course of &#8220;vibe coding&#8221; it is not something you are particularly meant to look at. </p><p>So, why does Replit do this? <strong>My suspicion is that</strong> <strong>documentation is a tool that improves agent quality.</strong> I think this is an under appreciated concept, and one that will become much more prominent over the coming years. </p><h3><strong>Documentation as an index structure</strong></h3><p>One lens to think about documentation in the context of coding agents is as an <em>index structure</em>. </p><p>Coding agents today use a variety of tools to retrieve and manage context about the codebase - including navigating the abstract syntax tree, lexical &amp; semantic search indices, and search utilities like grep. </p><p>Documentation fulfills a similar purpose for coding agents:</p><ol><li><p>It acts as a guide that instructs the agent about what parts of the codebase relate to what functionality, helping the agent know where to look</p></li><li><p>It elucidates the design intent of code, often sharing details about why something was done, what alternatives were considered, and what was not done. These details are useful, but rarely in the code themselves. </p></li><li><p>It acts as a materialized cache for reasoning - conveying higher order facts/concepts/principles that could be gleaned from the code, but which would require reading &amp; reasoning over large sections of the codebase</p></li></ol><p>Correspondingly, one might expect that there is a lot of value in having a system attempt to autonomously create, maintain, and update documentation for the agent - not as an artifact for humans, but as an implementation detail that improves agent reasoning. </p><p>Yet, this is not really done in the coding agent space at all today. While most mainstream coding agents can of course be used to produce documentation - e.g. you can ask Cursor or Claude Code to produce documents for X or Y - none of them autonomously create a lot of documentation as part of their operations to be used as a data structure in future runs.  </p><p><a href="https://agents.md/\">Agents.md</a>, which Replit.md is likely a riff on, is the closest to what I am describing, but I think it still leaves a lot to be desired. </p><p>The first challenge is that Agents.md is really something that a software engineer is meant to maintain. <a href="https://www.anthropic.com/engineering/claude-code-best-practices">Anthropic has entire guides dedicated to setting up and managing your Agents.md</a>, and Claude Code expresses the # command for the user to update Agents.md. In some sense - Agents.md is in between a fancy system prompt for Claude Code and an index structure that the coding agent system maintains. </p><p>The second challenge is that Agents.md is a relatively simple/naive implementation - it&#8217;s a single file that is supposed to globally describe everything in the codebase. <a href="https://dev.to/datadog-frontend-dev/steering-ai-agents-in-monorepos-with-agentsmd-13g0">You can find various guides online about how to nest hierarchical Agents.md files</a> to try to fix this, but ultimately the onus is on the user to figure out and manage the right Agents.MD structure for their codebases. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ceXX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24ef244b-8616-450d-aa1b-60262236c49a_1596x1450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ceXX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24ef244b-8616-450d-aa1b-60262236c49a_1596x1450.png 424w, https://substackcdn.com/image/fetch/$s_!ceXX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24ef244b-8616-450d-aa1b-60262236c49a_1596x1450.png 848w, https://substackcdn.com/image/fetch/$s_!ceXX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24ef244b-8616-450d-aa1b-60262236c49a_1596x1450.png 1272w, https://substackcdn.com/image/fetch/$s_!ceXX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24ef244b-8616-450d-aa1b-60262236c49a_1596x1450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ceXX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24ef244b-8616-450d-aa1b-60262236c49a_1596x1450.png" width="1456" height="1323" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/24ef244b-8616-450d-aa1b-60262236c49a_1596x1450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1323,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:243156,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/178651966?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24ef244b-8616-450d-aa1b-60262236c49a_1596x1450.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ceXX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24ef244b-8616-450d-aa1b-60262236c49a_1596x1450.png 424w, https://substackcdn.com/image/fetch/$s_!ceXX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24ef244b-8616-450d-aa1b-60262236c49a_1596x1450.png 848w, https://substackcdn.com/image/fetch/$s_!ceXX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24ef244b-8616-450d-aa1b-60262236c49a_1596x1450.png 1272w, https://substackcdn.com/image/fetch/$s_!ceXX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24ef244b-8616-450d-aa1b-60262236c49a_1596x1450.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Advice on how to nest Agents.md files in a larger monorepo</figcaption></figure></div><p>Play this out a bit more, and what you end up with is essentially a human manually having to tune a new type of complex search index structure for their coding agents. </p><p>My argument is that we likely need to move to a world where this type of documentation is more autonomously constructed, managed, and updated by the coding agent itself. In other words, documentation becomes a *tool* that the agent can use as part of its operation, just like how the Replit agent decided to write down some documentation updates after I gave it a task. </p><p>Such an approach would allow for much richer optimizations of how documentation is structured &amp; laid out, ultimately resulting in far improved coding agent quality. </p><h2><strong>Blending Human and AI-oriented documentation</strong></h2><p>I think this is also the right recipe/strategy for starting to blend human-oriented documentation and agent-oriented documentation. It is actually interesting to consider why Agents.md has emerged as this sort of divergent documentation corpus separate from the documentation many engineering teams are already writing. </p><p>Indeed, the same guide I listed above that discussed how to create a nested Agents.md structure essentially implicitly recommends <em>against</em> referencing external documentation. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tQzz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b3464-c987-4f26-9c2b-986c2b720ba2_1670x928.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tQzz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b3464-c987-4f26-9c2b-986c2b720ba2_1670x928.png 424w, https://substackcdn.com/image/fetch/$s_!tQzz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b3464-c987-4f26-9c2b-986c2b720ba2_1670x928.png 848w, https://substackcdn.com/image/fetch/$s_!tQzz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b3464-c987-4f26-9c2b-986c2b720ba2_1670x928.png 1272w, https://substackcdn.com/image/fetch/$s_!tQzz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b3464-c987-4f26-9c2b-986c2b720ba2_1670x928.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tQzz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b3464-c987-4f26-9c2b-986c2b720ba2_1670x928.png" width="1456" height="809" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b6b3464-c987-4f26-9c2b-986c2b720ba2_1670x928.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:809,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:216102,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/178651966?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b3464-c987-4f26-9c2b-986c2b720ba2_1670x928.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tQzz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b3464-c987-4f26-9c2b-986c2b720ba2_1670x928.png 424w, https://substackcdn.com/image/fetch/$s_!tQzz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b3464-c987-4f26-9c2b-986c2b720ba2_1670x928.png 848w, https://substackcdn.com/image/fetch/$s_!tQzz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b3464-c987-4f26-9c2b-986c2b720ba2_1670x928.png 1272w, https://substackcdn.com/image/fetch/$s_!tQzz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b3464-c987-4f26-9c2b-986c2b720ba2_1670x928.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">External documentation can create problems for agents</figcaption></figure></div><p>There are certainly well-founded reasons for this - context rot is a real concern, human documentation is likely more verbose and less information dense (worse for agents), and most critically a lot of human documentation is very stale or out of date. </p><p>Yet, these are solvable concerns. A proper documentation tool would be able to optimize the right file structure, information hierarchy, and documentation updates to ensure that both humans and AI have effective, useful documentation. You can imagine a world where every codebase has the following:</p><ol><li><p>Human-controlled Agents.md file(s) that allow a human to provide simple preferences or rules it wants the AI to followup - mirroring what tools like Claude Code offer today</p></li><li><p>A complex hierarchy of &#8220;index structure&#8221; esque documentation that is primarily managed and maintained by a documentation tool the agent has access to, and viewed as an implementation detail for how to make coding agents more effective</p></li><li><p>A set of human-oriented documentation that is produced as a sort of materialized view on top of the code + the index structure documentation </p></li></ol><p>My guess is that building an effective agentic system for creating, updating, and managing documentation is a sufficiently rich technical problem that it warrants specialized startups going after it, just like we see with things like memory or semantic search indices. </p><p>My intuition is also that this idea extends far beyond just coding agents. Any vertical agent that must regularly reason over a large corpus of data could likely benefit from this concept - e.g. companies like <a href="https://trunktools.com/">Trunk Tools</a> in construction, <a href="https://www.harvey.ai/">Harvey</a> in law, <a href="https://sierra.ai/">Sierra</a> in customer support. </p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! 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[Rethinking the outer development loop in a world of AI-generated code]]></title><description><![CDATA[Our investment in Mesa]]></description><link>https://davistreybig.substack.com/p/rethinking-the-outer-development</link><guid isPermaLink="false">https://davistreybig.substack.com/p/rethinking-the-outer-development</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Tue, 04 Nov 2025 17:14:40 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fce75f62-281c-4122-8443-54b7bf72306e_5568x3712.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For the most part, the processes and systems that underpin the way we develop software have not changed for the last two decades. Amidst vast differences in the way we architect software (e.g. the move to the cloud) and the infrastructure we use to build software (e.g. React), the so-called &#8220;outer development loop&#8221; of software engineering still looks eerily similar to what it was when Github first emerged - e.g. git based version control, human-reviewed pull requests, unit &amp; integration tests running on merge, staging environments &amp; canary rollouts.</p><p>In some respect, this is to be expected - these systems and processes have more to do with the way humans collaborate to write software than they do with the nature of the software itself.</p><p>But, over the last few years, we have seen a new stakeholder emerge in the process of writing software - the AI coding agent. And so it is no surprise that many of these human-oriented processes are beginning to feel immense stress in the wake of a new type of AI &#8220;software engineer&#8221; that thinks, and acts, very differently from what we&#8217;re used to.</p><p>A good, and obvious example of this is validating code. AI coding models and agents make it very easy to produce a lot of code. But, does that code work? Many engineering teams I talk to nowadays not only feel that they now spend more time reviewing code than writing code, but also that the code review process has also become dramatically more complicated. Common problems include:</p><ol><li><p>How do you more rapidly triage PRs to understand what is worth paying attention to vs not?</p></li><li><p>How do you know which PRs were particularly agent-driven, and might therefore require a closer look?</p></li><li><p>How do you more rapidly analyze a PR? Is there a way to more easily understand the semantic changes in a PR &amp; the lines of code that map to each change?</p></li><li><p>How do you know which lines of code were written by an AI vs. not in a PR? Is there a way to see the reasoning or thinking that led to such a line, in that case?</p></li><li><p>How do you accelerate the code review workflow so you&#8217;re not now spending half your day looking at PRs?</p></li><li><p>Should you be using AI to review PRs? In what situations?</p></li></ol><p>In a nutshell: we need to rethink the entire code review process in a world of AI coding agents. However, code review is just one piece of the way we develop software, and it increasingly feels like these sorts of fundamental questions can be asked about every step of the software development lifecycle.</p><p>We&#8217;ll need to be better at testing software. Previously &#8220;niche&#8221; testing techniques like load testing, fuzz testing, formal verification, and similar are likely going to become far more commonplace. And we&#8217;ll need to get smarter about where, and when, to run these tests.</p><p>We&#8217;ll need to be better at specification. Most tickets assigned in tools like Jira lack detail, and rely on the vast amounts of implicit context that the typical human software engineer on a team has. This won&#8217;t work for AI agents, and will prevent us from reliably evaluating agents relative to what they were supposed to do. Test-driven development will make a comeback, but in a different form and based more on extremely tightly specified requirements documents.</p><p>We&#8217;ll need to further explore the ways AI can be used to leverage humans in the software development lifecycle. AI code reviews are a good start, but we&#8217;ll also want AI systems to do versions of design reviews, product reviews, QA testing, and much more to lighten the load for human SWEs and PMs.</p><p>We&#8217;ll need to rethink the core infrastructure primitives the outer development loop is built upon. Git isn&#8217;t really designed to handle thousands of agents concurrently modifying the codebase, and improvements in areas like conflict resolution, concurrent edits, and treating each edit as a commit will be essential. We also need to more natively bake metadata about AI-changes vs. human changes into version control systems, such that we can treat AI-generated changes differently throughout the entire SDLC. For example, a company may want different policies for testing &amp; deploying AI written PRs vs. human ones.</p><p>I&#8217;ve been interested in this theme of the downstream impact of agentic code development for the past few years, but had never found a team attempting to holistically rethink the outer development loop in a world of coding agents, as opposed to just building point solutions for software testing or verification.</p><p>That was, until we met <a href="https://www.linkedin.com/in/oliver-gilan/?lipi=urn%3Ali%3Apage%3Ad_flagship3_feed%3Bx90URoQeQTuUZOolX5cB0Q%3D%3D">Oliver</a> and <a href="https://www.linkedin.com/in/ben-h-warren?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAAB04Ld8Bbi8CnnXoLVXEFEI3HuoEspcJeh0">Ben</a>, two founders who had such a profound vision on what the software development lifecycle of the future would look like. So today, we&#8217;re announcing our lead investment into <a href="https://mesa.dev/">Mesa</a>&#8217;s seed round.</p><p><a href="https://mesa.dev/">Mesa</a> launches today with a platform for designing custom fleets of specialized code review agents - think the architectural review agent that catches architecture drift, or the database review agent that focuses on your core data model. This allows for much more precise, high signal-to-noise reviews that continuously adapt to you, rather than one-size-fits-all code reviews that mostly focus on pedantic details like a syntax error on line 35. </p><p>Despite being &lt;6 months old, Mesa is already being used by a number of companies in lieu of more established AI code review tools. This is just the start, and you can shortly expect Mesa to launch a number of other capabilities, including a more substantial rethinking of the UX for doing human code reviews, and a suite of capabilities for test-driven development for agents.</p><p>Beyond functionality, what you&#8217;ll immediately notice about Mesa is the beautiful branding and design, evocative of a future where software engineers help architect &amp; guide fleets of agents to build the future. This design-first lens is essential to successfully re-inventing how humans and AI agents will collaborate to develop software in the future, and a key part of why we were excited to partner with Oliver &amp; Ben.</p><p>Try Mesa today for free at <a href="http://mesa.dev">https://mesa.dev/</a></p><p></p><p><em>(<a href="https://www.innovationendeavors.com/insights/mesa-code-verification">Crosspost from this IE blog</a>)</em></p>]]></content:encoded></item><item><title><![CDATA[Pricing for Abundance in AI]]></title><description><![CDATA[Why usage based pricing can be a competitive advantage for AI SaaS products]]></description><link>https://davistreybig.substack.com/p/pricing-for-abundance-in-ai</link><guid isPermaLink="false">https://davistreybig.substack.com/p/pricing-for-abundance-in-ai</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Tue, 29 Jul 2025 19:05:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zB1j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4><em>TLDR</em> - I think you can differentiate as an AI SaaS startup by being more expensive and embracing usage based pricing, rather than trying to hide it. This allows you to build reasoning-native features, avoids the need for dark patterns like model downgrading that have crept into seat-based products and alienate the most engaged users, and aligns more with the mental model that forward thinking buyers have. </h4><blockquote><p><em>Amp is unconstrained in token usage (and therefore cost). Our sole incentive is to make it valuable, not to match the cost of a subscription - <a href="https://ampcode.com/manual">Amp Code Owners Manual</a></em></p></blockquote><p>Pricing of AI-native SaaS tools has been widely discussed over the past year or two - particularly the margin challenges that can be associates with AI SaaS products (<a href="https://ethanding.substack.com/p/windsurf-gets-margin-called">Windsurf Gets Margin Called</a>) and the idea that you can sell &#8220;outcomes&#8221;, not work, with AI (<a href="https://www.sarahtavel.com/p/a-few-sell-work-not-software-updated">Sell the Work</a>). </p><p>However, there is one overlooked angle of pricing AI products which I increasingly find interesting from a startup perspective: the idea that usage based pricing, particularly in a world of a reasoning models, can act as a competitive advantage. In other words - I think more products should <strong>price for abundance</strong>. </p><p>Most AI SaaS products out there today try to map their pricing back to some kind of seat based model. <a href="https://cursor.com/pricing">Cursor charges $20/month</a>, <a href="https://www.greptile.com/pricing">Greptile charges $30/month</a>, <a href="https://www.perplexity.ai/enterprise/pricing">Perplexity charges $20/month</a>. While this is a simple and predictable pricing model for users, it comes at a cost - because of the massive variance in COGS across a user base when you offer a low fixed seat cost, you often end up needing to adopt dark patterns to control margins. </p><p>For example - you can find quite a few discussions online about how various AI code generation tools seem to &#8220;invisibly&#8221; downgrade the model they use behind the scenes if you use the product too much in a given billing period. This leads to a ton of user frustration as the product suddenly seems worse for a reason the user can&#8217;t quite explain. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zB1j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zB1j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png 424w, https://substackcdn.com/image/fetch/$s_!zB1j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png 848w, https://substackcdn.com/image/fetch/$s_!zB1j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png 1272w, https://substackcdn.com/image/fetch/$s_!zB1j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zB1j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png" width="1456" height="702" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:702,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:227746,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/169525947?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zB1j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png 424w, https://substackcdn.com/image/fetch/$s_!zB1j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png 848w, https://substackcdn.com/image/fetch/$s_!zB1j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png 1272w, https://substackcdn.com/image/fetch/$s_!zB1j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231222da-5b9e-4d17-8a33-e0e538a83061_1588x766.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://www.reddit.com/r/programming/comments/1lu8eyb/cursor_pay_more_get_less_and_dont_ask_how_it_works/#:~:text=shady%20and%20concerning,are%20actually%20allowed%20to%20do">Invisible or opaque downgrading or rate limiting of AI products is widespread</a></figcaption></figure></div><p><a href="https://techcrunch.com/2025/07/17/anthropic-tightens-usage-limits-for-claude-code-without-telling-users/">Claude Code&#8217;s recent rollout of invisible &#8220;usage limits&#8221;</a> reflects the same problem - they are likely trying to maintain their per-seat-per-month business model, but as a result they have to curb extreme use because otherwise the top 5-10% of users will ruin the margins of the entire product. </p><p>This approach feels fundamentally flawed to me. First, it alienates your biggest power users - many of whom would likely pay much higher prices given the value they receive. Indeed, many of the more forward thinking executive teams I know are not aiming to reduce token usage, but <em>increase it (</em>see Shopify CTO quote below). Why would you design a pricing model counter to this? </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jBmp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89820037-a7f1-4da5-90c0-fc6dfe7a06b1_1176x950.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jBmp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89820037-a7f1-4da5-90c0-fc6dfe7a06b1_1176x950.png 424w, https://substackcdn.com/image/fetch/$s_!jBmp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89820037-a7f1-4da5-90c0-fc6dfe7a06b1_1176x950.png 848w, https://substackcdn.com/image/fetch/$s_!jBmp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89820037-a7f1-4da5-90c0-fc6dfe7a06b1_1176x950.png 1272w, https://substackcdn.com/image/fetch/$s_!jBmp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89820037-a7f1-4da5-90c0-fc6dfe7a06b1_1176x950.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jBmp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89820037-a7f1-4da5-90c0-fc6dfe7a06b1_1176x950.png" width="1176" height="950" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89820037-a7f1-4da5-90c0-fc6dfe7a06b1_1176x950.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:950,&quot;width&quot;:1176,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:243537,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/169525947?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89820037-a7f1-4da5-90c0-fc6dfe7a06b1_1176x950.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jBmp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89820037-a7f1-4da5-90c0-fc6dfe7a06b1_1176x950.png 424w, https://substackcdn.com/image/fetch/$s_!jBmp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89820037-a7f1-4da5-90c0-fc6dfe7a06b1_1176x950.png 848w, https://substackcdn.com/image/fetch/$s_!jBmp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89820037-a7f1-4da5-90c0-fc6dfe7a06b1_1176x950.png 1272w, https://substackcdn.com/image/fetch/$s_!jBmp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89820037-a7f1-4da5-90c0-fc6dfe7a06b1_1176x950.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://x.com/fnthawar/status/1930367595670274058">Shopify CTO on why you should reward token spend</a> - Shopify maintains a leaderboard of the TOP token spenders and treats it as a goal to climb the leaderboard</figcaption></figure></div><p>Second, this business model prevents you as a company from leaning in to what is special about foundation model-based SaaS tools - <strong>namely, that you can pay more for them to do more.</strong> This is especially true in the wake of reasoning models and foundation model systems - where quality &amp; accuracy of results are directly correlated with how much money you are willing to spend on incremental compute. </p><p>My central argument is that you can actually build a differentiated product experience by embracing this concept, rather than trying to obfuscate it behind a seat-oriented pricing model. </p><p>For example:</p><ol><li><p>What if I could set a policy for Cognition&#8217;s Devin agent to spend a lot to try to automatically fix sev0 or sev1 bug reports from customers, but use weaker models &amp; less reasoning for standard customer feature requests? </p></li><li><p>What if I could set a policy for a code review agent to think a lot longer with a large reasoning model for code changes that touch the database, but spend far less to review simple client-side visual changes?</p></li><li><p>What if I could modulate how much effort I need to put into drafting a contract as a lawyer with an AI legal tool based on how important &amp; complex of a contract it is vs. how non-important it is? </p></li></ol><p>You can map out these sorts of &#8220;dynamic effort policies&#8221; for basically all key categories of AI SaaS tools. There are always cases where you are willing to spend more for higher quality work to get done faster - and architecturally, it is well known how to get foundation model systems to achieve this (e.g. more reasoning, <a href="https://arxiv.org/abs/2407.21787">repeated sampling</a>, best of N parallelization, etc). It&#8217;s simply a question of whether your business model allows for these sorts of ideas to be built into the product. I think it is basically impossible to truly embrace reasoning-model product paradigms in a SaaS tool if you do not have usage-based pricing front and center. </p><p>If executed correctly, I think this approach may actually allow you to <em>invert</em> the phenomena you see with Claude Code - where they alienate power users to maintain a simple, low-cost seat based model for non-power users. In gaming, it is long established that extreme power users subsidize everyone else - e.g. <a href="https://arxiv.org/pdf/1701.07411">in mobile gaming the top 1% of users generate ~60% of all revenue</a>. It is becomingly increasingly clear that in many of these AI categories - you see a similar distribution of user behavior, with top users using the product 1000x times the regular user if not more, but the business models for the most part do not accomodate this. If you instead embraced this idea, could the power users of a tool like Claude Code actually <em>subsidize</em> the low end? </p><p>Taking a step back - never before in the history of SaaS was it possible for you to pay more for a product to do more. Products like Docusign, Salesforce, Hubspot, and similar were, for the most part, fixed functionality that could not modulate quality no matter how much they were willing to spend on compute for a given task. Even traditional ML startups could not really achieve this - e.g. a demand forecasting model is going to keep producing the same results for the same features regardless of a customer&#8217;s willingness to pay more for forecasting X than Y. </p><p>Correspondingly, I think foundation model SaaS tools should lean into the fact they they can offer differential quality based on compute - as this is part of what allows you to counterposition and build a better product than existed before. Note that this is not necessarily outcome based pricing - which is nice when you can do it but is realistically unfeasible in most domains where there is not a clear, obvious outcome to charge against. Rather, it is &#8220;effort based&#8221; pricing. </p><p>There are, of course, numerous downsides with this type of pricing strategy. It is often harder to get users comfortable with usage based pricing. <em>How much will it actually cost me? How do I explain it to my CFO? How do I ensure it doesn&#8217;t go completely out of bounds?</em> But, in balance, I think it is better to address these problems head-on (e.g. support usage caps, limits, gaurdrails, alerts, real-time spend dashboards, etc) rather than deal with the impedance mismatch that occurs when you build an AI-Native SaaS with a seat oriented model. </p><p>You are starting to see some startups embrace this. I began the article with a quote from <a href="https://ampcode.com/manual">Amp Code</a>, which has embraced this pricing philosophy the most in the coding agents space. I suspect that this pricing philosophy will rapidly become more commonplace in applied AI startups. The startups which adopt it will be able to innovate on product more and take dramatically more advantage of recent model capabilities in reasoning, because they will not need to deeply consider &amp; model COGS for every single product decision they make. </p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[State of Foundation Models - 2025]]></title><description><![CDATA[A holistic overview of everything from model research to product building]]></description><link>https://davistreybig.substack.com/p/state-of-foundation-models-2025</link><guid isPermaLink="false">https://davistreybig.substack.com/p/state-of-foundation-models-2025</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Wed, 25 Jun 2025 13:02:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mxyj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I recently put together an extensive, 100+ slide presentation covering the state of the foundation model market in 2025. You can find it at <a href="https://foundationmodelreport.ai/">foundationmodelreport.ai</a>. </p><p>I also put together a live presentation of a condensed version of the slide deck <a href="https://www.youtube.com/watch?v=RwaLaDtTqag&amp;ab_channel=InnovationEndeavors">here</a>, if you prefer listening vs. reading. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mxyj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mxyj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png 424w, https://substackcdn.com/image/fetch/$s_!mxyj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png 848w, https://substackcdn.com/image/fetch/$s_!mxyj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png 1272w, https://substackcdn.com/image/fetch/$s_!mxyj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mxyj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png" width="1116" height="620" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:620,&quot;width&quot;:1116,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:575526,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/166551677?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mxyj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png 424w, https://substackcdn.com/image/fetch/$s_!mxyj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png 848w, https://substackcdn.com/image/fetch/$s_!mxyj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png 1272w, https://substackcdn.com/image/fetch/$s_!mxyj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235745d3-d24e-4470-a773-d7541cf9d155_1116x620.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://www.youtube.com/watch?v=RwaLaDtTqag&amp;ab_channel=InnovationEndeavors">2025 State of Foundation Models - Youtube</a></figcaption></figure></div><p>You can think of this as a spiritual successor to my 2023 <a href="https://docs.google.com/presentation/d/1VXQkR65ieROCmJP_ga09gGt8wkTGtTAdvaDRxMB67GI/edit?slide=id.p#slide=id.p">&#8220;Foundation Model Primer&#8221;</a>. I aim to recreate a lot of what people liked about that presentation - particularly how it more holistically covered the space end-to-end. </p><p>Some of my favorite tidbits from the deck this year:</p><ul><li><p><strong>Generative AI has gone mainstream</strong> -  1 in 8 workers worldwide now uses AI every month, with 90% of that growth happening in just the last 6 months. AI-native applications are now well into the billions of annual run rate</p></li><li><p><strong>The pace of research progress is wild</strong> &#8212; the set of tasks an AI model can reliably do is doubling every ~7 months, the cost for a given unit of intelligence is going down &gt;100x year over year</p></li><li><p><strong>Training costs balloon, but OSS convergence continues</strong> - A typical model now costs &gt;$300M to train, but also only stays a top model for about 3 weeks</p></li><li><p><strong>Substantial progress in &#8220;newer&#8221; modalities</strong> - We are at a ChatGPT moment for video models. Science models in areas like protein folding &amp; materials are starting to get interesting. Robotics models, world models, &amp; voice-to-voice models are improving rapidly. </p></li><li><p><strong>The venture frenzy is intense</strong> -<strong> </strong>10% of all venture dollars in 2024 went to foundation model companies, and 50% of venture dollars in 2025 have gone to AI startups</p></li><li><p><strong>Reasoning models are the new scaling frontier</strong> - As a result, tons of focus right now on verifier models, reward models, and reinforcement learning. Are we going to see quality generalist reward models? </p></li><li><p><strong>Agents are starting to work, but design patterns &amp; architectures are still so early</strong> - Model pickers are like picking your web video codec in 1998. &#8220;Systems&#8221; paradigms like sequential sampling or fan-out/fan-in are under-appreciated and will become more mainstream. </p></li><li><p><strong>MCP is exciting, but the agent-computer interface for tool use underrated</strong> - Many good startups I know forgo MCP for purpose-built integrations as a result. </p></li><li><p><strong>Good data curation, retrieval, and evals are still under-appreciated</strong> - For example, a well architecture RAG system is 10-100x better than a long-context only model in latency, quality, and cost for even straightforward use cases. </p></li></ul><p>And honestly - that&#8217;s just scratching the surface! Would love to hear what you think &#8212; and if you find it valuable, feel free to share it with others building in the space. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Synthetic Product Feedback]]></title><description><![CDATA[What if you had a synthetic UXR study, A/B test, and user survey on every pull request?]]></description><link>https://davistreybig.substack.com/p/synthetic-product-feedback</link><guid isPermaLink="false">https://davistreybig.substack.com/p/synthetic-product-feedback</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Tue, 24 Jun 2025 21:50:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Rkdg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In recent years, many startups have focused on using large language models (LLMs) to automate the <em>functional</em> testing of code &#8212; checking whether it works as intended and is bug free. Companies like <a href="https://www.greptile.com/">Greptile</a> and <a href="https://graphite.dev/">Graphite</a> tackle code review; others like <a href="https://www.ranger.net/">Ranger</a> focus on QA automation.</p><p>However, there is a large class of software testing that does not fall under this <em>functional</em> testing paradigm, but rather is focused on the <em>qualitative</em> effectiveness of the software. Is the new feature understandable by users? Does it improve conversion? Is it easy to use? </p><p>These sorts of questions are historically answered by an entirely different set of processes, such as:</p><ol><li><p><strong>User Experience Testing</strong> - Have people try to use the product, often with different structured goals in mind, and get their reaction</p></li><li><p><strong>A/B Testing</strong> - Roll out the new version of the product to a % of users, and compare those users against a baseline using key product metrics</p></li><li><p><strong>Product Instrumentation</strong> - Measure how people are using the new product/feature with descriptive analytics such as conversion rates or user funnels to see if your new code drove the right change in behavior</p></li><li><p><strong>User Interviews</strong> - Show users mocks or a demo of your new feature, and gauge their reaction. Is this compelling? Is this how you would want it to work? </p></li><li><p><strong>Surveys</strong> - Collect aggregate data from different public pools of people in your ICP on something new you have built or are launching</p></li><li><p><strong>Design review</strong> - A designer goes through the workflow and critiques it from a usability and user experience perspective</p></li></ol><p>What is interesting is that - <strong>it is very clear that LLMs and agents are capable of automating and/or producing synthetic versions of almost all of these forms of qualitative feedback, yet almost no startups have</strong> <strong>focused on it.</strong> </p><p>What if LLMs made it possible to collect usable, directional qualitative feedback on every pull request, with no marginal cost? I will give a few examples of what this might look like: </p><h3><strong>Synthetic A/B Testing</strong></h3><p>Imagine if, on every pull request, you spun up hundreds or thousands of preview environments - half with the previous version of the code (control), half with the new version of the code (variant). In each preview environment, run a computer use agent that is tasked with performing the key product goal associated the given code change. Prompt all of these computer use agents to mirror the distribution of user personas in your user base. </p><p>If you did this, you would in theory have run a synthetic A/B test, and you would get a synthetic measure of whether or not your code change improved the user flow. </p><p>This is not just conceptual - I have now actually seen multiple people experiment with this idea to some success. <a href="https://t.co/MrYibAsa2I">Agent A/B</a> is a recent research paper that explores this direction and shows that this type of synthetic experiment can in fact predict real world user behavior on eCommerce sites. A friend of mine, <a href="https://gregdale.substack.com/">Greg Dale</a>, ran some simulations of this sort of idea and also found that synthetic variations of experiments seem predictive in cases where we have ground truth real world experiments. I have included one of his results below. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rkdg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rkdg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png 424w, https://substackcdn.com/image/fetch/$s_!Rkdg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png 848w, https://substackcdn.com/image/fetch/$s_!Rkdg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png 1272w, https://substackcdn.com/image/fetch/$s_!Rkdg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rkdg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png" width="1456" height="1142" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1142,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:306250,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/164607634?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Rkdg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png 424w, https://substackcdn.com/image/fetch/$s_!Rkdg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png 848w, https://substackcdn.com/image/fetch/$s_!Rkdg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png 1272w, https://substackcdn.com/image/fetch/$s_!Rkdg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd82486c4-8224-4718-8906-d47a9fad3051_1456x1142.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Synthetic A/B test benchmarking. The three right sets of columns are all LLM based synthetic experiments measuring the same thing as the &#8220;benchmark&#8221; real experiment. Note that all synthetic experiments predict the estimated lift in the control vs. treatment fairly accurately. </figcaption></figure></div><p>What is particularly interesting about synthetic A/B testing is that it solves what I would consider the biggest challenge in the A/B testing market - sample size. Historically, only the largest marketplace and prosumer/consumer companies have been able to regularly A/B test ideas because without sufficient sample size, it was impossible to draw statistically significant conclusions. But, such a synthetic approach would be applicable to <em>everyone</em>. </p><p>While there are numerous gotchas here - particularly how to evaluate and benchmark synthetic experiments, as well as how to properly mirror the user distribution especially in more &#8220;niche&#8221; product workflows - the technique is certainly intriguing.  </p><h3><strong>Synthetic User Research and UXR Testing</strong></h3><p>Imagine if, on every major pull request, two things happened:</p><ol><li><p>An agent analyzed Gong, Zendesk, and similar data sources to identify users who had given the most feedback related to that code change, and then proceeded to email them saying something like <em>&#8220;Hey, we are working on improving X thing which we noticed you had complained about. We&#8217;d love to preview the change to you and see if it addressed your feedback&#8221;</em></p></li><li><p>A fleet of browser agents prompted to act like world-class UX designers and PMs were spun up and tasked to use the feature and provide qualitative feedback. This feedback would then get summarized, and you could also analyze each specific agent&#8217;s stream of thought as it used the feature similar to how you can see the stream of thought for existing browser agents trying to complete a task</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vxko!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa58a8a46-c8d2-4075-a5d7-8951413c5260_3402x1558.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vxko!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa58a8a46-c8d2-4075-a5d7-8951413c5260_3402x1558.png 424w, https://substackcdn.com/image/fetch/$s_!vxko!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa58a8a46-c8d2-4075-a5d7-8951413c5260_3402x1558.png 848w, https://substackcdn.com/image/fetch/$s_!vxko!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa58a8a46-c8d2-4075-a5d7-8951413c5260_3402x1558.png 1272w, https://substackcdn.com/image/fetch/$s_!vxko!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa58a8a46-c8d2-4075-a5d7-8951413c5260_3402x1558.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vxko!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa58a8a46-c8d2-4075-a5d7-8951413c5260_3402x1558.png" width="1456" height="667" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a58a8a46-c8d2-4075-a5d7-8951413c5260_3402x1558.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:667,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3268890,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/164607634?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa58a8a46-c8d2-4075-a5d7-8951413c5260_3402x1558.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vxko!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa58a8a46-c8d2-4075-a5d7-8951413c5260_3402x1558.png 424w, https://substackcdn.com/image/fetch/$s_!vxko!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa58a8a46-c8d2-4075-a5d7-8951413c5260_3402x1558.png 848w, https://substackcdn.com/image/fetch/$s_!vxko!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa58a8a46-c8d2-4075-a5d7-8951413c5260_3402x1558.png 1272w, https://substackcdn.com/image/fetch/$s_!vxko!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa58a8a46-c8d2-4075-a5d7-8951413c5260_3402x1558.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Existing browser agent products, like <a href="https://www.browserbase.com/">Browserbase</a>, already provide a monologue as they try to achieve a task. It is not a long shot to consider them being prompted to specifically identify or highlight UX or product issues as they do so. </figcaption></figure></div></li></ol><p>This is the sort of work that might take a PM or UXR days to do traditionally - and whose cost is so high that it is typically reserved only for the biggest feature releases. What if it default existed for every single code change?  </p><h2>The Bigger Picture</h2><p>These two examples highlight what I would consider to be the two broad classes of techniques worth considering here:</p><ol><li><p>LLMs can be used to personify or impersonate humans, and that can be a source of synthetic human feedback</p></li><li><p>LLMs can be used to automate the <em>execution</em> of collecting qualitative human feedback - such as reaching out to people and conducting interviews or user studies</p></li></ol><p>In conjunction, these two techniques would allow you to automate a version of every single qualitative testing modality I described at the start of this blog. </p><p>Obviously, the quality of &#8220;synthetic&#8221; feedback will likely be worse than if it were real human feedback, or a human were actually collecting it. But, this belies what is interesting about these LLM-based approaches approach. </p><p>Doing any of these qualitative feedback methods well takes a lot of time &amp; effort, and in many cases is still not feasible. 90% of companies don&#8217;t have a large enough user base to effectively run A/B tests consistently. Most companies barely even have a single full time user researcher on staff to run UXR studies. Even companies with the right resources only have the capacity to do these sorts of things on the biggest of changes - a given enterprise PM only has so much time to &#8220;preview&#8221; new features to their customers, and can likely only focus on the biggest customers. </p><p>But, if the cost &amp; effort to run these sorts of analyses falls to zero such that they are &#8220;default available&#8221; on every pull request, then even if the predictiveness is only 50-75% of what it would be doing things the traditional way, that tradeoff is likely worth it. You can, of course, still do the traditional qualitative feedback workflows in key moments or for big decisions where you want to be certain. </p><p>I strongly suspect a startup could be built that essentially offers &#8220;synthetic feedback by default&#8221; on every pull request. There is now quite a bit of prior art that these methods work better than you might expect - e.g. market research startups like <a href="https://www.evidenza.ai/">Evidenza</a> which use LLMs to mock brand feedback see correlation coefficients of 90%+ when backtesting against historical surveys that brands have run. When you combine this with how capable computer use models are becoming, I see almost no reason why it shouldn&#8217;t be possible to collect extremely high fidelity synthetic product usage feedback. </p><p>Such a startup should focus on selling primarily to companies who have never had access to these sorts of techniques. E.g. sell synthetic A/B testing to the companies who have never been able to run an A/B test in their life. You&#8217;ve suddenly given them a &#8220;superpower&#8221;, and their comparison point is doing nothing, rather than doing a real A/B test. </p><p>Key challenges in this space, and therefore areas to build technical depth, include:</p><ol><li><p><strong>Data integration</strong> - How do you get the right data to effectively model the company&#8217;s userbase and user distribution? This will be the determining factor in how good vs. bad the synthetic techniques are</p></li><li><p><strong>Trust building &amp; evaluation</strong> - How do you know when to trust synthetic product feedback vs. not? When does it hallucinate or get things wrong? If the user has no way to back-test the results, how do they learn to trust this? </p></li><li><p><strong>When to do the traditional stuff</strong> - I think a key trait of a successful product here would be informing you of when a synthetic approach is unlikely to be predictive, and helping you do things the traditional way when it makes sense to</p></li><li><p><strong>Modalities and Sequencing</strong> - Which analysis modalities should one focus on vs. not? Which are easier to get right today vs. in the future? For each modality, what is the critical problem to solve to make it work well? </p></li><li><p><strong>Cost</strong> - Some of the techniques I describe would be very, very expensive to do today. While model cost is going down exponentially, you will need to be clever about how to handle this in the short term - particularly because I think it is essential that this can just be applied by default to every code change or PR, rather than be something someone has to think about</p></li><li><p><strong>Taste</strong> - How do you get models to accurate reflect good vs. bad UX design? This is easier said than done. A good analogy is the vibe coding space, where so few products actually produce tasteful outputs from a design and usability perspective (e.g. see <a href="https://www.magicpatterns.com/dashboard">MagicPatterns</a>), and most produce AI slop. </p></li></ol><p></p><p>I am extremely interested in talking to anyone who wants to build something in this space - davis @ innovationendeavors.com</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[The Visual IDE]]></title><description><![CDATA[AI coding copilots are being universally adopted by PMs & Designers, giving them 10x the agency - but is a code-oriented system the optimal form factor for such users?]]></description><link>https://davistreybig.substack.com/p/the-visual-ide</link><guid isPermaLink="false">https://davistreybig.substack.com/p/the-visual-ide</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Mon, 14 Apr 2025 17:27:37 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3f1a8e1a-e903-4276-96e6-c819669f4212_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Over the last few months, I have spoken to numerous designers &amp; product managers about how their job is changing in the face of AI coding tools. While there are numerous downstream implications of LLM-based coding assistants and agents, there is one predominant theme that has been front and center in almost every conversation - <strong>product managers and designers are increasingly writing software</strong>, not just specs/PRDs/mocks or other peripheral descriptions of software. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Faho!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2452fe1b-b8a7-4f0e-a79b-1b1d0b830648_1214x546.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Faho!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2452fe1b-b8a7-4f0e-a79b-1b1d0b830648_1214x546.png 424w, https://substackcdn.com/image/fetch/$s_!Faho!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2452fe1b-b8a7-4f0e-a79b-1b1d0b830648_1214x546.png 848w, https://substackcdn.com/image/fetch/$s_!Faho!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2452fe1b-b8a7-4f0e-a79b-1b1d0b830648_1214x546.png 1272w, https://substackcdn.com/image/fetch/$s_!Faho!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2452fe1b-b8a7-4f0e-a79b-1b1d0b830648_1214x546.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Faho!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2452fe1b-b8a7-4f0e-a79b-1b1d0b830648_1214x546.png" width="1214" height="546" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2452fe1b-b8a7-4f0e-a79b-1b1d0b830648_1214x546.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:546,&quot;width&quot;:1214,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:120089,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/161053780?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2452fe1b-b8a7-4f0e-a79b-1b1d0b830648_1214x546.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Faho!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2452fe1b-b8a7-4f0e-a79b-1b1d0b830648_1214x546.png 424w, https://substackcdn.com/image/fetch/$s_!Faho!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2452fe1b-b8a7-4f0e-a79b-1b1d0b830648_1214x546.png 848w, https://substackcdn.com/image/fetch/$s_!Faho!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2452fe1b-b8a7-4f0e-a79b-1b1d0b830648_1214x546.png 1272w, https://substackcdn.com/image/fetch/$s_!Faho!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2452fe1b-b8a7-4f0e-a79b-1b1d0b830648_1214x546.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z7QT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e66d2b-79ee-43e5-8e21-c4709f612f5f_1200x444.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z7QT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e66d2b-79ee-43e5-8e21-c4709f612f5f_1200x444.png 424w, https://substackcdn.com/image/fetch/$s_!Z7QT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e66d2b-79ee-43e5-8e21-c4709f612f5f_1200x444.png 848w, https://substackcdn.com/image/fetch/$s_!Z7QT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e66d2b-79ee-43e5-8e21-c4709f612f5f_1200x444.png 1272w, https://substackcdn.com/image/fetch/$s_!Z7QT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e66d2b-79ee-43e5-8e21-c4709f612f5f_1200x444.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z7QT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e66d2b-79ee-43e5-8e21-c4709f612f5f_1200x444.png" width="1200" height="444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1e66d2b-79ee-43e5-8e21-c4709f612f5f_1200x444.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:444,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84148,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/161053780?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e66d2b-79ee-43e5-8e21-c4709f612f5f_1200x444.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Z7QT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e66d2b-79ee-43e5-8e21-c4709f612f5f_1200x444.png 424w, https://substackcdn.com/image/fetch/$s_!Z7QT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e66d2b-79ee-43e5-8e21-c4709f612f5f_1200x444.png 848w, https://substackcdn.com/image/fetch/$s_!Z7QT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e66d2b-79ee-43e5-8e21-c4709f612f5f_1200x444.png 1272w, https://substackcdn.com/image/fetch/$s_!Z7QT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e66d2b-79ee-43e5-8e21-c4709f612f5f_1200x444.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Basically every good PM &amp; designer I know is now using tools like Windsurf, Bolt, Loveable, and similar to prototype application changes, and in some cases, even submit PRs on their own. This is <em>remarkable</em> given that many of these people are not technical, didn&#8217;t study computer science, and had never really written a line of code in their lives prior to LLMs.  </p><p>Some direct quotes I have heard recently in discussions:</p><blockquote><p><em>&#8220;Honestly, I don&#8217;t see very much value in using Figma anymore. I am better off just forking the codebase and using Cursor to create living prototypes. This is faster, avoids all the skew/drift of having separate mockups, and greatly simplifies hand-off to the engineers I work with&#8221; - </em><strong>Former design lead at Hashicorp</strong></p></blockquote><blockquote><p><em>&#8220;I was recently trying to convince our team to work on a major new initiative, but I couldn&#8217;t get buy-in. I finally decided to just prototype a mini version of the idea over the weekend so I could directly show people what I meant. It was only when I showed my working prototype that I suddenly got everyone onboard. Before Cursor, I never would have had the capacity to do this, and we likely never would have pursued this direction&#8221; - </em><strong>Staff product manager at Duolingo</strong></p></blockquote><blockquote><p><em>So we just launched this new feature for visualizing certain data and we needed to pick colors for it - and it is sort of a complex feature in terms of colors because there might be 20+ lines on a chart, and all these colors must be look good together and be high contrast against background etc. The designer sent me an initial set of colors and it didn&#8217;t work, and then he sent another set and those didn&#8217;t work. So what he then did instead was use Cursor to build a version of this application which included a color picker that I could flick through and see what many variations would look like directly. <strong>And seeing him do that, I was like, okay - This is going to change everything. Right? Like, designers can build applications&#8221; - </strong></em><strong>Senior engineering lead at Cloudflare</strong></p></blockquote><p>If you look online, you increasingly see this sentiment everywhere - Gokul Rajamaram <a href="https://x.com/gokulr/status/1908255332050383319">recently shared an example of a VP of product at a public company discussing how he is building a new feature or concept on his own every few days</a>. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OuaV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f9ddcf-4738-4f2a-b35f-3bd7bbfbd852_1210x440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OuaV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f9ddcf-4738-4f2a-b35f-3bd7bbfbd852_1210x440.png 424w, https://substackcdn.com/image/fetch/$s_!OuaV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f9ddcf-4738-4f2a-b35f-3bd7bbfbd852_1210x440.png 848w, https://substackcdn.com/image/fetch/$s_!OuaV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f9ddcf-4738-4f2a-b35f-3bd7bbfbd852_1210x440.png 1272w, https://substackcdn.com/image/fetch/$s_!OuaV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f9ddcf-4738-4f2a-b35f-3bd7bbfbd852_1210x440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OuaV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f9ddcf-4738-4f2a-b35f-3bd7bbfbd852_1210x440.png" width="1210" height="440" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0f9ddcf-4738-4f2a-b35f-3bd7bbfbd852_1210x440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:440,&quot;width&quot;:1210,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94173,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davistreybig.substack.com/i/161053780?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f9ddcf-4738-4f2a-b35f-3bd7bbfbd852_1210x440.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!OuaV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f9ddcf-4738-4f2a-b35f-3bd7bbfbd852_1210x440.png 424w, https://substackcdn.com/image/fetch/$s_!OuaV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f9ddcf-4738-4f2a-b35f-3bd7bbfbd852_1210x440.png 848w, https://substackcdn.com/image/fetch/$s_!OuaV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f9ddcf-4738-4f2a-b35f-3bd7bbfbd852_1210x440.png 1272w, https://substackcdn.com/image/fetch/$s_!OuaV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f9ddcf-4738-4f2a-b35f-3bd7bbfbd852_1210x440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The key thing here is agency - tools like Cursor empower product managers and designers to be 100x more independent in ideation &amp; driving impact because they no longer constantly need to wait for engineers to get things done. Every designer has 100+ UX papercuts they wish they could fix but which never get prioritized. Every PM has 5 ideas they wish they could concept to show customers to get feedback on, and has 100 minor feature requests and bug requests from customers they wish they could address. AI coding tools suddenly allow these things to be fixed outside of begging an engineer to include it in the next sprint. </p><h3><strong>Extreme behavior</strong></h3><p>In my opinion, this is a classic example of &#8220;extreme behavior&#8221; - where people are going out of their way to do something unnatural because the benefits are so substantial. Specifically, <strong>I do not think that code-first IDE are actually the optimal interface for PMs &amp; Designers to prototype or make small changes to the product. </strong></p><p>PMs/Designers are not software engineers and, for the most part, are not deeply familiar with the numerous concepts implicitly embedded in tools like Cursor, such as:</p><ol><li><p>Git semantics - cloning, branching, etc</p></li><li><p>Interacting with a terminal and viewing console log outputs</p></li><li><p><strong>Reading &amp; writing code! </strong></p></li></ol><p>While you can, of course, ignore these things and &#8220;vibe code&#8221; your way through figuring things out until they work, this has obvious pitfalls. Tools like Bolt &amp; Loveable partially solve this problem by abstracting much more &#8220;software engineering&#8221; concerns from the user, but are ultimately very oriented towards independent, &#8220;net new&#8221; apps rather than maintaining and updating a large, established codebase. They are also still quite code-oriented in terms of what they show the user. </p><p>So, while the behavior of some software engineering shifting right to PMs &amp; Designers is here to stay, I think it is unlikely that the optimal end state of this is everyone using a software-engineer oriented IDE. </p><h3><strong>What would an &#8220;development environment&#8221; for the non-SWE persona look like? </strong></h3><p>If you thought about solving this workflow for non-software engineering persona from first principles, what might it look like? These are some of the principles that I think would matter a lot: </p><p></p><h4><strong>A more visual editing experience oriented around a staging preview of the app </strong></h4><p>IDEs treat code as the first class citizen and previews of the application as a secondary workflow. I think this should be flipped on its head for non-engineers - the &#8220;thing&#8221; you are working on should probably look like a live staging preview of the app, and code should secondary or tertiary. </p><p>You see hints of this direction in products like Replit which increasingly leans towards just showing you a natural language conversation with the agent plus the web app preview, and have increasingly deprioritized code &amp; the terminal - though I think I would take the idea a lot farther than this if orienting towards PMs &amp; Designers. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vXtp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3059e5b1-73a7-4d5b-a2c1-d1a91db54c77_1503x814.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vXtp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3059e5b1-73a7-4d5b-a2c1-d1a91db54c77_1503x814.png 424w, https://substackcdn.com/image/fetch/$s_!vXtp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3059e5b1-73a7-4d5b-a2c1-d1a91db54c77_1503x814.png 848w, https://substackcdn.com/image/fetch/$s_!vXtp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3059e5b1-73a7-4d5b-a2c1-d1a91db54c77_1503x814.png 1272w, https://substackcdn.com/image/fetch/$s_!vXtp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3059e5b1-73a7-4d5b-a2c1-d1a91db54c77_1503x814.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vXtp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3059e5b1-73a7-4d5b-a2c1-d1a91db54c77_1503x814.png" width="1456" height="789" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3059e5b1-73a7-4d5b-a2c1-d1a91db54c77_1503x814.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:789,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vXtp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3059e5b1-73a7-4d5b-a2c1-d1a91db54c77_1503x814.png 424w, https://substackcdn.com/image/fetch/$s_!vXtp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3059e5b1-73a7-4d5b-a2c1-d1a91db54c77_1503x814.png 848w, https://substackcdn.com/image/fetch/$s_!vXtp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3059e5b1-73a7-4d5b-a2c1-d1a91db54c77_1503x814.png 1272w, https://substackcdn.com/image/fetch/$s_!vXtp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3059e5b1-73a7-4d5b-a2c1-d1a91db54c77_1503x814.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://blog.replit.com/replit-apps">Replit</a> </figcaption></figure></div><p>You can then imagine a range of editing workflows that would be more visual &amp; language oriented than what you see in coding IDEs. For example:</p><ol><li><p>Click through a workflow of the app and then describe how you want it to change in natural language</p></li><li><p>Use an &#8220;inspect element&#8221; like flow to click or select certain parts of the app, and then describe how you want it to change</p></li><li><p>Drag in a spec, PRD, Jira ticket, or similar and draw on top of the application like a canvas - highlighting the portion of the application the change should apply to</p></li></ol><p>As you make such changes, you can imagine an AI coding assistant that progressively helps you implement this in the staging environment at increasing levels of sophistication - starting with DOM changes to confirm basic visual patterns, then HTML/CSS changes, then backend changes - corroborating the intent and purpose of your change with you as it goes. </p><p>This mirrors the experience of a designer sitting next to an engineer in an office - saying what they want and providing live feedback on the application as the engineer progressively implements it.</p><p>You&#8217;ll note that this is de-facto how non-engineers who &#8220;vibe code&#8221; in tools like Cursor work today - they basically just keep interacting with the localhost preview and telling the AI what to change until it works, completely ignoring the code being written for the most part. </p><p></p><h4>A focus on simple, visual changes, not backend changes</h4><p>Part of the power of a product like this would come from scoping down the breadth of what you aim to enable. Obviously, engineers will still be required for complex changes or major features in complex codebases - it is the small, mostly visual, mostly front-end changes that make sense to offload to PMs &amp; Designers. </p><p>I would focus the entire product experience on these sorts of changes - perhaps even starting by only allowing changes to client-side HTML/CSS/JavaScript rather than messing with the backend at all. </p><p>This would allow you to simplify a lot of things - from the way the AI coding agents work under the hood to the user experience and workflows you need to support. Software IDEs are designed around enabling someone to change <em>anything</em> in a codebase - but this, in my opinion, is a non-goal for a product like this and is part of how you par back complexity to empower the non-software-engineer.</p><p></p><h4><strong>Prototyping as a wedge, but not the end state</strong></h4><p>A lot of the way tools like Cursor and similar are used today by product managers and designers is <strong>prototyping</strong>. By this I specifically mean - creating sample versions of the application which are used to demonstrate or communicate a concept, but which engineers don&#8217;t use as a baseline for code changes. </p><p>While I think prototyping is likely an important wedge use case to focus on as a startup in this space, in my opinion the major opportunity lies in going beyond that and finding the situations where the end deliverable is actually a pull request. </p><p>Consider the workflow I mentioned earlier - where the user interacts with the staging preview and iteratively refines it in collaboration with an AI coding agent. Once the application reflects the <em>intent</em> of the product manager or designer (e.g. the frontend/visuals/UX look right), the system can then spend many hours thinking about how to turn this change into a proper pull request, inclusive of additional changes that may be needed across the database, the backend, or other adjacent components. This can ultimately turn into a PR that is delivered to an engineer, enriched by all the specification the PM/designer did when iterating on the feature. </p><p>I think that going all the way to the pull request is how you capture real value as a startup in this space - as you are no longer just a prototyping tool but a key part of the software development lifecycle. Indeed, I think the natural adoption curve for a tool in this space would be:</p><ol><li><p>Offer a free prototyping tool which can be adopted by any PM/designer on their own and requires no integration into the codebase or other systems. I would probably have this work mostly around screenshots - where you can screenshot pieces of the app you want to prototype changes to, the system creates a non-functional prototype of that UI (since it doesn&#8217;t actually know anything about your full codebase or application), but you can update it visually as you please to communicate ideas in much more expressive, interactive ways. This is sort of like a persona-specific Bolt that is designed to &#8220;branch&#8221; off of existing applications</p></li><li><p>The paid product would integrate into and fully understand your codebase - and would allow for the creation of truly functional prototypes built on staging versions of your application that can be turned into PRs</p></li></ol><p>Of course, the quality bar for creating a pull request is <em>much</em> higher - which leads me to my next point. </p><p></p><h4>Treating the hand-off to engineers as a first class citizen</h4><p>One of the most significant challenges, and opportunities, in this space is tackling the handoff to engineer. An obvious failure case here is that all the PMs and Designers at a company start thinking they can make all sorts of changes on their own and this all gets sent as PRs to engineers, causing the engineers go crazy if many of these PRs are bad, low quality, or require a lot of changes to be production-grade. </p><p>I think this is solvable and indeed is part of where you would build a large set of features that do not need to exist in a tool like Cursor/Windsurf. For example:</p><ol><li><p>Allow engineers to set policy for the types of changes that can or can not be turned into automatic PRs (e.g. &#8220;If it touches the database at all, it can&#8217;t be turned into a PR&#8221;)</p></li><li><p>If the AI agent determines after thinking for awhile that a given change is overly complex or unlikely to be implemented in an automated fashion correctly - it can simply go back to the PM/Designer and say &#8220;Hey I think this is too complex for me to handle, let&#8217;s just share the prototype with the engineers but I shouldn&#8217;t actually try to implement this&#8221; </p></li><li><p>The &#8220;feedback&#8221; flow would need to be seriously thought through. This idea breaks many of the assumptions in the standard pull-request workflow, where engineer one submits a PR and engineers 2/3/4 provide feedback which is then responded to by engineer one. If the reviewing engineer has feedback on the PR, what happens? Does this get sent to the PM/Designer? If so, how do they address it? If not, who is responsible for implementing those last-mile changes </p></li></ol><p>I actually think getting this piece right is the hardest, and most critical part of building a product like this. Done correctly, engineers will <em>also</em> end up pulling you into their company, because they will be tired of their PMs/Designers vibe coding in Cursor and submitting lots of slop to them without guardrails. </p><h3><strong>Concluding</strong></h3><p>I am fairly convinced there is a massive startup opportunity in this space.  I think design and product management are changing more right now than they have in the past 20 years thanks to AI-assisted coding. As a result, I think there is a unique opportunity to create an entirely new type of &#8220;integrated <strong>non-developer</strong> environment&#8221; which is oriented toward visuals and app interaction, not code. </p><p>I think it is exceptionally unlikely that this is done by existing incumbents (e.g. Figma, Productboard) because it obviates the core mental model of such products - the primary reason people worked in these lower fidelity mediums is because the burden of writing code was so high and the skillset so specialized. </p><p>While I don&#8217;t think that vector graphic-based designs or PRDs will go away, I think there are a lot of situations where it will now be much better to simply build and work on the real thing. You see this empirically today with all the designers/PMs using AI codegen tools instead of their traditional workflows. </p><p>If you are interested in building something in this space, please reach out - davis @ innovationendeavors.com          </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p><p> </p>]]></content:encoded></item><item><title><![CDATA[LLMs as compilers]]></title><description><![CDATA[Recently, there have been a few interesting papers that essentially treat LLMs as a compilers - most notably KernelBench and Sakana&#8217;s AI CUDA Engineer (though note that the Sakana paper had some issues around the model reward hacking).]]></description><link>https://davistreybig.substack.com/p/llms-as-compilers</link><guid isPermaLink="false">https://davistreybig.substack.com/p/llms-as-compilers</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Thu, 03 Apr 2025 23:34:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!A25H!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65712cc2-1fff-482c-ac2c-f8c57efa1913_400x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recently, there have been a few interesting papers that essentially treat LLMs as a compilers - most notably <a href="https://scalingintelligence.stanford.edu/blogs/kernelbench/">KernelBench</a> and <a href="https://sakana.ai/ai-cuda-engineer/">Sakana&#8217;s AI CUDA Engineer</a> (though note that the Sakana paper had some issues around <a href="https://x.com/SakanaAILabs/status/1892992938013270019">the model reward hacking</a>). </p><p>Each paper used an LLM to take higher-level Pytorch code and write optimized GPU kernels for this code. Roughly, the idea in each case is as follows:</p><ol><li><p>Take the high level Pytorch code</p></li><li><p>Have LLM write a sample CUDA kernel implementation</p></li><li><p>Test whether the CUDA code compiles, whether the CUDA code appears to be correct (via sampling input output pairs and comparing to the pytorch code), and whether the CUDA code is faster than the pytorch code via profiling the execution</p></li><li><p>Have a feedback loop between #3 and the LLM - iteratively refining the CUDA kernel until you get a result you like (or you hit a pre-determined stop threshhold)</p></li></ol><p><a href="https://scalingintelligence.stanford.edu/KernelBenchLeaderboard/">The results of this</a> are, in my opinion, really interesting. Specifically, let&#8217;s consider the KernelBench paper. While many of their results were <em>not</em> correct and/or did <em>not</em> speedup the kernel relative to torch.compile(), they also showed various situations that led to dramatically faster, correct kernels. For example, their diagonal matrix multiplication kernel was 12x faster than torch.compile(), and another another kernel that performs matrix multiplication, division, summation, and then scaling was 3x faster than torch.compile(). </p><p>What&#8217;s cool about this, though, is that because writing kernels is automatically measurable via verification loops, the negative cases don&#8217;t really matter relative to the positive cases. You can simply search until you find good results that show speedups, use those, and throw away everything else. This is a great example of the sorts of <a href="https://davistreybig.substack.com/p/generative-ai-and-the-shift-from?r=9aot">&#8220;design + verify&#8221;</a> style systems that LLMs are so, so well suited for. </p><p>This is an interesting paradigm because you are, in essence, replacing a compiler with a large language model based system - and each of these have profoundly different tradeoffs. Compilers are deterministic so you are guaranteed correctness, and they also tend to generalize very well, but they often leave juice to be squeezed relative to hand-crafted implementations. This LLM-based process is non-deterministic and often produces invalid results, but can also produce extremely specialized custom kernels for specific functions you want to optimize against. </p><p>This trade-off feels like it may especially be worth it in the area of ML systems - where in many cases the goal is to optimize very specific types of operations to the nth degree rather than support general purpose code optimization in a robust way. Furthermore, sacrificing correctness for speed/performance is not a new concept in machine learning systems - quantization paradigms do exactly the same thing. </p><p><a href="https://www.youtube.com/watch?v=5YhvBFasQyA&amp;ab_channel=DSAIbyDr.OsbertTay">ML has slowly been creeping into systems optimization for awhile</a> - and I suspect can be taken much further with LLMs in many cases now. It wouldn&#8217;t surprise me that these ideas can be applied in many other areas of systems as well - e.g. distributed systems, databases, etc. </p><p>*<a href="https://developer.nvidia.com/blog/automating-gpu-kernel-generation-with-deepseek-r1-and-inference-time-scaling/">see also this NVIDIA blog post about AI generated Kernels</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[ReCaptcha for reasoning]]></title><description><![CDATA[The opportunity for creative business models in AI data annotation]]></description><link>https://davistreybig.substack.com/p/recaptcha-for-reasoning</link><guid isPermaLink="false">https://davistreybig.substack.com/p/recaptcha-for-reasoning</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Thu, 20 Mar 2025 19:55:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6Sq9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3207c8-594d-43c6-87d1-bd2a969b1a8d_1024x576.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The demand for high quality data from AI labs and AI startups right now is unprecedented. Leading AI labs will now pay $2k+ for sophisticated reasoning traces in advanced domains (e.g. legal, healthcare, etc), and companies like <a href="https://www.surgehq.ai/">Surge</a> &amp; <a href="https://mercor.com/">Mercor</a> have grown revenue at unprecedented scale serving this market.  </p><p>For the most part, data startups that I have seen attempting to serve this market have focused on finding efficient ways to procure labor and then assign them annotation tasks. e.g. Scale will go to OpenAI and say &#8220;we have a huge pool of neurologists who can do annotation tasks for you&#8221;. This, of course, has worked well for many of these companies given the demand for these sorts of data annotation tasks, but it also means that many of them look more like labor arbitrage services business than true software businesses. </p><p>This plays out both in margin profile as well as in repeatability. Many of these labeling companies end up having to constantly update/adapt their labor pools to match the current annotation-task-du-jour - e.g. Scale invested huge resources into AV labeling in the early days, and then had to re-do many aspects of labour sourcing, labor evaluation, and internal tooling to adapt to <a href="https://huggingface.co/blog/rlhf">RLHF</a> annotation tasks for foundation model companies. </p><p>I suspect there is opportunity for more creative business models in this space, particularly those that play with gamification or clever incentive structures to create high quality data as an implicit output. These would look more like scalable, software-driven approaches that passively generate annotation data&#8212;often as a byproduct of something users already want to do.</p><p><a href="https://cloud.google.com/security/products/recaptcha">ReCaptcha</a> is a good historical illustration of what this might look like. ReCaptcha is the anti-bot measure you have likely seen logging into many online accounts before, where it has you do things like &#8220;click the squares with traffic lights&#8221;. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6Sq9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3207c8-594d-43c6-87d1-bd2a969b1a8d_1024x576.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6Sq9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3207c8-594d-43c6-87d1-bd2a969b1a8d_1024x576.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6Sq9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3207c8-594d-43c6-87d1-bd2a969b1a8d_1024x576.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6Sq9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3207c8-594d-43c6-87d1-bd2a969b1a8d_1024x576.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6Sq9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3207c8-594d-43c6-87d1-bd2a969b1a8d_1024x576.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6Sq9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3207c8-594d-43c6-87d1-bd2a969b1a8d_1024x576.jpeg" width="1024" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6f3207c8-594d-43c6-87d1-bd2a969b1a8d_1024x576.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How Google ReCAPTCHA Works in Data Protection?&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="How Google ReCAPTCHA Works in Data Protection?" title="How Google ReCAPTCHA Works in Data Protection?" srcset="https://substackcdn.com/image/fetch/$s_!6Sq9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3207c8-594d-43c6-87d1-bd2a969b1a8d_1024x576.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6Sq9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3207c8-594d-43c6-87d1-bd2a969b1a8d_1024x576.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6Sq9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3207c8-594d-43c6-87d1-bd2a969b1a8d_1024x576.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6Sq9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f3207c8-594d-43c6-87d1-bd2a969b1a8d_1024x576.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>ReCaptcha is offered as a free service because there is a secondary benefit that stems from all these users clicking squares in the image - it produces free image segmentation &amp; annotation data for Google. </p><p>Other examples of this concept that I find interesting include <a href="https://en.wikipedia.org/wiki/Foldit">FoldIt</a>, which turned protein folding annotation into something that essentially felt like a game and as a result crowdsourced one of the largest protein folding datasets, and <a href="https://en.wikipedia.org/wiki/Kaggle">Kaggle</a>, which created a competition-dynamic around modeling tasks.  </p><p>I strongly suspect that these sorts of ideas of offering a service for free as a way to indirectly generate high volumes of annotation data could be applied to some of the very-high-value foundation model annotation tasks that exist today, such as reasoning trace generation or RLHF data. </p><p><a href="https://lmarena.ai/">ChatBot Arena</a> is one such example of this. If you&#8217;re not familiar, ChatBot arena essentially turns comparative evaluation of language models into a simple game, letting users compare responses to prompts and rank which model was better or worse. This allows for not only the creation of an interesting leaderboard much more aligned with user preferences than many standard eval benchmarks, but it is also essentially creating a high quality RLHF dataset. </p><p>I think there is a lot of room for creative ideas that take this concept much further. For example:</p><ol><li><p>Could you offer free tools which integrate into the systems of engagement that certain key knowledge workers use (e.g. lawyers, doctors), in return for capturing the usage data from that worker? There are huge amounts of latent thinking &amp; reasoning data implicitly generated in systems like EHRs, CRMs, etc</p></li><li><p>Could you create games or gamified experiences that implicitly generate unique reasoning traces? </p></li><li><p>Could you create marketplaces with unique incentive or compensation structures that help match certain types of long-tail, specialized labor with annotation tasks? (analogous to HackerOne in security)</p></li><li><p>Could you build free utilities in high-value domains where there is very little public data? e.g. free podcasting utility to create multi channel audio data, free 3D editing utility or Blender plugin for 3D data</p></li></ol><p>Done properly, such a business could have very compelling dynamics as it could scale more like a software business and could have strong network effects because most of these ideas implicitly have both a demand &amp; supply side and/or look like marketplaces to some extent. </p><p>I think this type of business-model insight is under-appreciated in the data annotation space, and I&#8217;d love to connect with teams thinking creatively along these lines.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[LLM-Assisted Coding & Feature Dense Startup Categories]]></title><description><![CDATA[I spend a lot of time looking at feature dense startup categories, where in order to compete you must build a massive number of table stakes features in order to seriously be considered by your users.]]></description><link>https://davistreybig.substack.com/p/llm-assisted-coding-and-feature-dense</link><guid isPermaLink="false">https://davistreybig.substack.com/p/llm-assisted-coding-and-feature-dense</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Thu, 20 Feb 2025 20:40:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!A25H!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65712cc2-1fff-482c-ac2c-f8c57efa1913_400x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I spend a lot of time looking at feature dense startup categories, where in order to compete you must build a massive number of table stakes features in order to seriously be considered by your users.</p><p>Good examples of this include spreadsheets, architecture, computer aided design, anything serving creative professionals (e.g. video editing, motion graphic editing, photoshop, Figma), 3D design, integrated developer environments, chip design (e.g. Altium), simulation (e.g. Mathworks), and CRMs. A good rubric for this type of startup is that a full time professional &#8220;lives&#8221; in the tool - e.g. it is the <em>primary</em> tool someone interacts with as part of their day-to-day job. Most highly skilled knowledge workers have a core system of engagement that looks like this. </p><p>The classic challenge with building startups in these categories is that achieving feature parity is often necessary in order to be seriously considered. It doesn&#8217;t matter that your product is multiplayer, or has cool cloud features, or has AI built into it, etc unless you <em>also</em> still allow the professional to do everything they are used to doing. </p><p>As a simple example - if you&#8217;re trying to displace Excel but are missing one critical built-in function or one critical hotkey, your user will instantly get super annoyed/frustrated and go back to excel. The root cause of this is that users of such tools tend to become extreme experts of such tools, and their productivity is deeply tied to their proficiency with their tool. Correspondingly, they can viscerally <em>feel</em> themselves becoming less productive the second they can&#8217;t do X thing they are used to doing all the time. </p><p>This is the blessing and curse of such categories - it is super hard to compete, but if you hit escape velocity you have a crazy hard to breach moat. This is a key reason why Salesforce, Altium, Autodesk, and similar are such enduring giants in spite of generally being old, sort of shitty pieces of software. </p><p>The classic implication of this for startups is that you basically have two choices if you want to attack a category like this. Option one is raise a lot of money, spend a long time building, and survive until you hit sufficient feature density - e.g. Figma building for 4-5 years before really making money. Option two is attack the periphery of the space - e.g. <a href="https://frame.io/">Frame.io</a> attacked the collaboration layers around Adobe Premiere, but didn&#8217;t attack Premiere in of itself. This can work but often limits upside. </p><p>What I find interesting is that LLM-assisted code generation tools may <em>dramatically</em> increase the feasibility of option one. The reason for this is that the functionality required in these categories is typically well understood, well defined, and &#8220;obvious&#8221; to some extent - it just takes a really long time to build it in totality. This is an insanely good match for LLM copilots &amp; agentic systems, which are quite effective at churning out obvious or well understood functionality. </p><p>I am starting to see this play out in various startups I work with - who find that tools like Github Copilot have so much latent knowledge from their pre-training corpus about common features in established categories that they can very, very quickly get you to 90% implementation. e.g. <a href="https://sequence.film/">Sequence</a> is able to race through implementing many common audio &amp; color features in video editors because LLMs inherently understand them very well. Similarly, I observe that many of the newer CRM startups (e.g. <a href="https://www.getclarify.ai/">Clarify</a>) are able to race through covering a lot of the functional requirements in CRMs that traditionally would have been a bigger barrier to entry. </p><p>This idea likely extends to other categories of startups where defensibility mostly comes from lots of &#8220;grunge work&#8221;. Integration companies such as MuleSoft, Plaid, and similar are another good example of this - where a lot of the value came from a team chewing glass for years as they built custom integrations into every single API or bank. These tasks are so amenable to LLMs in many cases that I think this form of moat is less relevant today than it was before. </p><p>This is exciting to me because I think it allows startups to focus more on the &#8220;craft&#8221; of seriously improving the user experience in these categories and innovating on fundamental interaction models, rather than mostly having to focus on table-stakes feature parity.  </p>]]></content:encoded></item><item><title><![CDATA[Mechanisms for Test Time Compute]]></title><description><![CDATA[A survey of methods to create inference-time reasoning models]]></description><link>https://davistreybig.substack.com/p/mechanisms-for-test-time-compute</link><guid isPermaLink="false">https://davistreybig.substack.com/p/mechanisms-for-test-time-compute</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Fri, 10 Jan 2025 02:27:57 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/84238876-f6c5-4bfe-b402-8ac7b6470159_2445x1500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One of the most interesting research trends in LLMs right now is the rise of reasoning models which spend time &#8220;thinking&#8221; before giving you an answer. <a href="https://openai.com/index/learning-to-reason-with-llms/">OpenAI o1</a> is the predominant public LLM doing this today, though <a href="https://api-docs.deepseek.com/news/news1120?utm_campaign=The%20Batch&amp;utm_source=hs_email&amp;utm_medium=email&amp;_hsenc=p2ANqtz--PChA-PmMEKM6nNL57xElvflnwlDxDV5Sq2kxmxwYJVU8kg0gGwVFMbTJoU5HEeqGEgV99">Deepseek R1</a> and <a href="https://qwenlm.github.io/blog/qwq-32b-preview/">Qwen QwQ</a> are other notable recent releases in this domain as well. </p><p>This technique is broadly described as &#8220;test time&#8221; compute - i.e. reasoning at inference time. While the idea of models which apply search or deeper reasoning at inference has been around for a while - e.g. <a href="https://deepmind.google/discover/blog/alphazero-shedding-new-light-on-chess-shogi-and-go/">AlphaZero</a>, <a href="https://arxiv.org/abs/1611.09940">this paper applying similar ideas to the traveling salesman problem before transformers were a thing</a> - it has sort of re-entered the zeitgeist with o1. </p><p>What seems particularly exciting is that this form of test time compute <em>may</em> demonstrate similar scaling laws as pre-training - in other words, there is a theoretically predictable exponential increase in model capabilities as you allocate more compute during inference time before giving an answer, just as there has been a predictable exponential increase in model capabilities as you train them with more compute. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cQ2f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa13ee327-be6b-4f15-a2c8-6a01f3976343_1640x902.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cQ2f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa13ee327-be6b-4f15-a2c8-6a01f3976343_1640x902.png 424w, https://substackcdn.com/image/fetch/$s_!cQ2f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa13ee327-be6b-4f15-a2c8-6a01f3976343_1640x902.png 848w, https://substackcdn.com/image/fetch/$s_!cQ2f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa13ee327-be6b-4f15-a2c8-6a01f3976343_1640x902.png 1272w, https://substackcdn.com/image/fetch/$s_!cQ2f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa13ee327-be6b-4f15-a2c8-6a01f3976343_1640x902.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cQ2f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa13ee327-be6b-4f15-a2c8-6a01f3976343_1640x902.png" width="1456" height="801" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a13ee327-be6b-4f15-a2c8-6a01f3976343_1640x902.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:266168,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cQ2f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa13ee327-be6b-4f15-a2c8-6a01f3976343_1640x902.png 424w, https://substackcdn.com/image/fetch/$s_!cQ2f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa13ee327-be6b-4f15-a2c8-6a01f3976343_1640x902.png 848w, https://substackcdn.com/image/fetch/$s_!cQ2f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa13ee327-be6b-4f15-a2c8-6a01f3976343_1640x902.png 1272w, https://substackcdn.com/image/fetch/$s_!cQ2f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa13ee327-be6b-4f15-a2c8-6a01f3976343_1640x902.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">OpenAI&#8217;s visualization of test time scaling for O1 - accuracy increases predictably relative to log-scale compute, indicating an exponential relationship</figcaption></figure></div><p>But, what is actually happening under the hood for models like o1 to do this, and what are the different mechanisms or techniques by which test time compute scaling can be achieved? I have not found a good, intuitive overview of this anywhere, and OpenAI is very tight lipped about what exactly they are doing, so this is my attempt to create one. </p><p>In this blog I aim to outline, in simple terms, the major ways test time compute scaling can be achieved, based on both reviewing a lot of the recent literature in this space as well as talking to a number of ML researchers at research labs. </p><h2>Basic mechanisms for test time compute</h2><h4><strong>Best of N Sampling, Majority Voting, &amp; Similar</strong></h4><p>Have a language model generate many possible outputs during inference time, and then use some kind of sampling, voting, or other evaluation/verifier methodology to pick the &#8220;top&#8221; answer. This is a simple idea that requires essentially no changes to how the model is trained, but does seem to be an effective baseline. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gZSe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85293eb0-9516-40b9-925a-52ce3a0193d5_2044x554.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gZSe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85293eb0-9516-40b9-925a-52ce3a0193d5_2044x554.png 424w, https://substackcdn.com/image/fetch/$s_!gZSe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85293eb0-9516-40b9-925a-52ce3a0193d5_2044x554.png 848w, https://substackcdn.com/image/fetch/$s_!gZSe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85293eb0-9516-40b9-925a-52ce3a0193d5_2044x554.png 1272w, https://substackcdn.com/image/fetch/$s_!gZSe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85293eb0-9516-40b9-925a-52ce3a0193d5_2044x554.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gZSe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85293eb0-9516-40b9-925a-52ce3a0193d5_2044x554.png" width="2044" height="554" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85293eb0-9516-40b9-925a-52ce3a0193d5_2044x554.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:554,&quot;width&quot;:2044,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:216939,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gZSe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85293eb0-9516-40b9-925a-52ce3a0193d5_2044x554.png 424w, https://substackcdn.com/image/fetch/$s_!gZSe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85293eb0-9516-40b9-925a-52ce3a0193d5_2044x554.png 848w, https://substackcdn.com/image/fetch/$s_!gZSe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85293eb0-9516-40b9-925a-52ce3a0193d5_2044x554.png 1272w, https://substackcdn.com/image/fetch/$s_!gZSe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85293eb0-9516-40b9-925a-52ce3a0193d5_2044x554.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://arxiv.org/pdf/2407.21787">Large Language Monkeys</a></figcaption></figure></div><p>The first nuance here is in the verifier. Simple approaches like majority voting generalize well but have limits in their utility. Specific domains like coding or math have specialized verifiers that can be used (e.g. unit test &amp; compilers for code, symbolic engines for math), but these are not general purpose. An increasingly common technique is fine-tuning an LLM to be a specialized verifier - e.g. see <a href="https://arxiv.org/pdf/2408.15240">here</a>. </p><p>The other issue is that - it is likely that for many more complex problems, no matter how many times you sample a &#8220;standard&#8221; model, you will not get the right answer (or it will take an unfeasible amount of compute to generate the right answer at a sufficiently high probability). As we will see, the right way to solve this is likely to either train on better reasoning traces, or to have a reward process that can help &#8220;nudge&#8221; the model through a complex reasoning trace. </p><h4>Chain of thought</h4><p>The second approach is to have the language model generate a very long, detailed chain of thought reasoning trace as a way to improve reasoning capabilities. This is just a single model auto regressively producing a lot of tokens as it, essentially, talks to itself - there is no secondary system or control flow. <a href="https://openai.com/index/learning-to-reason-with-llms/">OpenAI shows examples of this in its o1 announcement. </a></p><p>While a basic version of this can be achieved via prompting (e.g. <em>&#8220;think step by step&#8221;</em>), the advanced version of this involves specialized pre-training and post-training techniques which optimize for these sorts of long reasoning traces. </p><p>The nuance here is in how exactly the models are trained to be better at these long reasoning traces. Roughly, there are a few ways of achieving this: </p><ol><li><p><strong>Supervised learning</strong> - In theory, you could train a model to be good at very long CoT reasoning via lots of supervised examples of very long, human-written chains of thought. In practice though, it is extremely difficult to produce enough data of this form to be useful - there are simply too few examples of high quality, long form reasoning in the public domain, and it is too expensive to produce these manually. </p></li><li><p><strong>Synthetic reasoning traces</strong> - In certain problem spaces/domains, you can synthetically generate complex reasoning traces via procedural methods - e.g. see <a href="https://extrasensoryai.github.io/enki/blog/synthetic-data-cot/">here</a> as a great example where they use a knowledge graph to produce question/reasoning/answer pairs which are guaranteed to be correct. In areas like mathematics and computer science, you can also use formal systems (e.g. symbolic engines, languages like <a href="https://lean-lang.org/about/">Lean</a>, compilers &amp; build systems) to produce synthetic reasoning chains. These can be used as training examples for the model. </p></li><li><p><strong>Sample &amp; Verify</strong> - Methods where you ask the LLM to produce many sample reasoning outputs, and then use some form of verification or reward model to identify good vs. bad reasoning chains which then becomes a reinforcement learning dataset for post-training. A critical distinction here is whether to use outcome reward models (ORMs) which validate/invalidate the <em>final</em> reasoning output, or process reward models (PRMs) which can apply a reward value to <em>partial</em> chains of thought (e.g. <a href="https://arxiv.org/pdf/2410.08146">here</a>). This is a very rich domain space as there are many, many ways of sampling generations, training or designing verifiers, and designing the reinforcement learning system to integrate the verifier rewards. </p></li></ol><p>The critical consideration here is what scales in terms of 1. data 2. computational feasibility and 3. human labor? The fact OpenAI mentions their o1 technique is &#8220;data-efficient&#8221; is a representation of the fact that they likely are heavily relying on some combination synthetic data and RL-based verification techniques, as opposed to some kind of human-curated reasoning dataset. </p><p>Synthetic techniques can be effective but tend to be limited to specific domains and types of problems that are more easily quantifiable - as such there are questions about how well they generalize. </p><p>The challenge with sampling techniques is that the computational search space of reasoning for many interesting problems is too large to exhaustively generate and very complex to efficiently validate. This makes it look a lot like other areas of reinforcement learning, like robotics, where you need to get clever on how to simulate or &#8220;search&#8221; the space of outcomes and how you design reward functions. </p><p>This is the critical driver of why process reward models are interesting - they allow you to terminate solutions early which are on the wrong track, and focus on branching out from intermediate states with high likelihoods of success <a href="https://arxiv.org/pdf/2501.04682">(good discussion of this in section 3.3 here)</a>. </p><p>There are a lot of interesting explorations on the right way to structure reasoning traces for effective training. For example, <a href="https://arxiv.org/pdf/2410.09918">Dualformer</a> selectively obfuscates parts of reasoning traces during training in order to (theoretically) help the model learn mental heuristics analogous to fast, system 1 thinking in humans. <a href="https://arxiv.org/abs/2404.03683">Stream of Search</a> highlights potential benefits of having reasoning traces which make a lot of mistakes (e.g. include backtracking, admitting mistakes, changing your mind) as opposed to &#8220;perfect&#8221; reasoning traces towards a conclusion. <a href="https://arxiv.org/abs/2408.16293">This paper</a> similarly demonstrates the value of having mistakes and poor reasoning chains with backtracking in a training set. <a href="https://arxiv.org/pdf/2402.14083">Beyond A*</a> tries to <em>teach</em> models how to search by constructing training examples which replicate well known search algorithms like <a href="https://en.wikipedia.org/wiki/A*_search_algorithm">A*</a>. </p><h4>Inference-time search (and other secondary systems)</h4><p>The third major approach for inference-time scaling is to actually utilize some kind of search technique <em>during</em> inference time. In other words, inference becomes a systems problem, not just a model inference problem, and you have some kind of control flow or orchestration at inference time as opposed to a single model purely generating token output. </p><p>Some interesting examples of this paradigm outside of &#8220;standard&#8221; large language models include <a href="https://deepmind.google/discover/blog/alphazero-shedding-new-light-on-chess-shogi-and-go/">AlphaZero</a>, where a trained neural network guides a Monte Carlo tree search algorithm to select the best next move, and <a href="https://deepmind.google/discover/blog/ai-solves-imo-problems-at-silver-medal-level/">AlphaProof</a>, where a pre-trained large language model + RL algorithm generate solution candidates which are then proved or disproved with the <a href="https://lean-lang.org/about/">Lean</a> proof assistant language. </p><p>The most common variation of this in LLM research today is to integrate some kind of &#8220;search + verify&#8221; technique at inference time - where the model generates a set of N candidate next steps of reasoning, a verifier or reward model is used to grade or score or invalidate those candidates, and then the process is repeated among a subset of the best candidates. Note that you could consider the &#8220;Best of N&#8221; sampling approach discussed earlier as a sub-set of this. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aCj6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf670638-5909-43f7-9c4c-632aa248e408_1144x400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aCj6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf670638-5909-43f7-9c4c-632aa248e408_1144x400.png 424w, https://substackcdn.com/image/fetch/$s_!aCj6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf670638-5909-43f7-9c4c-632aa248e408_1144x400.png 848w, https://substackcdn.com/image/fetch/$s_!aCj6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf670638-5909-43f7-9c4c-632aa248e408_1144x400.png 1272w, https://substackcdn.com/image/fetch/$s_!aCj6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf670638-5909-43f7-9c4c-632aa248e408_1144x400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aCj6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf670638-5909-43f7-9c4c-632aa248e408_1144x400.png" width="1144" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df670638-5909-43f7-9c4c-632aa248e408_1144x400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:1144,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:140194,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!aCj6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf670638-5909-43f7-9c4c-632aa248e408_1144x400.png 424w, https://substackcdn.com/image/fetch/$s_!aCj6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf670638-5909-43f7-9c4c-632aa248e408_1144x400.png 848w, https://substackcdn.com/image/fetch/$s_!aCj6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf670638-5909-43f7-9c4c-632aa248e408_1144x400.png 1272w, https://substackcdn.com/image/fetch/$s_!aCj6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf670638-5909-43f7-9c4c-632aa248e408_1144x400.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://x.com/_philschmid/status/1868919520741445797">HuggingFace overview of test time compute via search + process reward models</a></figcaption></figure></div><p>Good research examples of this include <a href="https://arxiv.org/pdf/2305.10601">Tree of Thoughts</a>, <a href="https://arxiv.org/pdf/2305.00633">Self-Evaluation Guided Beam Search for Reasoning</a>, and <a href="https://arxiv.org/pdf/2305.14992">Reasoning with Language Model is Planning with World Model</a> - each of which utilizes a search technique (breadth first search, depth first search, beam search, Monte Carlo tree search) coupled with a verifier to guide the language model reasoning generation. I like the visual depiction of these in the <a href="https://arxiv.org/pdf/2404.05221">LLM Reasoners paper</a> shown below. Conceptually, all of these ideas &amp; approaches are very similar. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dQk5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7a38a6-f4f7-4261-a6f5-bc3a9327ee92_1126x588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dQk5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7a38a6-f4f7-4261-a6f5-bc3a9327ee92_1126x588.png 424w, https://substackcdn.com/image/fetch/$s_!dQk5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7a38a6-f4f7-4261-a6f5-bc3a9327ee92_1126x588.png 848w, https://substackcdn.com/image/fetch/$s_!dQk5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7a38a6-f4f7-4261-a6f5-bc3a9327ee92_1126x588.png 1272w, https://substackcdn.com/image/fetch/$s_!dQk5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7a38a6-f4f7-4261-a6f5-bc3a9327ee92_1126x588.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dQk5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7a38a6-f4f7-4261-a6f5-bc3a9327ee92_1126x588.png" width="1126" height="588" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e7a38a6-f4f7-4261-a6f5-bc3a9327ee92_1126x588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:588,&quot;width&quot;:1126,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:260158,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dQk5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7a38a6-f4f7-4261-a6f5-bc3a9327ee92_1126x588.png 424w, https://substackcdn.com/image/fetch/$s_!dQk5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7a38a6-f4f7-4261-a6f5-bc3a9327ee92_1126x588.png 848w, https://substackcdn.com/image/fetch/$s_!dQk5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7a38a6-f4f7-4261-a6f5-bc3a9327ee92_1126x588.png 1272w, https://substackcdn.com/image/fetch/$s_!dQk5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7a38a6-f4f7-4261-a6f5-bc3a9327ee92_1126x588.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You&#8217;ll note that this approach of search + verifier + generative model is almost identical to the approach outlined in the chain of thought section above - the only difference is whether these techniques are applied <em>offline</em> to produce post-training RL datasets or applied <em>online</em> during inference time. In either case, however, you are scaling with test time compute - the former teaches the model to reason longer at test time via training, and the latter <em>guides</em> the model over a larger set of generative outputs during inference time. </p><p>Beyond using search algorithms to guide generation, there are other types of secondary systems that can be integrated at inference time which complement the generative model. <a href="https://arxiv.org/pdf/2305.14992">The RAP paper</a> is a particularly interesting example of this - where they use a secondary LLM as a &#8220;world model&#8221; which tracks the state of the environment. In other words - as the generative LLM is producing a continuous stream of reasoning actions that include backtracking, thinking, consideration, etc, the world model tracks the &#8220;state of the world&#8221; at the end of each possible action. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eMS8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593790be-e3c6-4c53-9211-14ec24eeec60_1754x850.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eMS8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593790be-e3c6-4c53-9211-14ec24eeec60_1754x850.png 424w, https://substackcdn.com/image/fetch/$s_!eMS8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593790be-e3c6-4c53-9211-14ec24eeec60_1754x850.png 848w, https://substackcdn.com/image/fetch/$s_!eMS8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593790be-e3c6-4c53-9211-14ec24eeec60_1754x850.png 1272w, https://substackcdn.com/image/fetch/$s_!eMS8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593790be-e3c6-4c53-9211-14ec24eeec60_1754x850.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eMS8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593790be-e3c6-4c53-9211-14ec24eeec60_1754x850.png" width="1456" height="706" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/593790be-e3c6-4c53-9211-14ec24eeec60_1754x850.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:706,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:412132,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eMS8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593790be-e3c6-4c53-9211-14ec24eeec60_1754x850.png 424w, https://substackcdn.com/image/fetch/$s_!eMS8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593790be-e3c6-4c53-9211-14ec24eeec60_1754x850.png 848w, https://substackcdn.com/image/fetch/$s_!eMS8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593790be-e3c6-4c53-9211-14ec24eeec60_1754x850.png 1272w, https://substackcdn.com/image/fetch/$s_!eMS8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593790be-e3c6-4c53-9211-14ec24eeec60_1754x850.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Visual comparison of a standard CoT sequence of actions vs. world model approach where the &#8220;state of the world&#8221; is preserved after each action</figcaption></figure></div><p>In theory, this makes it easier for the model to reason about the impact a subsequent next action will have, relative to a single stream CoT output where the model must implicitly playback the sequence of actions to understand the current state of the world.</p><p>_</p><p><a href="https://arxiv.org/pdf/2404.05221">The reasoners papers mentioned above</a> posits an interesting formalism for trying to unify all these different approaches and ideas (e.g. majority voting, CoT, search techniques, etc). </p><p>They argue that all these techniques are ultimately a combination of: </p><ol><li><p>A reward function to decide preferences for different reasoning steps</p></li><li><p>A world model to specify reasoning state transitions</p></li><li><p>A search algorithm to explore the expansive reasoning space</p></li></ol><p>In this framing, standard chain of thought reasoning has a reward function equivalent to the default model likelihood output, a world model that is just a constant appending of reasoning actions to a full action history, and a &#8220;greedy&#8221; search algorithm that always does a single sample of the output probability distribution. </p><p>I find this to be an interesting way to think about the space. The paper also does some interesting benchmarking and finds that search techniques consistently beat CoT, and RAP (world model + search) consistently beats pure search. </p><p><a href="https://arxiv.org/pdf/2501.04682">This recent meta overview by Stanford</a> of reasoning models describes a similar mental model - arguing most of these approaches are &#8220;integrating generator, verifier, and search components&#8221;, which is essentially the same framing. </p><h3>Additional considerations</h3><h3>Verifiers</h3><p>As you can see, a <em>lot</em> of this hinges on verifiers and the quality of verification. Heuristic/automatic verifiers can be effective but definitionally are domain specific (e.g. test cases for coding questions). Learned verifiers can work, but require high quality training data in the given domain - e.g. <a href="https://arxiv.org/pdf/2110.14168">see this early OpenAI paper which trains learned verifiers for math problems</a>. There is a lot of progress on simply using LLMs as verifiers, but there may be limits to what is feasible with this. Process based verifiers seem important to get right, but are more difficult to design than outcome based verifiers. </p><p><a href="https://deepmind.google/discover/blog/muzero-mastering-go-chess-shogi-and-atari-without-rules/">MuZero</a> is an interesting reference point for where this space likely needs to go - it is a model-free reinforcement learning based system that can learn to play a wide variety of complex games at an elite level. Model-free means nothing is encoded about the specific game it is playing in the RL algorithm. </p><p>This sort of domain-independent verifier design seems critical for models to get generally better at reasoning. Of course, the question is the extent to which this can be mapped to domains with less clear reward functions than Go, chess, shogi &amp; Atari. </p><h3><strong>Will this generalize? </strong></h3><p><a href="https://aidanmclaughlin.notion.site/reasoners-problem">This is an </a><em><a href="https://aidanmclaughlin.notion.site/reasoners-problem">excellent</a></em><a href="https://aidanmclaughlin.notion.site/reasoners-problem"> blog post discussing the challenges with applying RL for reasoning</a>, specifically in the context of OpenAI o1. </p><blockquote><p><em>o1 uses RL, RL works best in domains with clear/frequent reward, and most domains lack clear/frequent reward.</em></p><p><em>&#8230;</em></p><p><em>OpenAI admits that they trained o1 on domains with easy verification but hope reasoners generalize to all domains. Whether or not they generalize beyond their RL training is a trillion-dollar question. Right off the bat, I&#8217;ll tell you my take:</em></p><p><em>&#9888;&#65039; o1-style reasoners do not meaningfully generalize beyond their training</em></p></blockquote><p>Anecdotally, it does seem like many of the current test time compute models are a lot better for very specific problem spaces (math, logic, computer science), but don&#8217;t seem dramatically better in other domains. Indeed, many folks I speak with who have tried these test-time compute models anecdotally feel that they get a lot worse at many conventional or standard generative tasks. Whether or not RL for reasoning can generalize well to harder-to-verify domains is an interesting open question. </p><h3>Reasoning in token vs. latent space</h3><p>Somewhat orthogonal to all of this is the question of whether token-space is the optimal way for a model to reason. There is some interesting research on having models reason directly in <a href="https://arxiv.org/pdf/2412.06769">latent space</a> - where during the reasoning period the hidden states are passed back to the model rather than the decoded token. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mebB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5dffc47-392f-428f-988d-c111b0b4da5b_1340x402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mebB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5dffc47-392f-428f-988d-c111b0b4da5b_1340x402.png 424w, https://substackcdn.com/image/fetch/$s_!mebB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5dffc47-392f-428f-988d-c111b0b4da5b_1340x402.png 848w, https://substackcdn.com/image/fetch/$s_!mebB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5dffc47-392f-428f-988d-c111b0b4da5b_1340x402.png 1272w, https://substackcdn.com/image/fetch/$s_!mebB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5dffc47-392f-428f-988d-c111b0b4da5b_1340x402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mebB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5dffc47-392f-428f-988d-c111b0b4da5b_1340x402.png" width="1340" height="402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5dffc47-392f-428f-988d-c111b0b4da5b_1340x402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:402,&quot;width&quot;:1340,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132723,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mebB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5dffc47-392f-428f-988d-c111b0b4da5b_1340x402.png 424w, https://substackcdn.com/image/fetch/$s_!mebB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5dffc47-392f-428f-988d-c111b0b4da5b_1340x402.png 848w, https://substackcdn.com/image/fetch/$s_!mebB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5dffc47-392f-428f-988d-c111b0b4da5b_1340x402.png 1272w, https://substackcdn.com/image/fetch/$s_!mebB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5dffc47-392f-428f-988d-c111b0b4da5b_1340x402.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In theory, this may have advantages because the hidden state represents a probability distribution of next token generations, whereas the token is essentially a &#8220;sample&#8221; of that probability distribution, and it may be effective to reason across <em>all</em> possible next states vs. picking one as this mirrors how humans reason. </p><p>A potential downside of this approach is that such a model would not &#8220;show its work&#8221; to the user, though given that companies like OpenAI are already hiding their reasoning steps from the user, perhaps this is irrelevant. I suppose it may be possible to still <em>visualize</em> the token output but <em>reason</em> on the latent output, though this may create a divergence between what the user sees and how the model actually reasoned. </p><h3>Agent reasoning</h3><p>One thing I am particularly interested in is how all of this maps to agents. There is an extreme parallel between optimizing a model for complex reasoning trajectories that span many sub-steps, and optimizing an agent for complex reasoning trajectories which span many sub-steps. The only difference is that an agent&#8217;s sub-steps are broken up into different model calls and typically involve more moving pieces (e.g. function calling, etc). </p><p>I observe that many of the leading agent startups building agents for X (e.g. Cognition, Basis, etc) apply many of these ideas to their agent design. For example, I have spoken to multiple agent companies that take their agent traces, replay them with some kind of search technique + reward model to explore counterfactual reasoning paths, and use those counterfactual trajectories as fine tuning examples for improving their agentic system. </p><p>This approach becomes critical if you are working on an agent doing 50-100+ chained LLM calls to solve a given action in a complex environment with many tools, given the combinatorial complexity of actions the agent can take for a single request. </p><p><strong>What I find particularly interesting about this is that it is much more feasible to design domain-specific search algorithms and process reward models than it is to generally solve complex multi-step reasoning at the model layer.</strong> </p><p>This is an interesting corollary of the <a href="https://aidanmclaughlin.notion.site/reasoners-problem">blog post I mentioned above</a> questioning if these techniques will generalize - perhaps RL for complex reasoning will be difficult to generalize well at the model provider layer, and instead will become a core competency (and layer of defensibility) for most applied agent startups in domains that require very complex reasoning to solve tasks (e.g. accounting, tax, finance, architecture, etc). </p><p>I also suspect tooling will emerge that aids agent startups with this sort of task - analogous to the ecosystem that has emerged around fine tuning (e.g. MosaicML). Such tools would make it easier to build search + verifier layers and generate datasets with them for a given applied agent use case. </p><h3>Other interesting resources in this space</h3><ol><li><p>Sasha Rush&#8217;s <a href="https://www.youtube.com/watch?v=6PEJ96k1kiw&amp;ab_channel=SashaRush%F0%9F%A4%97">Speculations on test time scaling</a> and <a href="https://srush.github.io/awesome-o1/o1-tutorial.pdf">associated slides</a></p></li><li><p><a href="https://nrehiew.github.io/blog/2024/">The State of Generative Models 2024</a> - see the section on reasoning and o1</p></li><li><p><a href="https://arxiv.org/abs/2501.04682">Towards System 2 Reasoning in LLMs</a></p></li></ol><p>_</p><p>A lot of this blog is me attempting to explain this all to myself. If you think I am missing something or wrong about something, let me know - davis @ innovationendeavors.com</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[The AI-Native Product Manager]]></title><description><![CDATA[How AI has disproportionately impacted PMs, and the implications that has on the product function]]></description><link>https://davistreybig.substack.com/p/the-ai-native-product-manager</link><guid isPermaLink="false">https://davistreybig.substack.com/p/the-ai-native-product-manager</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Fri, 20 Dec 2024 19:47:18 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e28f4139-474b-4ba1-8e16-be520816b666_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The role within modern tech companies that I think has most disproportionately benefitted from recent advances in AI is the product manager. It&#8217;s not a stretch to say that a good PM today who knows how to use AI tools well is probably 10-20x more leveraged than they were just a few years ago. This takes shape in a few ways:</p><p><strong>AI-assisted coding</strong></p><p>Tools like Cursor/Cognition/etc have created a true step function change in what a technically proficient PM can achieve on their own. It is now within reason for a PM to create v0 prototypes of <em>many</em> features or new ideas without any need for external engineering resources. </p><p>While it is of course true that many good PMs could write basic software on their own before AI copilot tooling, in my experience the juice was often not worth the squeeze given that even the most technical PMs are typically not <em>proficient</em> software engineers. </p><p>However, AI software tools have so dramatically lowered the cost/effort/time to ship functional prototypes and have so raised the ceiling on what a semi-technical person can achieve, that I think this paradigm has fundamentally flipped. Good PMs will start to prototype all new features/ideas themselves before handing off to engineers, and I think this will allow PMs to be almost completely independent for a lot of zero-to-one discovery and validation work. </p><p>I suspect that as this plays out, you will see certain coding tasks more fully delegated to product managers. A good example of this is product instrumentation. PMs are typically the primary stakeholder who cares about this, the nature of instrumentation code changes are typically very simple/straightforward, and in my experience engineers typically don&#8217;t like working on PRs for it. It wouldn&#8217;t surprise me if this sort of task became more fully the responsibility of the product organization. </p><p><strong>AI-assisted design</strong></p><p>Most good product managers dabble as &#8220;part-time&#8221; UX designers - utilizing tools like Figma to riff on user workflows or to mock up simple changes. Advances in AI-assisted design will similarly up-level what is possible for a product manager to achieve on their own in this domain. Examples of this include:</p><ol><li><p><a href="https://v0.dev/">v0</a>, which makes it easy to create sample frontends</p></li><li><p>Tooling like <a href="https://www.figma.com/ai/">Figma AI</a>, which will make it easy to create high fidelity visual layouts of common components/workflows/etc (<em>especially</em> as design systems become more common and these AI products can just compose your design system building blocks)</p></li><li><p>LLMs are going to more broadly minimize the gap between the production assets and design files - making it easy to &#8220;bootstrap&#8221; a design file which mirrors the current production app precisely. This will make it <em>much</em> more accessible for PMs to do many smaller design changes/iterations themselves, as they will not need to either hand-compose the UX from scratch or ask the designer where the canonical design file is. </p></li></ol><p>Similar to my point around how this might allow product instrumentation to shift from engineers &gt; PMs, I ultimately think these sorts of AI-assisted workflows will enable UX designers to spend less time on low-creativity, low-inspiration UX design tasks that need to be done (since the PM can now own those themselves), and focus more on the complex UX design work they specialize in. </p><p><strong>AI-assisted customer feedback analysis</strong></p><p>The most critical job of a PM is to interface with the market and structure requirements &amp; feedback into a plan for the engineering &amp; design organization. The degree to which LLMs have structurally enabled this job to be done differently is unbelievable. </p><p>It is now within reason for a PM to basically analyze every single piece of customer feedback &amp; input across all channels. Emails, bug reports, sales calls, online user sentiment on platforms like X, and similar can all be synthesized with LLMs systems and interrogated by the PM - see platforms like <a href="https://www.enterpret.com/">Enterpret</a> and <a href="https://www.productboard.com/blog/productboard-ai-2/?">ProductBoard AI</a> as intriguing early examples of this. </p><p>Traditionally, PMs had to disintermediate themselves from a lot of this feedback, and rely on, for example, the customer support team&#8217;s aggregation of Zendesk feedback to influence product priorities &amp; roadmap. The degree to which a small number of PMs can now get source-of-truth data about all customer input has fundamentally changed. </p><p>This will also allow prioritization and roadmap planning to be done differently. LLM tooling should be able to easily reconcile discrepancies between the full universe of customer feedback relative to roadmap prioritization - and probably provide very high quality &#8220;first pass&#8221; roadmaps. I can imagine something like <a href="https://www.granola.so/">Granola</a> but for product planning, where the top level strategic goals are input by the product team, and all the other &#8220;details&#8221; get filled out from there based on user feedback. </p><p><strong>AI-assisted communication, alignment, &amp; process management</strong></p><p>Finally, LLMs are starting to play an influential role in how PMs communicate &amp; align their teams. The most obvious breakout version of this right now is <a href="https://www.chatprd.ai/">ChatPRD</a>, which is a copilot for PMs to write high quality product requirement documents. PRDs are the core artifact by which most PMs communicate, and LLMs can clearly play an elegant role in helping to draft them more quickly &amp; improve their quality and rigor. </p><p>Things can likely be taken much further than that, however. Some larger companies like Google have built internal infrastructure which use AI to auto-convert PRDs into Jira/Linear tasks - decomposing the product scope into its sub features. You can also imagine AI systems which analyze PRs and preview environments relative to the PRD, acting as a &#8220;first pass&#8221; product review without the PM having to manually review every single major feature that enters staging. </p><p>More broadly, so much of triaging, routing, and assigning bugs and tickets falls to product managers in many organizations, but could almost certainly be done more automatically in a world of AI. Why can&#8217;t an LLM triage incoming bug requests relative to the roadmap and determine which should go to the backlog vs. which should be prioritized? The more that AI is integrated into the project management cadence, the more PMs can focus on actually valuable strategic work. </p><p><strong>What are the implications of all of this? </strong></p><p>Assuming all of this is true, the next question is how do product organizations commensurately evolve? </p><p>Organizationally, I suspect the ratio of product managers to engineers &amp; designers goes down. It will be more common to have a very small set of extremely senior PMs, who are ridiculously levered thanks to all of this AI tooling. The key driver of this will be that so much of the &#8220;grunt work&#8221; that can suck up a huge amount of a PMs time can now be heavily automated or accelerated with AI - whether analyzing user feedback or triaging issues. Correspondingly, more day-to-day product work will be owned by engineering &amp; design teams, who are empowered with AI tooling to act more like product owners. </p><p>Procedurally, I think the product development lifecycle will change. PMs should be able to be much more self sufficient in doing early market discovery + solution validation thanks to being able to do much more end-to-end prototyping on their own, only handing off to engineering &amp; design when it is <em>very clear </em>that something should be built. </p><p>The relationship between product, engineering, and design will probably also change. PMs should hopefully be able to take on a lot of the &#8220;low hanging fruit&#8221; tasks often assigned to engineers and designers (e.g. product instrumentation, simple UX changes for minor features). Engineering &amp; design should will likely not require as much input/feedback from PMs if it becomes much easier to write extremely high quality, rigorous PRDs (thanks to tooling like ChatPRD) and if agents can act as a &#8220;first pass&#8221; PM review or feedback channel in many situations.  </p><p>I suspect this may also lead to the opportunity for a next generation product management platform - ala Pendo/Productboard 2.0. So much is changing in terms of how PMs work and what will be expected of them that I think you can likely redesign the system of engagement/system of record for product work. Imagine a tool that enabled the following integrated workflow: </p><ol><li><p>Synthesize/search/query all the current user feedback across all channels via Enterpret-esque LLM analysis, helping you create a ranked priority list of key things to address</p></li><li><p>Rapidly create extremely detailed PRDs for the top N priorities via ChatPRD style copilot system, contextualized by the prioritized user feedback</p></li><li><p>Bootstrap UX mocks and mini-app prototypes for each PRD, which the PM can use to quickly do first-pass customer validation. LLMs could even assist with determining which users to run the idea by (and potentially help run UXR style survey-style workflows to collect feedback on the solution)</p></li><li><p>AI-assisted auto-refinement of PRD based on market feedback</p></li><li><p>Once the PM feels the feature is worth implementing, the tool can do a first pass on auto-decomposing it into Jira tickets and subtasks</p></li><li><p>Finally, an LLM agent can act as &#8220;product guardrails&#8221; as the new feature gets implemented, reviewing incremental artifacts (e.g. PRs for each subtask, preview environments for subtasks, etc), providing immediate feedback to eng/design and helping determining what to bubble up to the PM</p></li></ol><p>Something like this would have been totally inconceivable to build until recently, but now I think it is <em>quite</em> possible. Furthermore, while the above touches mostly on the core product iteration loop above, I think LLMs can also address additional issues in product management - such as quantifying product velocity and aggregating product progress across a larger organization. </p><p>A tool like this will need to consider engineering, design, &amp; product all as core stakeholders. AI will make everyone in the organization more of a participant in product work - shepherded by a few very senior, AI-enabled product leads - and correspondingly product management tooling which primarily serves PMs becomes less relevant. Almost all engineers will become &#8220;product engineers&#8221;. This will require a re-envisioning of what product tooling looks like and how it is bundled. </p><p>I&#8217;d be very curious for input/feedback from product managers on these ideas and observations - especially product managers who have tried to really embrace AI-tooling in their job function. Shoot me a note at davis @ innovationendeavors.com</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Adwords for Software APIs ]]></title><description><![CDATA[Will software copilots & agents become an advertising channel for developer tools & APIs, ala Google Search?]]></description><link>https://davistreybig.substack.com/p/adwords-for-software-apis</link><guid isPermaLink="false">https://davistreybig.substack.com/p/adwords-for-software-apis</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Fri, 15 Nov 2024 23:16:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!nzCr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47f4fea5-5291-434d-8797-c3b0e649b314_2148x1608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A trend I see more and more as I speak with developers that use copilot tools (e.g. Github Copilot, Cursor, Augment) is that they increasingly discover and choose third party libraries, services, and APIs based on their software copilot. </p><p>E.g. rather than Google &#8220;Video APIs&#8221;, find the top few options, read through their documentation, and then implement one, a developer may simply ask their copilot to help them implement a video rendering API. If you ask this of Cursor today, it will list Mux as a &#8220;(Recommended)&#8221; provider over Cloudflare, AWS MediaStream, or other options. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nzCr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47f4fea5-5291-434d-8797-c3b0e649b314_2148x1608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nzCr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47f4fea5-5291-434d-8797-c3b0e649b314_2148x1608.png 424w, https://substackcdn.com/image/fetch/$s_!nzCr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47f4fea5-5291-434d-8797-c3b0e649b314_2148x1608.png 848w, https://substackcdn.com/image/fetch/$s_!nzCr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47f4fea5-5291-434d-8797-c3b0e649b314_2148x1608.png 1272w, https://substackcdn.com/image/fetch/$s_!nzCr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47f4fea5-5291-434d-8797-c3b0e649b314_2148x1608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nzCr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47f4fea5-5291-434d-8797-c3b0e649b314_2148x1608.png" width="1456" height="1090" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47f4fea5-5291-434d-8797-c3b0e649b314_2148x1608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1090,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:250222,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nzCr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47f4fea5-5291-434d-8797-c3b0e649b314_2148x1608.png 424w, https://substackcdn.com/image/fetch/$s_!nzCr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47f4fea5-5291-434d-8797-c3b0e649b314_2148x1608.png 848w, https://substackcdn.com/image/fetch/$s_!nzCr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47f4fea5-5291-434d-8797-c3b0e649b314_2148x1608.png 1272w, https://substackcdn.com/image/fetch/$s_!nzCr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47f4fea5-5291-434d-8797-c3b0e649b314_2148x1608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Cursor recommends Mux as a video rendering service provider</figcaption></figure></div><p>In essence, copilot products are becoming a marketing &amp; distribution channels for developer services. </p><p>As these tools mature from mostly assisting with autocomplete and chat-with-your-codebase into agentic systems that provision infrastructure or implement larger scale projects on their own (ala what you see with <a href="https://docs.replit.com/replitai/agent">Replit agent</a> or <a href="https://www.cognition.ai/">Cognition</a>), the degree to which this is true will go up dramatically. You will expect the AI to evaluate tool/service options, pick top contenders, and make recommendations on which services to use in order to implement the feature or PRD that they are assigned. </p><p>If this plays out, it is inevitable that you will see a formalization of marketing tools focused on the software copilot &amp; agent channel. Companies which offer developer services will be desperate to figure out:</p><ol><li><p><strong>SEO</strong> - What is the equivalent of &#8220;SEO&#8221; aimed at software copilots &amp; agents? What types of content are LLMs good at picking up and understanding? How do you make sure that your service is always listed if someone asks a copilot about your product category? </p></li><li><p><strong>Ranking</strong> - What do you need to do to get copilot products to rank your service as &#8220;better&#8221; or &#8220;recommended&#8221; vs. others (as we see in the Mux example above)? How do you ensure that the software agent is factually correct in terms of understanding your offering and comparing it to alternatives? </p></li><li><p><strong>Analytics</strong> -<strong> </strong>How do I measure what leads or signups are coming from software copilots &amp; agents, and then optimize this metric over time or test changes against it? This is essentially Google Search Console or Ahrefs, but for copilot marketing.</p></li></ol><p>As this space matures, you will almost certainly see a proper advertising market formalize - essentially, what is the Adwords equivalent for software libraries/APIs which want to promote themselves in copilot products? A very simplistic way this could work is as follows:</p><ol><li><p>Advertiser (e.g. Stripe) negotiates deal with copilot vendor (e.g. Github Copilot) for queries related to certain terms (e.g. &#8220;Payments API&#8221;)</p></li><li><p>Github Copilot, when a user enters a query or question related to a &#8220;Payments API&#8221; in the chat window, stuffs marketing collateral relates to Stripe&#8217;s payment API into the context of the data sent to the model. It instructs the model to mark any suggested output related to Stripe as &#8220;promoted&#8221; or to wrap that part of the output in special tokens</p></li><li><p>The Github Copilot UI visually delineates &#8220;promoted&#8221; suggestions from &#8220;standard&#8221; suggestions that the model implicitly came up with from its pre-training data set</p></li><li><p>Github tracks autocompletions or similar &#8220;acceptance&#8221; metrics that come from promoted suggestions, and uses that to measure the success of the advertising campaign, analogous to how Meta/Google price on clicks</p></li></ol><p>There would then be a marketplace for bidding on certain keywords across different AI code generation vendors. </p><p>There are numerous other ways this could be handled or implemented, and the above solution would have some issues - but I share it just to give a sense of one way it could work even without any major changes at the model layer. </p><p>Some of the open questions on my mind in relation to all of this:</p><ol><li><p><strong>Will account creation &amp; payments end up being bundled into copilot products?</strong> E.g. if Cursor tells me I should use Mux, why can&#8217;t I just sign up for a Mux API key in my IDE via Cursor? If an autonomous agent implementing a PRD wants to use Mux or Neon or Vercel or any other services, does it need to ask me to go create an account and add payment details in all those cases and then give it the API key, or is there a better solution? </p></li><li><p><strong>Is this any different from non-developer-facing products who want to figure out how to promote their content in ChatGPT?</strong> In some sense, the same problem I am describing exists for any SaaS product that wants to be referenced by ChatGPT when someone references a certain term. Why can&#8217;t one vendor solve SEO/Analytics/Advertising for LLMs broadly? I do think there are some specific nuances in the developer-oriented version of this, but it is a fair question</p></li><li><p><strong>LLM Vendors vs. copilot/codegen providers</strong> - If an advertising market emerges here, does the supply side directly interact with the demand side (copilot/codegen tools), or do the companies training LLMs need to be directly involved? Today, a lot of service provider suggestions in tools like Cursor come implicitly from the model pre-training - e.g. I doubt Cursor has anything to do with listing Mux as a recommended Vendor. But, over time, I think that advertising in LLMs will look more like in-context learning because you want to be able to dynamically inject or adjust promoted content separate from model training. In this world, the model provider would not be as relevant. </p></li></ol><p>I suspect there are startup opportunities in and around this area - just as you saw with the rise of mobile (AppLovin) and web search (DoubleClick, AdMob) as discovery channels. </p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[All Applications are Becoming Distributed Systems]]></title><description><![CDATA[The shift towards distributed data & compute across client, edge, & cloud]]></description><link>https://davistreybig.substack.com/p/all-applications-are-becoming-distributed</link><guid isPermaLink="false">https://davistreybig.substack.com/p/all-applications-are-becoming-distributed</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Fri, 04 Oct 2024 22:18:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Orkg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212d4f60-6294-45b3-a946-b1298e71f9fd_2445x1500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Orkg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212d4f60-6294-45b3-a946-b1298e71f9fd_2445x1500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Orkg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212d4f60-6294-45b3-a946-b1298e71f9fd_2445x1500.png 424w, https://substackcdn.com/image/fetch/$s_!Orkg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212d4f60-6294-45b3-a946-b1298e71f9fd_2445x1500.png 848w, https://substackcdn.com/image/fetch/$s_!Orkg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212d4f60-6294-45b3-a946-b1298e71f9fd_2445x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!Orkg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212d4f60-6294-45b3-a946-b1298e71f9fd_2445x1500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Orkg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212d4f60-6294-45b3-a946-b1298e71f9fd_2445x1500.png" width="1456" height="893" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/212d4f60-6294-45b3-a946-b1298e71f9fd_2445x1500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:893,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64174,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Orkg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212d4f60-6294-45b3-a946-b1298e71f9fd_2445x1500.png 424w, https://substackcdn.com/image/fetch/$s_!Orkg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212d4f60-6294-45b3-a946-b1298e71f9fd_2445x1500.png 848w, https://substackcdn.com/image/fetch/$s_!Orkg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212d4f60-6294-45b3-a946-b1298e71f9fd_2445x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!Orkg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212d4f60-6294-45b3-a946-b1298e71f9fd_2445x1500.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Traditionally, most SaaS applications followed a relatively straightforward system architecture - a frontend client makes API calls via REST or GraphQL to a stateless backend which does all core data manipulation via database queries. </p><p>Such an architecture requires essentially no reasoning about distributed systems (e.g. consensus, coordination, consistency, state invalidation, splitting computation across nodes, etc). Although the application may <em>use</em> a distributed system (a database), the application developer could <em>generally</em> treat it as a black box, with caches being the notoriously annoying classic exception. </p><p>This paradigm is rapidly changing. Specifically, I would argue that modern applications are increasingly becoming distributed systems in the sense that the compute and storage model of the application is spread across client, edge, and cloud. </p><p>Some examples of this include:</p><ol><li><p>&#8220;Local First&#8221; applications like <a href="https://www.youtube.com/watch?v=Wo2m3jaJixU">Linear</a> &amp; <a href="https://www.notion.so/blog/data-model-behind-notion">Notion</a>, which treat the client &amp; server as peers which can diverge on state and must regularly come to consensus</p></li><li><p>Most SaaS apps doing real-time collaboration in their product using techniques like <a href="https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type">CRDTs</a>, such as <a href="https://sequence.film/">Sequence</a></p></li><li><p>Companies like <a href="https://api.video/">API.Video</a>, <a href="http://womp.com">Womp</a>, and <a href="https://sequence.film/">Sequence</a> which do remote video processing (often on edge infrastructure) but then also do some graphics work in the client, essentially splitting their application&#8217;s compute model</p></li><li><p>Companies like <a href="https://www.rilldata.com/">RillData</a> &amp; <a href="https://motherduck.com/">Motherduck</a> who adopt hybrid query execution patterns, running large scale analytical compute both locally and remotely</p></li><li><p>Architectures like <a href="https://arxiv.org/abs/2407.21075">Apple Intelligence</a>, which run variations of ML models both locally and in the cloud and dynamically route across them based on the workload</p></li></ol><p>In simple terms, these architectures trade higher system complexity for faster, more reactive, more responsive application which sometimes offer secondary benefits such as multiplayer collaboration, offline-mode support, and reduced server-side compute costs. </p><p>Their emergence is driven by a number of recent technology improvements in areas like virtualization and distributed systems which make it easier to handle this degree of system complexity. It is also driven as a result of all applications becoming data &amp; AI driven, making all applications increasingly stateful &amp; compute heavy, thereby necessitating more extreme methods for reducing latency and improving responsiveness. </p><p>This is an interesting trend because it substantially changes how applications are designed, it greatly increases application complexity, and it introduces the need to  reason about distributed systems to a new set of engineers who generally never had to think much about it before (application engineers). The hatred most application teams have towards maintaining cache coherence with tools like Redis and Memcached is a good illustration of how messy it can get when people who aren&#8217;t trained in distributed systems have to reason about them. </p><p>This post explores this trend across a few dimensions:</p><ol><li><p>The technical enablers driving these architecture shifts</p></li><li><p>The market forces &amp; workload changes driving these architecture shifts</p></li><li><p>How developer tooling may need to evolve to accomodate these architecture shifts</p></li></ol><h2><strong>Technology Enablers</strong></h2><p>There are numerous recent technology advances which have dramatically simplified  building an application in this way. </p><h4><strong>Embedded libraries</strong></h4><p>There has been a range of activity recently in single-node, embedded, zero-dependency libraries which offer database-like characteristics in a very small form factor that can be run anywhere (e.g. locally, in the browser, etc). </p><p>Good recent examples of this include <a href="https://duckdb.org/">DuckDB</a> (analytical queries), <a href="https://lancedb.com/">LanceDB</a> (search queries), <a href="https://kuzudb.com/">KuzuDB</a> (graph queries). <a href="https://www.sqlite.org/">SQLite</a> is the original example of this and is what has been used for data storage in most embedded systems, IoT devices, and mobile devices for decades.  </p><p>Such libraries are very interesting because they, in theory, allow you to run the same compute engine at every layer of your application - client, edge, &amp; cloud. This is an extremely useful basis for &#8220;<a href="https://www.cidrdb.org/cidr2024/papers/p46-atwal.pdf">hybrid execution</a>&#8221; architectures which dynamically route queries or compute across different nodes based on the query. </p><h4><strong>&#8220;Edge&#8221; Compute &amp; Storage</strong></h4><p>Tooling and infrastructure for provisioning globally distributed edge compute has massively improved over the last few years. Vendors like <a href="https://fly.io/">Fly</a> and <a href="https://developers.cloudflare.com/workers/">Cloudflare</a> (Workers, D1) make it easy to provision compute &amp; storage essentially anywhere on earth, and a range of newer startups like <a href="https://turso.tech/">Turso</a> &amp; <a href="https://www.tigrisdata.com/">Tigris</a> are starting to offer higher level cloud abstractions on top of these geo-distributed datacenters. </p><p>While edge infrastructure is not a new concept - CDNs have obviously been around for awhile helping to serve static content faster and vendors like <a href="https://www.fastly.com/">Fastly</a> offer an array of edge services for application developers such as web application firewalls - it is only more recently that the full range of cloud compute primitives were really accessible beyond AWS-East. </p><p>This vastly simplifies what it takes to build an application that offloads some processing or storage to the edge, which is a fundamental requirement for many compute heavy but latency constrained products. The second you move a significant portion of your application workload to the edge, you start to enter into something that looks more like a distributed system. </p><h4><strong>Modern Application Frameworks</strong></h4><p>Tightly coupled with the rise of edge infrastructure has been the evolution of frontend frameworks such as React which abstract certain aspects of client vs. server and edge vs. client. A good example of this is <a href="https://www.joshwcomeau.com/react/server-components/">React server side rendering and server components</a>. </p><h4>CRDTs &amp; Sync Engines</h4><p>CRDTs, or conflict-free replicated data types, are a class of data structure which allow concurrent changes on different devices to be merged automatically without requiring any central server. Definitionally, any application built around CRDTs is a distributed system since they mediate state syncing &amp; state conflicts across peer nodes. </p><p>CRDTs are the basis for many multiplayer SaaS applications (alongside <a href="https://en.wikipedia.org/wiki/Operational_transformation">operational transformation</a>, which seems to be falling out of favor) such as Notion &amp; Figma. Libraries like <a href="https://automerge.org/">Automerge</a> and <a href="https://github.com/yjs/yjs">Yjs</a> have made it dramatically simpler to build CRDT-based applications, and as a result you see multiplayer increasingly becoming a table stakes component of many SaaS products. </p><p>CRDTs are a subset of a broader class of technical solutions to rapidly syncing potentially divergent state across many nodes, which I would broadly describe as &#8220;sync engines&#8221;. </p><p>Linear, for example, has <a href="https://linear.app/blog/scaling-the-linear-sync-engine">shared extensive information</a> about their synchronization engine which allows their product to be offline-first. Linear does not rely on specialized CRDT-based data structures but rather, fast message passing with basic heuristics for how to handle conflicts. A range of startups, such as <a href="https://github.com/orbitinghail/sqlsync">Orbiting Hail</a> and <a href="https://electric-sql.com/">Electric SQL</a>, aim to offer something similar to others. </p><h4>Virtualization</h4><p>Lightweight, portable virtualization technologies such as <a href="https://firecracker-microvm.github.io/">Firecracker</a>, <a href="https://v8.dev/">V8</a>, and <a href="https://webassembly.org/">WebAssembly</a> have matured substantially recently, and increasingly make it possible to run the same binary everywhere - whether locally, in the browser, on the edge, or in the cloud. </p><p>Web Assembly, in particular, is enabling a whole new class of applications which distribute compute &amp; storage. Good examples of this include:</p><ol><li><p><a href="https://electric-sql.com/">Electric SQL</a>, which runs Postgres in the browser via Web Assembly and then syncs it with the server</p></li><li><p><a href="https://app.modyfi.com/">Modyfi</a>, which runs diffusion models in the browser via Web Assembly and also runs them on the server </p></li><li><p><a href="https://github.com/orbitinghail/sqlsync">SQLSync</a>, which uses Web Assembly in the client and server to run <a href="https://react.dev/learn/extracting-state-logic-into-a-reducer">reducer</a> logic for state syncing</p></li><li><p><a href="https://x.com/igrigorik/status/1684231360733646850">Shopify uses WebAssembly</a> to power its edge server-side rendering workflows</p></li></ol><h4>Streaming &amp; Stream Processing</h4><p>Advances in stream processing and incrementally materialized views make it dramatically more realistic to ship data across client, edge, and cloud. Passing an entire database or table over the network is a non-starter in most cases, but passing only diffs or incremental changes can be an effective basis for maintaining a local sync or copy of data somewhere. </p><p>Improvements in CDC (e.g. <a href="https://debezium.io/">Debezium</a>) and incrementally materialized views (e.g. <a href="https://pdos.csail.mit.edu/papers/noria:osdi18.pdf">Noria</a>, <a href="https://timelydataflow.github.io/differential-dataflow/">Differential Dataflow</a>, <a href="https://github.com/vmware-archive/database-stream-processor">DBSP</a>, <a href="https://materialize.com/">Materialize</a>, <a href="https://www.feldera.com/">Feldera</a>) are making this much more feasible. For example - <a href="https://planetscale.com/docs/concepts/query-caching-with-planetscale-boost">PlanetScale Boost</a> automatically accelerates DB queries via an embedded KV cache that is kept coherent via maintaining an incrementally materialized view. This sort of pattern would have been very difficult to build just 4-5 years ago. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GWAa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e915f2-01ac-40a6-ae1f-162a7d9dd1bb_1202x590.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GWAa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e915f2-01ac-40a6-ae1f-162a7d9dd1bb_1202x590.png 424w, https://substackcdn.com/image/fetch/$s_!GWAa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e915f2-01ac-40a6-ae1f-162a7d9dd1bb_1202x590.png 848w, https://substackcdn.com/image/fetch/$s_!GWAa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e915f2-01ac-40a6-ae1f-162a7d9dd1bb_1202x590.png 1272w, https://substackcdn.com/image/fetch/$s_!GWAa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e915f2-01ac-40a6-ae1f-162a7d9dd1bb_1202x590.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GWAa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e915f2-01ac-40a6-ae1f-162a7d9dd1bb_1202x590.png" width="1202" height="590" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9e915f2-01ac-40a6-ae1f-162a7d9dd1bb_1202x590.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:590,&quot;width&quot;:1202,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:135638,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GWAa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e915f2-01ac-40a6-ae1f-162a7d9dd1bb_1202x590.png 424w, https://substackcdn.com/image/fetch/$s_!GWAa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e915f2-01ac-40a6-ae1f-162a7d9dd1bb_1202x590.png 848w, https://substackcdn.com/image/fetch/$s_!GWAa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e915f2-01ac-40a6-ae1f-162a7d9dd1bb_1202x590.png 1272w, https://substackcdn.com/image/fetch/$s_!GWAa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e915f2-01ac-40a6-ae1f-162a7d9dd1bb_1202x590.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://twitter.com/gunnarmorling/status/1609958952040599552">https://twitter.com/gunnarmorling/status/1609958952040599552</a></figcaption></figure></div><h2>Market Drivers</h2><p>In addition to it being <em>easier</em> to build software in this way, it is also now more essential as a result of two significant market shifts. </p><p>The first is user expectations. The widespread adoption of tools like Figma, Notion, Linear, and similar which offer offline support, multiplayer collaboration, full reactivity, and essentially instant responses for all actions have set a new baseline for user experience in a lot of software. </p><p>The second is that applications have become dramatically more state and compute intensive. We are moving to a world where essentially all products are data-driven and AI-enabled, and where as a result data processing and model inference become a core component of the system. As applications naturally become more stateful and compute-constrained, it becomes increasingly essential to adopt architectures which help to mitigate the latency &amp; compute overhead incurred. </p><p>Good examples of this include:</p><ol><li><p>Applications which adopt <a href="https://jamsocket.com/blog/session-backends">session backends</a>, where you need to maintain a large amount of state in memory for constant manipulation by the user</p></li><li><p>Any company doing work with LLMs or diffusion models who want to push some inference to the edge, often for latency reasons - e.g. <a href="https://github.com/mlc-ai/web-stable-diffusion">Web Stable Diffusion</a></p></li><li><p><a href="https://idl.uw.edu/mosaic/">Mosaic</a>, a cool data visualization library that helps dynamically coordinate data processing logic across a local database in the client and a remote database in the cloud, in order to make massive scale data visualization tasks feel almost instant</p></li></ol><h2><strong>How developer tooling may need to evolve to accomodate these architecture shifts</strong></h2><p>This shift in the way that applications are being built has some interesting implications for how developer tooling may need to evolve. </p><p>First, there will likely be an explosion of tools which aim to abstract many of the paradigms I describe here - particularly the distribution and syncing of data. For example, <a href="https://liveblocks.io/">LiveBlocks aims to abstract CRDTs</a> for multiplayer collaboration, <a href="https://electric-sql.com/">ElectricSQL aims to abstract sync engines</a>, and <a href="https://jamsocket.com/">Jamsocket</a> aims to abstract session backends. In many cases, this harkons back to what <a href="https://firebase.google.com/products/realtime-database">Firebase did for mobile app sync long ago</a>. </p><p>Second, I think there will begin to be more attention paid to &#8220;smart orchestration&#8221; engines. Assuming that it is easy enough to distribute and sync data across client, edge, and cloud, the next question is how exactly to distribute the data and route queries and workloads against it? </p><p>An interesting example of this is <a href="https://blog.cloudflare.com/announcing-workers-smart-placement/">Cloudflare Smart Placement</a>, where Cloudflare will dynamically execute your compute either close to the user or close to a cloud database based on the nature of the query and how stateful it is. </p><p>Similarly, companies like <a href="https://www.cidrdb.org/cidr2024/papers/p46-atwal.pdf">Motherduck</a> which build around hybrid execution models will need to consider questions like:</p><ol><li><p>What data do you pull locally vs. keep remote? What is this a function of? </p></li><li><p>Do you <em>reactively</em> sync data locally, or do you <em>predictively</em> sync data locally? </p></li><li><p>If a query needs to access both local data and remote data, what is the most efficient way to fulfill this query? </p></li><li><p>Do consistency concerns ever influence whether I query remote data vs. local data? </p></li></ol><p>Efforts like <a href="https://arxiv.org/abs/2407.21075">Apple Intelligence</a> which adopt an analogous hybrid execution paradigm but for RAG systems will also need to consider when to route to the smaller, local model vs the smarter, bigger, remote model, in addition to having all the same data routing concerns for retrieval. </p><p>There is likely a huge amount of room for richer research in this domain - one way to think of it is database planning &amp; optimization but applied to distributed systems, not to individual databases. Work such as <a href="https://arxiv.org/pdf/2406.14733">Suki</a> and <a href="https://sky.cs.berkeley.edu/project/hydro/">Hydro</a> are interesting efforts roughly in this direction. A key question here is how much of this sort of system optimization can be generalized, vs. how much will need to be extremely application specific. </p><h2><strong>Distributed systems expertise as an underserved differentiation for application engineers</strong></h2><p>A secondary implication of all of this is that having expertise in distributed systems can be a significant potential advantage as an application engineering team. </p><p>Distributed systems engineering forms the basis of many of these more complex architectures, and often is the basis by which you can now build truly differentiated products especially in more compute intensive categories such as design tools, CAD tools, engineering tools, AI-native tools, and similar. </p><p>Yet, few application engineers actually have much expertise in this area - most strong distributed systems people work on &#8220;traditional&#8221; distributed systems problems (e.g. databases, backend infrastructure, etc). </p><blockquote><p><em><a href="https://digest.browsertech.com/archive/determinism-is-webassemblys-hidden-superpower/">Frontend engineers haven&#8217;t fully realized how relevant some old ideas from distributed systems engineering now are to their work</a></em> - Browsertech Digest</p></blockquote><p>As a result, I think there is a pretty significant talent arbitrage in the market right now for people applying distributed systems ideas to the way modern web applications are built. Companies which push in these areas can build really differentiated products as a result - like <a href="https://www.rilldata.com/\">RillData</a> in exploratory data analysis, <a href="https://womp.com/">Womp</a> in 3D editing, and similar. </p><p>This blog by <a href="https://tably.substack.com/p/seamless-and-collaborative">Tably</a> is a particularly fun example of this showing how the right application of these sorts of distributed systems ideas might allow you to built a really novel spreadsheet product. I think there is opportunity for more teams thinking this way. </p><h3>Summary</h3><p>Overall, data is becoming more &#8220;distributed&#8221; in applications. The world is moving more towards application that assume that data is split between client, edge, and server, which intelligently cache, sync, &amp; store data across these layers and intelligently route queries/workloads across them. </p><p>This trend is facilitated by a range of technology advances, <em>especially</em> virtualization layers like Web Assembly and embedded zero-dependency DB libraries like pg-lite, and is starting to become more table stakes thanks to consumer expectations around application behavior and the rise of more compute and ML-intensive applications. </p><p>As this trend matures, I think it will necessitate further evolution of developer tooling, specifically with respect to syncing, orchestration, and routing of data and compute across an increasingly complex system architecture. </p><p>If you&#8217;re building something in and around this area - I would love to chat. </p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://davistreybig.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[UX Design for Agentic Systems]]></title><description><![CDATA[Do tools like Figma solve the core design challenges of AI applications?]]></description><link>https://davistreybig.substack.com/p/ux-design-for-agentic-systems</link><guid isPermaLink="false">https://davistreybig.substack.com/p/ux-design-for-agentic-systems</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Wed, 03 Jul 2024 15:58:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gH4g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f41663-661a-4a28-844a-61d78593b68f_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gH4g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f41663-661a-4a28-844a-61d78593b68f_1024x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gH4g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f41663-661a-4a28-844a-61d78593b68f_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gH4g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f41663-661a-4a28-844a-61d78593b68f_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gH4g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f41663-661a-4a28-844a-61d78593b68f_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gH4g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f41663-661a-4a28-844a-61d78593b68f_1024x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gH4g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f41663-661a-4a28-844a-61d78593b68f_1024x1024.jpeg" width="352" height="352" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61f41663-661a-4a28-844a-61d78593b68f_1024x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:352,&quot;bytes&quot;:229186,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&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="" srcset="https://substackcdn.com/image/fetch/$s_!gH4g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f41663-661a-4a28-844a-61d78593b68f_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gH4g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f41663-661a-4a28-844a-61d78593b68f_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gH4g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f41663-661a-4a28-844a-61d78593b68f_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gH4g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f41663-661a-4a28-844a-61d78593b68f_1024x1024.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Most mainstream product design tools like Figma &amp; Sketch treat <em>user interface</em> design as the atomic unit they are built around. Mockups &amp; visual components are the basis of these tools, and are typically the mechanism by which other interaction design concepts like user intent modeling &amp; user state transitions are conveyed. </p><p>This paradigm makes a lot of sense for SaaS products where each user intent or workflow maps directly to a specific UI. If you are a CRM and you want to support a workflow where the user can build automations on a list - you build a user interface for that. If you are a stock trading app and you want to let people buy options - you build a user interface for that. In effect - interaction design is done <em>implicitly</em> by laying out user interfaces. </p><p>Traditionally, it would have actually been quite difficult to imagine a piece of software that did not follow this paradigm. How can you support a wide array of user workflows, intents, and states with a singular UI? </p><p>Yet, if you look at the emerging landscape of AI-native tools, especially those <a href="https://www.sarahtavel.com/p/a-few-sell-work-not-software-updated">&#8220;selling the work&#8221;</a> by automating what is today done by humans or services firms, this dynamic has changed. Many such products are quite UI light, but extremely high in complexity of reasoning about user state and interaction patterns. </p><p><strong>Exploring an example</strong></p><p>As an example, let&#8217;s consider <a href="https://mindy.com/">Mindy</a>, an AI &#8220;chief of staff&#8221; assistant that operates entirely over email. You can ask it anything in natural language over email and it will get back to you and try to help. </p><p>In one sense, this product has little to no user interface surface area - it is just a set of emails! From a visual and UI design perspective, a designer for such a product might sketch out different email text layouts in Figma for different use cases, but there is ultimately not a lot of work to be done there. </p><p>Yet, on the other hand, a product like Mindy has <em>immense</em> UX design challenges that are, in my opinion, actually far more difficult to deal with than a typical SaaS product. These design challenges stem from: 1. Needing to mimick the behavior of a human chief of staff that can respond to a somewhat arbitrary set of long tail questions and 2. The probabilistic nature of AI systems. </p><p>You might imagine that a UX designer for Mindy needs to think through the following sorts of things:</p><ol><li><p>What class of questions are people likely to ask Mindy? </p></li><li><p>What types of questions should Mindy attempt to respond to vs. not?</p></li><li><p>Should there be specialized, more &#8220;productized&#8221; workflows for responding to head queries (e.g. perhaps meeting scheduling and research are the two most important use cases)?</p></li><li><p>What should Mindy do in cases where it is not confident it can answer? </p></li><li><p>How should Mindy handle various forms of user followups or responses? What could these look like? </p></li></ol><p>Most of these challenges tend to revolve around user state modeling - what states can user be in, how do we classify each of these states, how should the product operate in each of these states, what state transitions should we model out, and what is the user experience we want to deliver in each state? These are the core design principles that would then guide an engineering and product team on how to architect the LLM system. </p><p>As an example - if the most important head query to focus on for a product like Mindy is scheduling, it is likely that you then need to design the system to first <em>classify</em> the incoming email, then move into a series of very specific steps to execute a scheduling request via LLMs such as: 1. Collecting key scheduling metadata such as attendees, date, time, location, 2. Confirm scheduling request with user, 3. Sending the event invite to participants, 4. Monitoring/polling for event rejections or rescheduling requests by attendees, etc. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2lIp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0f5e57-2c40-40a7-a3b6-359b57a28d45_2274x1184.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2lIp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0f5e57-2c40-40a7-a3b6-359b57a28d45_2274x1184.png 424w, https://substackcdn.com/image/fetch/$s_!2lIp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0f5e57-2c40-40a7-a3b6-359b57a28d45_2274x1184.png 848w, https://substackcdn.com/image/fetch/$s_!2lIp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0f5e57-2c40-40a7-a3b6-359b57a28d45_2274x1184.png 1272w, https://substackcdn.com/image/fetch/$s_!2lIp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0f5e57-2c40-40a7-a3b6-359b57a28d45_2274x1184.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2lIp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0f5e57-2c40-40a7-a3b6-359b57a28d45_2274x1184.png" width="1456" height="758" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f0f5e57-2c40-40a7-a3b6-359b57a28d45_2274x1184.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:758,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:136384,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2lIp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0f5e57-2c40-40a7-a3b6-359b57a28d45_2274x1184.png 424w, https://substackcdn.com/image/fetch/$s_!2lIp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0f5e57-2c40-40a7-a3b6-359b57a28d45_2274x1184.png 848w, https://substackcdn.com/image/fetch/$s_!2lIp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0f5e57-2c40-40a7-a3b6-359b57a28d45_2274x1184.png 1272w, https://substackcdn.com/image/fetch/$s_!2lIp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f0f5e57-2c40-40a7-a3b6-359b57a28d45_2274x1184.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Partial state modeling for a scheduling request for a product like Mindy</figcaption></figure></div><p>A good UX designer would probably go 100x deeper on this flow than I did above, modeling out all these user states and how to handle them. While each of these sub-states and state transitions likely involve an LLM or small agentic system in some capacity (email classification, email understanding, email sending, etc), the overall state flow needs to be more precisely defined to create a good UX in the vast majority of cases. </p><p>And while there is certainly <em>some</em> visual design that needs to accompany this sort of state modeling (e.g. email templates for sub-steps), I would argue that 90% of the design work at hand is more so this form of user needs modeling and designing workflows that fit user expectations. </p><p>I would argue that this dynamic fundamentally breaks a lot of the design assumptions that products like Figma are built around. While you can, of course, do this sort of higher abstraction workflow mapping in a tool like Figma - indeed, I made the above image in Figma - there are probably a different set of primitives you might build out to really optimize this sort of design task. <a href="https://stately.ai/">Stately</a> is an interesting example of what a more state-oriented design approach might look like for this. </p><h3>The shifting role of UX designers in agentic companies</h3><p>Complex logic flows and state diagrams decoupled from visual design are not necessarily a completely new thing - <a href="https://blog.bytebytego.com/p/flowchart-of-how-slack-decides-to">Slack&#8217;s push notification decision making logic</a> is a fun, older, non-AI related example of something similar. But I think the difference is that in many agentic products, this now becomes the <em>core</em> UX design challenge of building the product all together. </p><p>If you are <a href="https://www.cognition.ai/">Cognition</a> - how do you model out all the steps and sub-steps that the system might take to build a large software engineering project on its own that is sufficiently understandable to the user and fits a user&#8217;s mental model? If you are <a href="https://dosu.dev/">Dosu</a>, how do you navigate the right way to respond to the wide array of ways someone might ask you questions or respond to you in a Github issue? </p><p>In my experience - people building agentic systems like this actually see the biggest improvement in reliability, quality, and performance by doing this form of domain &amp; user modeling and thinking through more structured state transitions. <a href="https://www.youtube.com/watch?v=RBRMlnRO9LI&amp;ab_channel=BuildingWithAI">Hex</a>, for example, saw some of its biggest improvements in Hex Magic when they started to much more tightly constrain the agentic control flow - enforcing things like the # of cells that could be output &amp; the relative order of SQL vs. Python vs. data visualization cells. In essence - they more tightly modeled the state flow of the system. </p><p>Ironically, while getting the UX and interaction design correct in these systems&nbsp;is one of the hardest things to do well (and one of the most important things to get right), hiring UX designers&nbsp;in these companies is almost impossible, because the UX job to be done is so different from most SaaS apps.&nbsp;Less work needs to be done on UI, but way more work needs to be done on building mental models of user behaviors and state modeling of users. And that work can no longer implicitly be done by just mocking out visual workflows. </p><p>The job of a designer in a product like this is also more technical. There is a much tighter coupling between technical system design and interaction design. Proper UX design of agentic systems really requires a somewhat in-depth understanding of AI system design - which is why, today, most of this work is done today by CEOs or engineering leads. </p><p>In a way, it feels like interaction design for products like this is fundamentally different in some ways than what it has looked like before. I wonder if this may lead to very different design workflows, design tools, and team dynamics between UX designers and engineering &amp; product in agentic companies. </p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Davis Treybig! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Non-destructive editing in design tools]]></title><description><![CDATA[How computational advances will increasingly make non-destructivity the default]]></description><link>https://davistreybig.substack.com/p/non-destructive-editing-in-design</link><guid isPermaLink="false">https://davistreybig.substack.com/p/non-destructive-editing-in-design</guid><dc:creator><![CDATA[Davis Treybig]]></dc:creator><pubDate>Tue, 25 Jun 2024 16:37:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7jrO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8691dda-5f07-47c0-baeb-638190ff75fb_920x1152.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7jrO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8691dda-5f07-47c0-baeb-638190ff75fb_920x1152.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7jrO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8691dda-5f07-47c0-baeb-638190ff75fb_920x1152.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7jrO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8691dda-5f07-47c0-baeb-638190ff75fb_920x1152.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7jrO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8691dda-5f07-47c0-baeb-638190ff75fb_920x1152.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7jrO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8691dda-5f07-47c0-baeb-638190ff75fb_920x1152.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7jrO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8691dda-5f07-47c0-baeb-638190ff75fb_920x1152.jpeg" width="268" height="335.5826086956522" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8691dda-5f07-47c0-baeb-638190ff75fb_920x1152.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1152,&quot;width&quot;:920,&quot;resizeWidth&quot;:268,&quot;bytes&quot;:90349,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&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="" srcset="https://substackcdn.com/image/fetch/$s_!7jrO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8691dda-5f07-47c0-baeb-638190ff75fb_920x1152.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7jrO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8691dda-5f07-47c0-baeb-638190ff75fb_920x1152.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7jrO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8691dda-5f07-47c0-baeb-638190ff75fb_920x1152.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7jrO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8691dda-5f07-47c0-baeb-638190ff75fb_920x1152.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One of the defining traits in design tools (e.g. architecture, electrical engineering, graphics design, etc) is whether the design paradigm is <em>destructive</em> or <em>non-destructive</em>. </p><p>In simple terms - a destructive paradigm means that only the <em>result</em> of an edit or modification is stored, whereas a non-destructive paradigm keeps track of the <em>sequence of edits</em> and dynamically computes the result from this sequence at render/compute/compile time. </p><p>To illustrate this, consider that you want to add pixel blur to a 2D image. A destructive approach would directly apply the blur to the baseline image - meaning the original image is no longer stored anywhere. A non-destructive approach would add a pixel blur &#8220;layer&#8221; on top of the baseline image, rendering the blurred image but also preserving the original image in it&#8217;s raw state in the base layer. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T5Jq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a65fa5c-5d7f-466b-9de7-bffdddcadb8c_2052x1156.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T5Jq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a65fa5c-5d7f-466b-9de7-bffdddcadb8c_2052x1156.png 424w, https://substackcdn.com/image/fetch/$s_!T5Jq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a65fa5c-5d7f-466b-9de7-bffdddcadb8c_2052x1156.png 848w, https://substackcdn.com/image/fetch/$s_!T5Jq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a65fa5c-5d7f-466b-9de7-bffdddcadb8c_2052x1156.png 1272w, https://substackcdn.com/image/fetch/$s_!T5Jq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a65fa5c-5d7f-466b-9de7-bffdddcadb8c_2052x1156.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T5Jq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a65fa5c-5d7f-466b-9de7-bffdddcadb8c_2052x1156.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a65fa5c-5d7f-466b-9de7-bffdddcadb8c_2052x1156.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:123650,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T5Jq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a65fa5c-5d7f-466b-9de7-bffdddcadb8c_2052x1156.png 424w, https://substackcdn.com/image/fetch/$s_!T5Jq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a65fa5c-5d7f-466b-9de7-bffdddcadb8c_2052x1156.png 848w, https://substackcdn.com/image/fetch/$s_!T5Jq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a65fa5c-5d7f-466b-9de7-bffdddcadb8c_2052x1156.png 1272w, https://substackcdn.com/image/fetch/$s_!T5Jq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a65fa5c-5d7f-466b-9de7-bffdddcadb8c_2052x1156.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can think about these architectural patterns as essentially a tradeoff between editability, understandability, and composability versus compute efficiency &amp; system complexity. </p><p>Destructive design tools have greatly reduced computational requirements to run because they do not recompute the entire modification graph over and over as you add in more changes/edits. However, they are much more difficult to work with because you can not go back and remove or modify individual changes. </p><p>In the above example - the non-destructive editor would allow you to go back later and change the configuration of the pixel blur or even change the base image, and everything else would still work. These sorts of retroactive modifications would not be possible in the destructive editor. </p><p>More broadly, non-destructive editing paradigms allow for much more &#8220;composability&#8221; in system design via functional editing paradigms - you can save a sequence of mutations/modifiers as a &#8220;function&#8221;, combine that with other mutations to create higher order&#8220;functions, and repeat ad-nauseum. </p><p>Non-destructive editors are also generally easier to reason about - the user can see what the final result was built up from. But, because they are storing this very complex compute graph which must be re-run every time a change is made or you need to show the result, they are much more computationally intensive to run. Similarly, it is much more complicated to build a non-destructive editing tool. </p><p>While virtually <em>all</em> tools in the software engineering &amp; product design world are non-destructive - programming languages and software are a great example of a purely non-destructive paradigm, Figma is built entirely around layers and never does direct pixel manipulation - what is interesting is that a lot of the design tooling world is still destructive. </p><p>Photoshop is a good example of this - most filters &amp; effects in Photoshop are destructive by default. While it is possible to use Photoshop in a way that makes such changes non-destructive via features like <a href="https://lovethatshot.com/non-destructive-editing-defined/">Smart Objects</a>, it is not the &#8220;default&#8221; paradigm and it is something the user must think about and learn when using the tool. </p><p>Similarly, the majority of 3D design tools that revolve around meshes/triangles are destructive or only allow very specific subsets of their functionality to be modeled non-destructively (e.g. Blender). A notable exception to this is many of the newer parametric design tools in CAD such as <a href="https://simplyrhino.co.uk/3d-modelling-software/grasshopper">Grasshopper</a> and Fusion360. In such tools, everything is defined in terms of dimensions and constraints - e.g. this angle is 30 degrees, these lines are parallel - and you can go back at any point to alter those previous dimensions, which then recalculates the entire 3D object. </p><h3><strong>The impact of computational advances on destructive editing</strong></h3><p>Given that <em>computation</em> is the primary bottleneck for non-destructive design paradigms, it is interesting to consider how recent advances in computing are allowing for a plethora of new, natively non-destructive design tool startups to be built. For example:</p><p><a href="https://www.modyfi.com/">Modyfi</a> makes use of GPU acceleration via WebGPU to offer a fully non-destructive image &amp; motion graphics editing tool. All visual &amp; motion effects in Modyfi are layers, yet everything is still instantaneously previewed &amp; rendered. </p><p><a href="https://www.modumate.com/">Modumate</a> is a browser-native architecture tool built on top of recent 3D game engine improvements, which models buildings not just as surfaces, but as collections of 3D parts (e.g. doors, knobs, handles, walls, studs) which compose into the 3D model of the house. </p><p><a href="https://womp.com/index">Womp</a> utilizes edge computing, pixel streaming, &amp; ML-assisted rendering techniques to offer a non-destructive 3D editing tool. You create 3D shapes in Womp not by crafting the boundary conditions of your desired shape, but by combining different baseline shapes which then intersect, add, or subtract into your desired shape. </p><p><a href="https://www.ntop.com/">NTop</a> is a 3D design tool for physical parts/components based on <em>implicit</em> <em>modeling</em> rather than boundary representations like meshes. 3D parts are created via complex combinations of fields and shapes, rather than simply defined by a triangle or mesh topology. This allows for much more sophisticated analysis, simulation, and optimization of 3D parts to be done, and also makes it much more feasible to build highly complex geometries. </p><p>Both Womp and NTop are built around <a href="https://www.merl.com/publications/docs/TR2006-054.pdf">signed-distance-fields</a> (SDFs), a mathematical formulation for representing geometries which has been understood for a long time, but was not widely adopted until recently due to its computational requirements. You can read more about the underlying mathematics of creating 3D shapes in this way <a href="https://jasmcole.com/2019/10/03/signed-distance-fields/">here</a>. </p><p>A critical insight underlying all of these startups is - once it is technically feasible to overcome the computational limitations of non-destructivity in a given design tool category, you often then have the substrate to build a 10-100x better design tool. This improvement comes not just from the benefits that have already been discussed, but also a wide array of second order effects that stem from modeling a system non-destructively, such as:</p><h5><strong>Community</strong></h5><p>Modeling systems as a series of mutations allow things to be encapsulated as re-usable functions and components. This can become the basis of a <em>community</em> where people can share components they have built that others can then use, edit, fork, etc. This is &#8220;obvious&#8221; in the software field, where anyone can create libraries that can be installed via package managers, yet is non-existent in so many other design domains. </p><p>Modumate is a great example of this - they offer a marketplace of community and company-sourced pre-built architectural components. This is not really possible in traditional BIM engines which only model the final surface geometry. </p><h5><strong>Simulation</strong></h5><p>Systems modeled non-destructively are much more amenable to simulation. It is easier to &#8220;sweep through&#8221; a range of different configuration options for each layer or node in your compute graph, testing or evaluating the final output. </p><p><a href="https://www.youtube.com/watch?v=IC5GGGYaTbA&amp;ab_channel=ParametricCAD">Grasshopper</a>&#8217;s procedural generation workflows are good classic examples of this. </p><h5><strong>Optimization</strong></h5><p>Systems modeled non-destructively can be optimized at a &#8220;meta&#8221; level by the compute engine, which can look at all the changes that should be applied together holistically and &#8220;compile&#8221; them down to something more efficient. </p><p>A simple, somewhat contrived example of this in the graphics domain might be as follows - if you apply a series of 10 visual modifiers to an image and then the 11th layer is a new image with 100% opacity, then you can ignore all underlying layers at render time. <a href="https://www.modyfi.com/">Modyfi</a> is able to do real time motion graphics in the browser via optimizations of this sort. </p><h5><strong>Higher order system design</strong></h5><p>Non-destructive modeling typically allows for much more complex objects or systems to be built because of its composability benefits. This makes it easier to encapsulate logic, divide it amongst different people on a team, test sub-systems, and similar.</p><p>This is a key reason why many of the functional 3D modeling domains such as computer-aided-design for industrial design, electronics, and mechanical engineering have moved so aggressively to parametric, non-destructive workflows - these are exceptionally rich, complex systems which benefit particularly from a non-destructive paradigm. In contrast, 3D models for rendering (e.g. animations, videos, etc) are in theory less rich and complex. </p><h3><strong>The Startup Opportunity Around Non-Destructive Editing</strong></h3><p>I observe that rapid advances in many areas of computing, including graphics, machine learning, edge databases, pixel streaming, distributed systems, hardware acceleration, and embedded processing in the browser (e.g. Web Assembly) are fundamentally changing what is computationally feasible in many design tools today. </p><p>I suspect that in many cases, this confluence of technology advances suddenly allows a purely non-destructive paradigm to be applied in various design tool categories. As a result, I think we will see many more startups emerge along the lines of Modyfi, Womp, and NTopology which build around non-destructivity as a core wedge to rethink their category. </p><p>I think one of the most compelling variations of this is going after categories where non-destructivity is <em>possible</em>, but requires a specialized workflow - photoshop and blender both being good examples. Such products tend to get bloated with a lot of UX complexity, as non-destructivity gets added in bits and pieces on top a fundamentally destructive baseline, requiring significant user education and the user to maintain a mental model of how they have modeled each piece of their system. When you can instead make non-destructivity the ubiquitous default, you actually <em>simplify</em> the product while simultaneously enhancing what can be done with it. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://davistreybig.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"></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>