<?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:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[The Pragmatic Engineer]]></title><description><![CDATA[Observations across the software engineering industry.]]></description><link>https://blog.pragmaticengineer.com/</link><image><url>https://blog.pragmaticengineer.com/favicon.png</url><title>The Pragmatic Engineer</title><link>https://blog.pragmaticengineer.com/</link></image><generator>Ghost 6.70</generator><lastBuildDate>Fri, 09 Oct 2026 17:30:11 GMT</lastBuildDate><atom:link href="https://blog.pragmaticengineer.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[The Pulse: Firebase’s global outage & poor response]]></title><description><![CDATA[The Firebase iOS SDK crashed after a backend change, crashing all apps which used Firebase analytics for 2-6 hours. Google didn’t update the status page, but did offer a postmortem 4 days later.]]></description><link>https://blog.pragmaticengineer.com/the-pulse-firebases-global-outage-poor-response/</link><guid isPermaLink="false">6ac768715c3b8b00012d84b0</guid><dc:creator><![CDATA[Ivan Klaric]]></dc:creator><pubDate>Thu, 08 Oct 2026 16:56:37 GMT</pubDate><content:encoded><![CDATA[<p><em>Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of four topics from </em><a href="https://pragmaticengineer.substack.com/p/the-pulse-firebases-global-outage" rel="noopener noreferrer nofollow"><em>last week&#x2019;s issue of The Pulse</em></a><em>. Full subscribers received the article below seven days ago. If you&#x2019;ve been forwarded this email, you can </em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>subscribe here</em></a><em>.</em></p><p>Firebase &#x2013; built by Google &#x2013; has had a nasty outage this week with shockingly poor incident management at odds with how Google itself usually deals with high-severity incidents.</p><p><strong>The outage started on Tuesday (29 Sep) at 5:41pm (PDT),</strong> when iOS apps using the Firebase SDK started to crash upon first opening; every iOS app that uses the Firebase SDK with analytics enabled was affected in this way. Developers of affected apps<a href="https://github.com/firebase/firebase-ios-sdk/issues/16728?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"> opened a GitHub ticket</a>, in the absence of much else to do. On the ticket, the message &#x201c;it&#x2019;s crashing for me too!&#x201d; was oft-repeated.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!K-zH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6965e55a-4693-4fe9-8372-2a153ef9103b_1456x1146.png" class="kg-image" alt loading="lazy" width="1456" height="1146"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Devs reporting their apps crashing. Source:</em></i><a href="https://github.com/firebase/firebase-ios-sdk/issues/16728?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> GitHub</em></i></a></figcaption></figure><p><strong>6:51pm (PDT): acknowledgement.</strong> An hour and ten minutes after the crashes started, an engineer on the Firebase team acknowledged that they were aware of the outage.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!xpM2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1da747d-4f11-444b-bfd6-f9ffa8ee9de9_1456x1239.png" class="kg-image" alt loading="lazy" width="1456" height="1239"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Just over an hour into the incident, the Firebase team became aware of the outage. Source:</em></i><a href="https://github.com/firebase/firebase-ios-sdk/issues/16728?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> GitHub</em></i></a></figcaption></figure><p>It&#x2019;s unclear if the Firebase team was alerted via this ticket with 100+ comments by devs, or if Google&#x2019;s own monitoring tool showed the issue. <em>I asked Google/Firebase two days ago and haven&#x2019;t had a response.</em></p><p>Not having anything better to do than wait for Google to resolve the issue, the memes began:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!l2IV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb17763-d4e3-494e-82a5-b96f098932b3_1456x1240.jpeg" class="kg-image" alt loading="lazy" width="1456" height="1240"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Memes while waiting</em></i></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!swDr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34aa9a5d-481d-4926-bc64-9ff2c8b0b2f5_1456x1039.jpeg" class="kg-image" alt loading="lazy" width="1456" height="1039"><figcaption><i><em class="italic" style="white-space: pre-wrap;">More memes</em></i></figcaption></figure><p>Others attempted to help the Firebase team by pinpointing the potential issue. Indeed, before a Google engineer acknowledged the incident, an external developer found the root cause at 6:37pm PDT; it was a zero-length entry that was crashing the SDK:</p><figure class="kg-card kg-image-card"><img src="https://substackcdn.com/image/fetch/&#x24;s_!Gs8P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb15cd48d-360c-4756-8b16-711f455c951a_1456x586.jpeg" class="kg-image" alt loading="lazy" width="1456" height="586"></figure><p>Given the flags are shipped by the backend, the offending change was a backend one, and the easiest resolution would be to roll it back, which the community practically begged Google to do:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!sYTS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3294b941-2ecf-48d0-9da8-b6ba5722fb6c_1456x393.jpeg" class="kg-image" alt loading="lazy" width="1456" height="393"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Frustrating: Understanding the problem and how to solve it, but nothing to do but post. Source:</em></i><a href="https://github.com/firebase/firebase-ios-sdk/issues/16728?ref=blog.pragmaticengineer.com#issuecomment-5882456160" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> GitHub</em></i></a></figcaption></figure><p>Here&#x2019;s a neat summary of the incident from another dev:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!SzSo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff23d2805-50d3-4f08-b728-f19c1b7cb249_1456x682.jpeg" class="kg-image" alt loading="lazy" width="1456" height="682"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Summarizing the incident better than any Google dev ever did. Source:</em></i><a href="https://github.com/firebase/firebase-ios-sdk/issues/16728?ref=blog.pragmaticengineer.com#issuecomment-5882466325" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> GitHub</em></i></a></figcaption></figure><p><strong>7:24pm (PDT): rollback starting. </strong>An hour-and-a-half into the incident, the Firebase team started rolling back the offending backend change:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!P06y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3b09c0a-ec09-48c1-a8ac-feb45cdb671b_1456x281.jpeg" class="kg-image" alt loading="lazy" width="1456" height="281"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Finally &#x2013; the rollback started! Source:</em></i><a href="https://github.com/firebase/firebase-ios-sdk/issues/16728?ref=blog.pragmaticengineer.com#issuecomment-5882457735" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> GitHub</em></i></a></figcaption></figure><p><strong>8:16pm (PDT): rollback complete. </strong>And the rollback completed ~50 minutes later:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!jZ4H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6feb7e70-c6d4-44f0-b4b7-1f304ce23975_1456x276.jpeg" class="kg-image" alt loading="lazy" width="1456" height="276"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Rollback complete, minus the caching problem. Source:</em></i><a href="https://github.com/firebase/firebase-ios-sdk/issues/16728?ref=blog.pragmaticengineer.com#issuecomment-5882951620" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> GitHub</em></i></a></figcaption></figure><p>Software engineer, Nick Cooke, on the Firebase team posted a summary with more accurate timestamps:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!cIXe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F430fd139-2631-4f24-bde8-eae294b75056_1456x875.jpeg" class="kg-image" alt loading="lazy" width="1456" height="875"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Source:</em></i><a href="https://github.com/firebase/firebase-ios-sdk/issues/16728?ref=blog.pragmaticengineer.com#issuecomment-5884287771" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> GitHub</em></i></a></figcaption></figure><p>What we can deduce from this:</p><ul><li><strong>TTD (time to detect): one hour? </strong>The Firebase team never shared how long it took them to detect that practically all iOS apps using Firebase had started to crash. On the GitHub ticket, they acknowledged the incident 70 minutes after it started. <em>Update: in the postmortem, later published by the team, they wrote how the team was alerted 20 minutes after the rollout, via crash alerts and GitHub issues. Good question why it took another 50 minutes to acknowledge the issue, though?.</em></li><li><strong>TTM (time to mitigate): 2-6 hours. </strong>It took two hours and eleven minutes to roll out the fix, but due to caching (apps that had cached the incorrect server response served this cache for additional four hours, and so kept crashing for up to six hours.)</li></ul><h3 id="incident-management-basics"><strong>Incident management basics</strong></h3><p>The Firebase team itself closed the outage with a short report effectively saying that there had been an outage, but they&#x2019;d resolved it now, so thanks for your patience and have a nice day.</p><p>This handling of a high-impact incident is absolutely <em>not</em> typical of Google, the company that coined the term &#x2018;Site Reliability Engineer&#x2019; and wrote the SRE book.</p><p><strong>For one, Firebase never bothered updating its status page. </strong>Oddly enough, the<a href="https://status.firebase.google.com/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"> official Firebase status page</a> showed all systems green &#x2013; despite the acknowledgement of the outage. Indeed, during it and afterward, they didn&#x2019;t update the status page to indicate the lengthy outage:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!ReF6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454d4b2e-8c0e-4de2-b492-67ae969bb1c8_1456x1276.jpeg" class="kg-image" alt loading="lazy" width="1456" height="1276"><figcaption><i><em class="italic" style="white-space: pre-wrap;">A global outage was never recorded on the status page. Source:</em></i><a href="https://status.firebase.google.com/?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> Firebase</em></i></a></figcaption></figure><p>But status pages exist for good reasons, including:</p><ol><li>To communicate with customers during and after an outage</li><li>Offer transparency on the stability of the service</li></ol><p>It&#x2019;s worth asking: if an outage that takes down most (or all?) iOS apps using Firebase doesn&#x2019;t warrant an update to the status page, then what does!<br></p><p><strong>Google published a postmortem four days later, answering questions on how the outage happened. </strong>On Friday, 2 October, Google published a<a href="https://firebase.blog/posts/2026/10/firebase-analytics-outage/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"> postmortem on the Firebase blog</a>. It was a configuration change that crashed so many iOS apps. From the postmortem:</p><blockquote>&#x201c;On September 28, 2026, a routine configuration cleanup unexpectedly caused a large number of iOS applications using the Google Analytics for Firebase (GA4F) SDK to crash.<br><br>2026&#x2011;09&#x2011;28 17:38 (PST): A stale, legacy configuration flag was cleaned up.<br>2026&#x2011;09&#x2011;28 17:41 (PST): The malformed configuration payload begins rolling out globally to production servers. Outage begins: Clients fetching the new payload start crashing on launch.<br><br>The SDK missed validating that a flag&#x2019;s name was not nil, ultimately causing the crash. Backend data anomalies should not cause app-side crashes.&#x201d;</blockquote><p>In the postmortem, Google noted that engineers were alerted to the outage through both GitHub reports coming from external developers, as well as their internal monitoring. It took another hour to pinpoint the cause being a legacy configuration flag cleanup.</p><p><strong>Firebase says they have no way to update their status page for client-side outages. </strong>In the postmortem, Google explained that there is no place to indicate client-side outages on their dashboard (emphasis mine):</p><blockquote>&#x201c;Throughout the outage, both the Firebase and Google Ads status dashboards remained green. <strong>Because these dashboards rely primarily on server-side health metrics, they did not register client-side SDK crashes.</strong><br><br>Commitment: Moving forward, we are actively working to: integrate SDK-related outage information into our status dashboards, streamline the manual update process, and improve GA4F status representation within the Firebase dashboard.&#x201d;</blockquote><p>It&#x2019;s good to see Google not dropping the ball fully, and recognizing that both their dashboards and their incident management process need improvement.</p><p><strong>It&#x2019;s fair to ask though: why did only iOS crash, and not Android?</strong> Firebase&#x2019;s Android SDK seems to be hardened more than iOS, as the feature flag removal did not crash Android devices.</p><p>Especially that now, with AI, it&#x2019;s easier than ever to compare iOS and Android implementations to ensure they are identical &#x2013; and it&#x2019;s what Shopify has been doing <a href="https://newsletter.pragmaticengineer.com/p/shopify-native-mobile?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">during their native rewrite</a> &#x2013; could it have been a missed opportunity for Google to audit the differences between the iOS and Android SDKs? To me, not having an action item here feels like a missed opportunity.</p><p>Still, this is a good reminder to anyone and everyone shipping iOS and Android apps: aim to harden them, and when possible, run tests with malformed payloads, then fix crashes those payloads cause.</p><h3 id="d%C3%A9j%C3%A0-vu-the-2020-facebook-sdk-crash"><strong>D&#xe9;j&#xe0; vu: the 2020 Facebook SDK crash</strong></h3><p>The last time there was a similar crash was in 2020, with Facebook.<strong> </strong>That May, apps such as Spotify, TikTok, Pinterest, and others also<a href="https://github.com/facebook/facebook-ios-sdk/issues/1374?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"> started to suddenly crash</a> due to the Facebook SDK crashing all apps using it. Back then too, devs followed along<a href="https://github.com/facebook/facebook-ios-sdk/issues/1374?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"> on a GitHub ticket</a> and they also found that bug: a value that should have been a dictionary but was a boolean:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!iKj2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b7fcfd-dbf7-4b90-af35-e55ffd35692a_1456x366.jpeg" class="kg-image" alt loading="lazy" width="1456" height="366"><figcaption><i><em class="italic" style="white-space: pre-wrap;">What caused the 2020 Facebook crash. Source:</em></i><a href="https://github.com/facebook/facebook-ios-sdk/issues/1373?ref=blog.pragmaticengineer.com#issuecomment-624934457" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> GitHub</em></i></a></figcaption></figure><p>Then as now, there was banter by devs being made to wait for a fix:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!HuVB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4f58d3-1ddf-4adc-8374-f5a82ab56610_1456x355.jpeg" class="kg-image" alt loading="lazy" width="1456" height="355"><figcaption><i><em class="italic" style="white-space: pre-wrap;">One of the memes from the 2020 crash. Source:</em></i><a href="https://github.com/facebook/facebook-ios-sdk/issues/1374?ref=blog.pragmaticengineer.com#issuecomment-624949456" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> GitHub</em></i></a></figcaption></figure><p>And requests to not move fast and break things any more:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!i---!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b055e2c-4814-4d89-9da4-bbc979697528_1456x243.jpeg" class="kg-image" alt loading="lazy" width="1456" height="243"><figcaption><i><em class="italic" style="white-space: pre-wrap;">A plea for prioritizing reliability in the future. Source:</em></i><a href="https://github.com/facebook/facebook-ios-sdk/issues/1374?ref=blog.pragmaticengineer.com#issuecomment-624939133" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> GitHub</em></i></a></figcaption></figure><p>Making light of the situation:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!w8Eg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faed6f350-9290-43bb-b677-aff2053bc221_1456x275.jpeg" class="kg-image" alt loading="lazy" width="1456" height="275"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Apps that did not initialize the SDK unconditionally upon startup should not have crashed &#x2013; but most did Source:</em></i><a href="https://github.com/facebook/facebook-ios-sdk/issues/1374?ref=blog.pragmaticengineer.com#issuecomment-624951620" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> GitHub</em></i></a></figcaption></figure><p>And also anticipating the resolution:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!ZsNC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc078cff0-0100-4f8a-bb32-7f2ede31e723_1456x1185.jpeg" class="kg-image" alt loading="lazy" width="1456" height="1185"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Some more memes on</em></i><a href="https://github.com/facebook/facebook-ios-sdk/issues/1374?ref=blog.pragmaticengineer.com#issuecomment-624949456" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> the GitHub issue</em></i></a></figcaption></figure><p>In the end, Facebook reverted the backend change, but shared even less than the bare minimum details from Google this time. This is all we know about that 2020 outage that was arguably more wide-ranging than the Firebase one:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!5gor!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27db8df-2b77-4afd-9455-13972465ad4f_1456x359.jpeg" class="kg-image" alt loading="lazy" width="1456" height="359"><figcaption><i><em class="italic" style="white-space: pre-wrap;">All that Facebook shared about</em></i><a href="https://github.com/facebook/facebook-ios-sdk/issues/1374?ref=blog.pragmaticengineer.com#issuecomment-625354650" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;"> their global outage</em></i></a></figcaption></figure><p><strong>I wonder if some people think that public-facing incident management is no longer important or valuable, even for developer-facing products. </strong>I&#x2019;m not shocked that Facebook/Meta never bothered to communicate much about their outage because dev tools are not part of the DNA there.</p><p>But with Firebase, I am surprised that more than a week later, the postmortem is still not visible <a href="https://status.firebase.google.com/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">on the Firebase status page</a>.</p><p><strong>And maybe this is Google &#x201c;shipping their org chart&#x201d; playing out, live. </strong>The outage <em>technically</em> was caused by Google Analytics (who made the feature flag change), but is the responsibility of the Firebase SDK (whose iOS SDK was not hardened enough to deal with this new payload). The outage itself was buried inside a <a href="https://ads.google.com/status/publisher/incidents/zgBxaA9uCvCforctpRHW?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Google Ads dashboard</a> (!!) which suggests that whatever team is seen responsible for the outage is inside the Google Ads organization.</p><p>In the end, despite the Firebase team <a href="https://firebase.blog/posts/2026/10/firebase-analytics-outage/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">committing to</a> &#x201c;improving status dashboard latency and coverage,&#x201d; last week, those teams are in no hurry to carry out this work. AI agents might be making lots of work more efficient, but following up on action items seems to move at the same snail pace at Google, as it did pre-AI!</p><hr><p>Read the full issue of <a href="https://pragmaticengineer.substack.com/p/the-pulse-firebases-global-outage" rel="noopener noreferrer nofollow"><strong>The Pulse this is from</strong></a><strong>,</strong> or check out <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-new-trend-of-building-internal?ref=blog.pragmaticengineer.com" rel="noreferrer"><strong>this week&#x2019;s The Pulse</strong></a>. This week&#x2019;s issue covers:</p><ol><li><strong>New trend: building internal vibe-coding platforms at mid-sized companies. </strong>Ramp and Stripe built platforms for non-engineers to build internal websites and tools with, and both are taking off in those workplaces. I expect more companies to do the same.</li><li><strong>Do us engineers <em>really</em> enjoy hard problems?</strong> Or do we actually like pattern-matching with backend problems? A provocative post by Cloudflare engineer, Sunil Pai, suggests there are other motives.</li><li><strong>New open models launch in the EU and US</strong>. Kolibri, Mistral Large 4, and Beam by Reflection could challenge China&#x2019;s dominance in open weight models.</li><li><strong>Industry Pulse. </strong>Why Figma doesn&#x2019;t let any agent use its MCP server; Google Cloud adds Swift support on the server side, Anthropic&#x2019;s two-week sprint to speed up Claude Code, Coinbase dumps React Native shortly after Shopify announces doing so, Claude Opus 5.5 formats the C: drive, and more.</li></ol>]]></content:encoded></item><item><title><![CDATA[The Pulse: RoR creator sparks new “death of coding by hand” debate]]></title><description><![CDATA[In his Rails World keynote, David Heinemeier Hansson (DHH) declared the end for writing code by hand for professional work – at 37signals at least. Is this change now unstoppable?]]></description><link>https://blog.pragmaticengineer.com/the-pulse-ror-creator-sparks-new-death-of-coding-by-hand-debate/</link><guid isPermaLink="false">6abe3b03734bf80001b842c0</guid><dc:creator><![CDATA[Ivan Klaric]]></dc:creator><pubDate>Thu, 01 Oct 2026 16:44:13 GMT</pubDate><content:encoded><![CDATA[<p>Before we start: if you happen to be in San Francisco on Thursday, 5 November, join me on the <a href="https://luma.com/systemupdate?coupon=TPESUB26&amp;ref=blog.pragmaticengineer.com"><u>System Update with The Pragmatic Engineer</u></a> event. This is an evening with OpenAI, Linear and DoorDash and myself, organized by Sentry. We get into what AI-augmented automations they&#x2019;re running in prod, and how it&#x2019;s going, in an off-the record (that is: not recorded!) and raw conversation. Seats are limited, and you can <a href="https://luma.com/systemupdate?coupon=TPESUB26&amp;ref=blog.pragmaticengineer.com"><u>RSVP here</u></a>.</p><hr><p><em>Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of four topics from </em><a href="https://pragmaticengineer.substack.com/p/the-pulse-end-of-coding-by-hand" rel="noopener noreferrer nofollow"><em>the last week&#x2019;s issue of The Pulse</em></a><em>. Full subscribers received the article below seven days ago. If you&#x2019;ve been forwarded this email, you can </em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>subscribe here</em></a><em>.</em></p><p><br>The creator of Ruby on Rails, David Heinemeier Hansson, caused quite a stir last week with comments in <a href="https://www.youtube.com/watch?v=vDjW_dRyKXY&amp;ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">his Rails World keynote</a>, when he revealed that coding by hand is dead at his company, 37signals.</p><p>This is a big deal because 37signals created Ruby on Rails, and they are known for their software craft there, especially when it comes to code quality. It&#x2019;s also a business that&#x2019;s 27 years old and is profitable. Despite that pedigree, DHH caused a stir among the dev community, saying:</p><blockquote>&#x201c;<strong>At 37signals, a couple of weeks ago, we made the decision that it clearly means we&#x2019;re done writing code by hand.</strong> We have gone pencils down on the idea that we were gonna write code by hand, as a normal course of business creating things.<br><br>Writing code by hand at 37signals is now an exceptional state. It is like seeing a bug in Sentry: something here went wrong; why was the agent not able to produce what we wanted? Okay, maybe for a little while, we&#x2019;ll still get the old pencil out and dot it down for them, but then we fix the machine, we fix the factory, we get things going again. This is a recognition of what&#x2019;s already happening.&#x201d;</blockquote><p>DHH compared the maturation of AI tools into being highly capable at coding with the impact upon the craft of painting of the arrival of the camera:</p><blockquote>&#x201c;On November 24th, 2025, we got the &#x201c;Kodak Brownie&#x201d; of our era. We got Opus 4.5. AI technology, accessible in a harness that many people could afford to use and experience for the first time what it&#x2019;s like to create software in pairing with a new form of intelligence. This was the tipping point for me. There was everything before November 24th, and then there was everything after. This is going to be the date that history books going forward will mark as the inflection point for the age of agents.&#x201d;</blockquote><p>He shared how 37signals has embraced a future where coding by hand is almost entirely absent:</p><ul><li><strong>Embracing native mobile apps instead of web: </strong>famously, 37signals is bearish on native iOS and Android apps and has built web versions instead. With AI, they are betting on native apps being much easier to be built with a small team and are already building new ones.</li><li><strong>Moving backend services to Rust, not Ruby</strong>: This is due to performance reasons and because agents write good enough Rust. That&#x2019;s remarkable to hear from the creator of Ruby on Rails!</li><li><strong>Ruby on Rails remains for web apps</strong>: 37signals is not leaving RoR behind, but only because Ruby on Rails&#x2019; convention-over-configuration design makes it easy for agents to work with it.</li></ul><p>DHH closed by revealing that he no longer even thinks of himself as a professional programmer (emphasis mine):</p><blockquote>&#x201c;I have retired from being a professional programmer. I think it was somewhere around 4 to 5 months ago, maybe March. I spent a quarter of a damn century chiseling code by hand and loving every moment of it. This is not something to look back upon with regret; this is something to look back upon with joy and accept that it is over.<br><br><strong>Writing code by hand is no longer an economically productive enterprise for the vast majority of programmers working at the vast majority of companies</strong>. On the other side of that is a new career as a professional maker of things, steering intelligence that was only available in science fiction up until a few moments ago.<br><br>One of the things we&#x2019;re gonna have to revisit is everything we think we know about software architecture. The main tool that we&#x2019;ve used for a very long time is abstractions. Abstractions don&#x2019;t make quite the same sense in the age of agents. The reason we did abstractions was in part not to repeat ourselves; well, now the price of repetition has gone to near zero.&#x201d;</blockquote><p>It&#x2019;s worth noting DHH&#x2019;s keynote chose a spicy topic for a conference attended by engineers who are personally and professionally invested in the craft of building software!</p><h3 id="decline-of-coding-by-hand-is-long-predicted"><strong>Decline of coding by hand is long predicted</strong></h3><p>In the first issue in The Pragmatic Engineer this year, on 6 January, I <a href="https://newsletter.pragmaticengineer.com/p/when-ai-writes-almost-all-code-what?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">wrote</a>:</p><blockquote>&#x201c;<strong>When AI writes almost all code, what happens to software engineering?</strong> No longer a hypothetical question, this is a mega-trend set to hit the tech industry. (...)<br><br>The bad news is that change will probably be rapid. It&#x2019;s barely been a year since the idea of Claude Code was born in Boris Cherny&#x2019;s head, and already similar tools like OpenCode, Codex, Factory, Amp, Cursor, and more capable agents are changing how software is written. Change has always been part of working in tech, but I cannot recall it being this fast, or happening across the whole industry at once!&#x201d;</blockquote><p>I concluded that this change was on its way, based on my own experience of building software with Opus-4.6 and GPT-5.2, and from talking with experienced engineers who had resisted &#x201c;AI hype&#x201d; for good reason, but who had come to see that AI can now generate code that&#x2019;s &#x201c;good enough&#x201d; in many cases.</p><p>Back then, I made a few predictions about what will happen when AI agents are producing most of the code for engineers:</p><ul><li>Sloppier code</li><li>Weak software engineering practices hurting sooner</li><li>&#x201c;Coders&#x201d; who are not software engineers see less demand</li><li>Tougher work-life balance for engineers</li><li>Junior engineers pushed to become seniors, fast</li><li>Computer science education increasingly required for new hires</li><li>A massive explosion in code and software, for which someone must be accountable</li></ul><p>So far, it&#x2019;s a messy transition and we engineers are responsible and accountable for a lot more code that we didn&#x2019;t write, but which is in production anyway.</p><h3 id="non-engineers-also-getting-into-agents"><strong>Non-engineers also getting into agents</strong></h3><p>At the end of January, I <a href="https://newsletter.pragmaticengineer.com/p/ai-first-makeover-craft?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">shared a deepdive</a> that was pretty close to home for me: my brother&#x2019;s 30-person, 15-engineer startup, Craft Docs, made its own sharp pivot to AI by building their own AI harness for non-engineers &#x2013; called Craft Agents &#x2013; two weeks before Claude Cowork was released, and months before ChatGPT Work launched.</p><p>Craft resisted the temptation to use AI when it did not feel productive, but with the model releases of November 2025, they found LLMs are not only useful for coding, but also for non-engineering work like customer support. In the deepdive, I went into more detail about non-engineering use cases (which engineers enabled) like:</p><ul><li>Automatic triaging of bug reports with agents</li><li>Data enrichments added to all workflows</li><li>Customer support &#x201c;skills&#x201d; like processing feature requests</li><li>The marketing team building websites without devs</li><li>HR automating tedious work</li><li>Finance automating personal workflows</li></ul><p>Craft Docs seemed early to a trend that has become more widespread, by having both their own engineering and non-engineering folks onboard to an AI harness. Now, there are signs other companies are doing the same: at OpenAI, non-engineering units like finance, recruitment, and legal moved over to Codex in June 2026:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!7sIY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b1f3030-db5b-4563-9948-4652537fe20d_1456x831.png" class="kg-image" alt loading="lazy" width="1456" height="831"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Non-engineering teams moved over to use OpenAI&#x2019;s AI harness, Codex (now renamed to ChatGPT Work.) Source: </em></i><a href="https://newsletter.pragmaticengineer.com/p/openai-software-factory?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">Inside OpenAI&#x2019;s software factory</em></i></a></figcaption></figure><p>In some ways, it could be comforting to know that it&#x2019;s not only software engineering where the tools and workflows are quickly changing: every other function in tech is experiencing the same!</p><h3 id="it%E2%80%99s-messy-right-now"><strong>It&#x2019;s messy right now</strong></h3><p>Just last weekend, a rant by an anonymous engineer in Big Tech hit a nerve with many people in the industry. An engineer with the username voxium <a href="https://x.com/v0xium/status/2101526107128529120?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">posted</a> (emphasis mine):</p><blockquote>&#x201c;The state of engineering right now is horrible. It has been half a month since I started a new role at a big company.<br><br>Nobody knows anything here. The specs, code, tests, PRDs, tickets, resolution of those tickets, reports, etc., everything is made by Claude Code. Nobody on my team likes this.<br><br>They are being forced to ship as much as they can. I have heard multiple times from higher management that pushing code is not a bottleneck, so why are we slow?<br><br>People are working 12 to 13 hours a day just to press enter. Nobody is reading anything. Humans in corporate are doing nothing on their own.<br><br>Everyone, literally everyone, from an L1 to an L7 engineer here is doing the same thing. Talk to Claude.<br><br><strong>There is no sense of victory. Nobody is resolving bugs. In reality, nobody is thinking anymore.</strong> Everything is done by LLMs. It is so soul-sucking.<br><br>I would not mind it, to be honest, if we were at least given the time to check out the code and see what is going where. But no, the goal is to just ship. No matter what happens.&#x201d;</blockquote><p>This post rings true because it <em>is</em> happening at many places where there&#x2019;s more AI usage, engineers do &#x201c;outsource&#x201d; thinking to LLMs, and end up not caring about anything else except shipping <em>something</em> to production.</p><h3 id="quality-in-decline"><strong>Quality in decline</strong></h3><p>Since the beginning of the year, <a href="https://newsletter.pragmaticengineer.com/p/are-ai-agents-actually-slowing-us?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">the quality of software has been degrading</a> pretty much everywhere, much of it caused by over-reliance on AI, or perhaps more accurately, the outsourcing of thinking and decision making to AI. In July, I moved my video podcast off of Spotify after a <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-quitting-spotify-podcasts?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">series of unexplainable outages</a>, and Spotify&#x2019;s engineering team seemed to take no real pride or accountability in fixing the root causes of the issue.</p><p>Only this week, Uber shipped a new feature to production in the Uber Eats app &#x2013; a new way to select extras with your food order &#x2013; with seemingly no QA testing:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!y9be!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F883c9de5-9cd4-4a90-9309-8ba0a92d8131_1179x1802.png" class="kg-image" alt loading="lazy" width="1179" height="1802"><figcaption><span style="white-space: pre-wrap;">Uber Eats this week, when I attempting to order a burger. Can you spot two obvious, sloppy bugs on this page?</span></figcaption></figure><p>Inside this new &#x201c;add-ons selector&#x201d; in Uber Eats, I noticed three bugs at once:</p><ul><li><strong>&#x201c;Choose up to 999&#x201d;</strong>: no engineer, designer, or PM bothered to check what happens when a restaurant does not fill out a number on how many toppings to add, or adds a ridiculously large number. The most toppings that my screen allowed to be selected was six and not 999, so I could not even choose the option of 999 buns for my burger.</li><li><strong>Sloppy overflow. </strong>A rule of thumb, during my time at Uber, was that text will never overflow, even when localized. Basilcummaynaise (basil mayo in Dutch) broke this rule but still shipped.</li><li><strong>Functional bugs in the selector. </strong>I originally tried to order from my favorite Mexican place: a bowl with no rice or bulgur as the base. There&#x2019;s the option to select &#x201c;rice&#x201d;, &#x201c;bulgur&#x201d; or &#x201c;nothing&#x201d; as the base, but selecting &#x201c;nothing&#x201d; counts as an extra side, and the app doesn&#x2019;t allow the ordering of a bowl with no base.</li></ul><p>I&#x2019;ve used the Uber Eats app for years, and this was the first time I saw such a sloppy feature release. I assume that devs and PMs building it have all &#x201c;checked out&#x201d;, stopped doing proper QA, and assume that the agent will take care of all of it. There&#x2019;s no other way to explain three bugs shipped to all customers but seemingly noticed by nobody until I <a href="https://x.com/GergelyOrosz/status/2102710141581992280?s=20&amp;ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">posted</a> about it. <em>To the Uber Eats team&#x2019;s credit, they reached out and are looking into fixing all three issues.</em></p><h3 id="software-engineering-to-be-more-important-than-ever"><strong>Software engineering to be more important than ever</strong></h3><p>I&#x2019;m personally past the shock and grief stages of agents taking over the activity of coding. At first, I assumed this change would reduce the amount of work for engineers. But, counter-intuitively, that actually seems to be growing:</p><ul><li><strong>We need to understand the characteristics of LLMs better. </strong>LLMs feel familiar as they can produce text in a way only humans could do before. But they are less reliable, still prone to hallucination, suffer from capability gaslighting, and many other problems. They can also be expensive and slow.</li><li><strong>New systems need to be engineered. </strong>Agentic &#x201c;software factories&#x201d; can now produce code, based on the input provided. But how is this code validated? How much can detecting defects or various issues be automated? This is a brand new area, and we need to build new types of systems, often based on old ideas. One such example is <a href="https://newsletter.pragmaticengineer.com/p/openai-software-factory?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">OpenAI&#x2019;s software factory</a>, the other one is Ramp&#x2019;s <a href="https://newsletter.pragmaticengineer.com/p/why-ramp-built-inspect?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Inspect internal coding harness.</a></li><li><strong>Nondeterministic LLMs can generate deterministic code. </strong>An area I feel is under-explored and under-appreciated is the use of LLMs to substitute LLMs usage in agentic &#x201c;software factories&#x201d; with deterministic code they generate. For example: instead of running AI code review that is expensive and slow on all PR requests, could AI generate linters that catch the majority of common issues? If this is possible, complex lint rules would run faster, be more reliable and cheaper to execute than LLM calls.</li></ul><p><strong>New categories of systems and products will be built by engineers who &#x201c;get&#x201d; LLMs and AI engineering. </strong>We are seeing the majority of venture funding pour into AI companies because AI creates new business models, new revenue streams, and disrupts &#x201c;traditional&#x201d; software. For example, who would have thought that companies would spend tens of thousands of dollars, per engineer, on AI coding tools? Or that the category of AI inference providers would become as massive as it already is from barely existing two years ago?</p><p>This technological change will re-jig parts of the tech industry: the winners will surely win big, and teams and companies choosing inaction could be out-executed and displaced by nimble competitors. And in many ways, this is great news for us software engineers who keep up with the technology. Companies are now investing in innovation and are willing to pay top-of-market for software engineers who can help them build AI products or become AI-native.</p><hr><p>Read the full issue of <a href="https://pragmaticengineer.substack.com/p/the-pulse-end-of-coding-by-hand" rel="noopener noreferrer nofollow"><strong>The Pulse this is from</strong></a><strong>,</strong> or check out <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-firebases-global-outage?ref=blog.pragmaticengineer.com" rel="noreferrer"><strong>this week&#x2019;s The Pulse</strong></a>. This week&#x2019;s issue covers:</p><ol><li><strong>Firebase: global outage &amp; poor handling by Google. </strong>The Firebase iOS SDK crashed after a backend change, crashing all apps which used Firebase analytics for 2-6 hours. Google did not update the status page or offer any postmortem, which is a head-scratcher from a company known for standout incident management practices.</li><li><strong>OpenAI&#x2019;s platform play from AWS playbook? </strong>OpenAI is becoming a platform where it&#x2019;s possible to allocate ChatGPT spend on open models and AI offerings from among 16 partners, not just OpenAI models. It&#x2019;s fair to ask if Anthropic will consider a similar platform play.</li><li><strong>More data on companies moving to open models. </strong>Vercel&#x2019;s AI gateway shows 60% of model spend goes to open weight models, and OpenRouter also shows open models are being more used than closed ones.</li><li><strong>Why CTOs and VPEs are quitting en masse: another take. </strong>What if it&#x2019;s not &#x201c;founder mode&#x201d;, but about people who love building software, feeling like they can do it solo (or with a small team) with AI tools?</li></ol>]]></content:encoded></item><item><title><![CDATA[The Pulse: a new trend of CPU shortages]]></title><description><![CDATA[After a GPU shortage and memory shortage driven by AI companies, we’re now experiencing a CPU shortage, thanks to AI agents using a lot more CPU with tool usage.]]></description><link>https://blog.pragmaticengineer.com/the-pulse-a-new-trend-of-cpu-shortages/</link><guid isPermaLink="false">6aab98704a58460001d006e2</guid><dc:creator><![CDATA[Ivan Klaric]]></dc:creator><pubDate>Thu, 24 Sep 2026 16:45:01 GMT</pubDate><content:encoded><![CDATA[<p><em>Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of four topics from </em><a href="https://pragmaticengineer.substack.com/p/the-pulse-191-a-new-trend-of-cpu" rel="noopener noreferrer nofollow"><em>a past issue of The Pulse</em></a><em>. Full subscribers received the article below fourteen days ago. If you&#x2019;ve been forwarded this email, you can </em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>subscribe here</em></a><em>.</em></p><p>I was at dinner with a bunch of CTOs and Head of Infrastructure folks recently, and from the conversation it was clear that many companies are struggling to source CPUs in the current climate, and are coming to terms with the end of juicy discounts from cloud providers for machines in the new era of surging demand fueled by AI.</p><p>The &#x2018;memory crisis&#x2019; afflicting sectors like video gaming is well established and has been extensively covered in terms of shortages of GPUs, but now it seems like things are just as hard for businesses in need of CPUs from cloud providers.</p><p>In a sign of how things are changing, the disappearance of CPU spot pricing was mentioned at the table. Customers used to be able to pay up to 90% less than the standard price for CPUs, as cloud providers slashed CPU prices for machines that were lying dormant and unused. But that&#x2019;s no longer the case. It seems that spot pricing has vanished because there&#x2019;s no longer any lack of demand for CPUs &#x2013; quite the opposite.</p><p>I was surprised, but a lot of people chimed in; apparently, it&#x2019;s now nearly impossible to get CPUs on spot instances without long-running connections with cloud providers. Also, reserving specific CPUs now needs to be done months in advance, and cloud providers will even turn down certain reservations because they don&#x2019;t have enough CPUs or the right type of CPUs.</p><h3 id="even-big-players-struggle-to-reserve-cpus"><strong>Even big players struggle to reserve CPUs</strong></h3><p>I have asked turbopuffer CEO Simon Eskildsen about their experience of CPU availability in the cloud, since turbopuffer, as a product, runs on CPUs, not GPUs. They operate in AWS, GCP, and Azure, so I asked how easy it is to get CPUs these days. Simon&#x2019;s response:</p><blockquote>&#x201c;<strong>Getting CPUs is not easy anymore. </strong>As Reinforcement Learning (RL) is becoming a large amount of the workloads: RL needs a lot of CPUs. So the labs are sucking up a lot of CPUs. During RL, they need to teach the models how to do things, like searching, and then they need the model to run software, which then takes CPUs to run.<br><br>Then, outside of RL, agents need to do all kinds of very general purpose things on a CPU. So as the demand curve is shifting to general purpose agents, CPU demand is also going up.<br><br><strong>Even the big companies are fighting each other for the right to get the CPU allocations. </strong>I would assume that it gets a lot worse before it gets better on the CPU side.&#x201d;</blockquote><p>I was able to confirm what Simon said about larger companies struggling; a VP of Engineering at a large inference provider told me they are at the limit on how much GPU and CPU capacity they can buy from their cloud providers. They have cash to spend and want to rent more capacity, and are willing to accept the longest leases. Despite that, cloud providers tell them no more is available!</p><h3 id="ai-hogging-cpus"><strong>AI hogging CPUs</strong></h3><p>Katelyn Lesse, Head of Platform Engineering for Claude Platform, has <a href="https://x.com/katelyn_lesse/status/2097092193194541234?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">written about</a> the reasons for the massive CPU demand increase:</p><blockquote>&#x201c;In the past few years, AI-fueled demand has skyrocketed, and these few companies suddenly needed multiple years and tens of billions of dollars to actually add enough capacity. We ended up with 3 separate bottlenecks in factory capacity that AI is exacerbating. At TSMC, GPUs are competing with CPUs (and with Apple, Qualcomm, and Broadcom) for production lines. And at SK Hynix, Samsung, and Micron, HBM [High Bandwidth Memory] is competing with regular DRAM for wafers.<br><br>What we&#x2019;ve ended up with is CPUs getting squeezed from both sides. AMD doesn&#x2019;t own fabs [semiconductor fabrication plants], so its CPUs need to come out of TSMC&#x2019;s constrained allocation. Intel does own fabs, but it&#x2019;s been working through yield problems and is now pulling some of its capacity from PC chips in order to make more server chips. And CPUs need DRAM which has gotten more expensive because memory production has shifted toward HBM. Analysts are expecting CPU supply to add more comfortable headroom before memory does, but their expectation is that it&#x2019;s still going to be multiple quarters away.&#x201d;</blockquote><p>AI-fueled demand does increase CPU load, as shown in this graph from Uber, displaying the growth in agent requests over the past six months:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!L0TW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3d335c-1137-4c47-8a9a-f91dbc29ba64_1456x1042.png" class="kg-image" alt loading="lazy" width="1456" height="1042"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Ninefold increase in agentic requests over six months. Source: </em></i><a href="https://www.uber.com/us/en/blog/efficient-software-factory/?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">Uber</em></i></a></figcaption></figure><p>Increasingly, &#x201c;agent requests&#x201d; not only generate code which is inference-heavy &#x2013; and therefore needs GPUs &#x2013; but they also run tools that compile the code, run tests, run linters, and all of this is CPU-heavy. At companies like Uber, Ramp, and others, AI agents no longer run on the dev&#x2019;s local machine, but on a dedicated instance in the cloud. So, the companies reserve more CPUs on their respective cloud providers for agentic workloads. <em>We recently covered </em><a href="https://newsletter.pragmaticengineer.com/p/why-ramp-built-inspect?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>how Ramp built and runs its cloud agent, Inspect.</em></a></p><p>Basically, the problem is:</p><ul><li><strong>AI applications use more and more CPUs, </strong>thanks to agents running a lot more software. AI data centers used to have a ratio of 1 CPU to 8 GPUs. Now the ratio is more 1:4, and it could shrink to 1:1.</li><li><strong>Companies that can manufacture more CPUs are busy on other hardware. </strong>TSMC is busy producing GPUs, which might be more profitable than CPUs. Meanwhile, CPUs also need DRAM, but DRAM manufacturers (SK Hynix, Samsung, and Micron) are instead producing high-bandwidth memory (HBM) because it&#x2019;s more profitable. This is why <a href="https://newsletter.pragmaticengineer.com/i/183931240/spiking-memory-prices-and-big-tech-unable-to-buy-ram?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">memory prices are spiking</a>; even Big Tech is unable to buy RAM, as previously covered.</li></ul><p><strong>To secure CPUs, it&#x2019;s necessary to do capacity planning up to 12 months in advance. </strong>Katelyn says that server orders are being fulfilled in ~six months, instead of 1-2 weeks&#x2019; time as previously, and that prices are up by between 10-20%. So, it&#x2019;s probably time for capacity planning. <a href="https://x.com/katelyn_lesse/status/2097092193194541234?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Katelyn</a>:</p><blockquote>&#x201c;Most of us have never capacity-planned CPUs. We planned databases, we maybe planned accelerators if we needed them, and we autoscaled on-demand into CPU capacity as much as our budgets allowed us to. But general purpose compute is now something many teams will need to commit to ahead of time, which means you should probably start to forecast and plan around it. If you&#x2019;re operating at scale, there are some things to spend your energy on.&#x201d;</blockquote><p><strong>Using existing CPUs more efficiently is something to do, as of now. </strong>The CPU capacity shortage won&#x2019;t go away, and any new CPU allocations requested could take months to turn up. So, what can we do if new capacity lags? One option is utilizing current resources more efficiently!</p><p>This is a great time to review and to establish now which services are CPU-intensive, and whether or not they <em>need</em> to be. Also check on services which are utilizing little CPU: can they run on fewer nodes, so that some CPU capacity can be allocated to services that need it more?</p><p><strong>The best time to secure more CPU capacity is most certainly <em>right now</em>. </strong>I&#x2019;m hearing rumors that certain cloud regions no longer accept new tenants because all CPU capacity is leased, or negotiations elsewhere are difficult. I&#x2019;m also hearing that customers are already paying <em>today</em> to reserve capacity that will only come online in data centers from December. This seems predatory by providers, but demand is so high that this is how they likely prioritize new capacity allocation &#x2013; <em>while</em> <em>earning much higher profits than usual.</em></p><p>If your company has dynamic workloads, and you&#x2019;ve used spot instances in the past, now could be a good time to allocate fixed capacity &#x2013; even if it&#x2019;s more expensive. If you expect meaningful growth, doing so now might mean having options at some cloud providers or in some regions.</p><p>It seems like this issue has spread everywhere as a corollary of widespread AI adoption. There&#x2019;s a GPU shortage, memory shortage, and now a growing CPU shortage as well. Back at the end of last year, there was even an <a href="https://www.tomshardware.com/pc-components/hdds/ai-triggers-hard-drive-shortage-amidst-dram-squeeze-enterprise-hard-drives-on-backorder-by-2-years-as-hyperscalers-switch-to-qlc-ssds?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">hard drive shortage</a>. <em>The only compute primitive not in short supply seems to be networking!</em></p><hr><p>Read the full issue of <a href="https://pragmaticengineer.substack.com/p/the-pulse-191-a-new-trend-of-cpu" rel="noopener noreferrer nofollow"><strong>The Pulse this is from</strong></a><strong>,</strong> or check out <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-end-of-coding-by-hand?ref=blog.pragmaticengineer.com" rel="noreferrer"><strong>this week&#x2019;s The Pulse</strong></a>. This week&#x2019;s issue covers:</p><ol><li><strong>Writing code by hand: is it over? </strong>In his Rails World keynote, David Heinemeier Hansson (DHH) declared the end for writing code by hand for professional work &#x2013; at 37Signals at least. Is this change now unstoppable?</li><li><strong>Amazon and Meta struggle to hire and keep engineers. </strong>Both Big Tech companies are scrambling to hire engineers who they previously laid off or enforced job reassignment upon. It seems experienced engineers remain in demand after all.</li><li><strong>Opus 5.5 released and it&#x2019;s good. </strong>Anthropic has released its new model that&#x2019;s 40% the cost of using Fable 5.1 and has superior coding capability.</li><li><strong>Code reviews to vanish sooner rather than later? </strong>Marc Brooker, Distinguished Engineer at AWS, believes that humans will have no role in routinely reviewing code by hand, and explains why this is all but inevitable.</li></ol>]]></content:encoded></item><item><title><![CDATA[The Pulse: tech companies move to open AI models]]></title><description><![CDATA[Uber, Pinterest, Stripe, Coinbase, Ramp, and AT&T are making large savings on their AI bills by dropping proprietary models and using smart model routing.]]></description><link>https://blog.pragmaticengineer.com/the-pulse-tech-companies-move-to-open-ai-models/</link><guid isPermaLink="false">6aa26df1e3d0390001d47f92</guid><dc:creator><![CDATA[Ivan Klaric]]></dc:creator><pubDate>Thu, 10 Sep 2026 17:22:31 GMT</pubDate><content:encoded><![CDATA[<p><em>Update: three weeks after publishing this article, Bloomberg covered the same trend in their article </em><a href="https://www.bloomberg.com/news/articles/2026-09-21/startups-like-harvey-embrace-open-models-to-cut-reliance-on-anthropic-openai?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>OpenAI, Anthropic costs push more startups to build off cheaper open models</em></a><em>, covering the exact same phenomenon we discuss below. If you would like to stay weeks ahead of mainstream media for tech industry trends, subscribe to The Pragmatic Engineer and get trends like this straight into your inbox</em></p><p><a href="https://newsletter.pragmaticengineer.com/subscribe?ref=blog.pragmaticengineer.com" rel="noreferrer"><strong><em>Subscribe to The Pragmatic Engineer</em></strong></a></p><p><em>Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of five topics from </em><a href="https://pragmaticengineer.substack.com/p/the-pulse-tech-companies-move-to" rel="noopener noreferrer nofollow"><em>last week&#x2019;s The Pulse</em></a><em> issue. Full subscribers received the article below seven days ago. If you&#x2019;ve been forwarded this email, you can </em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>subscribe here</em></a><em>.</em></p><p>In May, I <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-a-trend-of-trying-to-cut?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">covered an emerging trend</a> of companies <em>wanting</em> to cut back their AI spending, starting with engineering departments. Different approaches were being tried:</p><ul><li>Experimentation with running cheaper, open models on inference providers</li><li>More investment in model routing to route simpler requests to cheaper models</li><li>Knowledge-sharing sessions on how to use AI models cost-effectively</li><li>Setting per-developer monthly AI usage limits</li></ul><p>A few months later, it seems that several companies have managed to achieve this, according to sources I&#x2019;ve spoken with. </p><h3 id="uber-ai-costs-down-50"><strong>Uber: AI costs down 50%</strong></h3><p>Uber <a href="https://newsletter.pragmaticengineer.com/i/194426825/2-are-coding-ai-agent-subsidies-doomed?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">managed to blow through</a> its annual AI budget in the first three months of this year, and it wasn&#x2019;t a surprise to hear, in May, Uber&#x2019;s COO <a href="https://fortune.com/2026/05/26/uber-coo-ai-spending-tokens-claude-code/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">say</a> that it was getting harder to justify spending on tools like Claude Code without seeing benefits from the leading models. It wasn&#x2019;t long until engineering teams at the ridesharing giant set to work on how to optimize AI spend, and their efforts weren&#x2019;t in vain.</p><p>Uber cut the cost per AI request by 34%, and the cost per AI session by 52%:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!L4Nu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7718d386-a6f1-4901-bb62-aef95af202da_2048x768.png" class="kg-image" alt loading="lazy" width="1456" height="546"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Reducing per-token and per-session spend. Source: </em></i><a href="https://www.uber.com/us/en/blog/efficient-software-factory/?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">Uber</em></i></a></figcaption></figure><p>Of course, Uber keeps using more AI tokens and starting more AI sessions, but thanks to optimizations the cost has been flat since March, despite significantly more usage:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!l-d4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F534b20ec-8678-40d4-9248-2d5751979703_2048x1145.png" class="kg-image" alt loading="lazy" width="1456" height="814"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Usage up, cost stable Source: </em></i><a href="https://www.uber.com/us/en/blog/efficient-software-factory/?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">Uber</em></i></a></figcaption></figure><p>How did they pull it off at Uber? It was via a combination of different approaches:</p><ul><li><strong>Open weight models, run using inference: </strong>run open weight models on inference services, which are significantly cheaper than frontier ones.</li><li><strong>Optimized model selection</strong>: benchmark all available frontier and open models, to build an accurate picture of their present capabilities</li><li><strong>Ongoing benchmarking</strong>: run benchmarks every week based on real work, and update them</li><li><strong>Cheaper subagent models</strong>: subagents do smaller tasks not requiring the most expensive models</li><li><strong>Reduce model effort:</strong> Uber found that defaulting to Medium effort gives the best cost-to-output ratio with advanced models</li><li><strong>Optimize requests</strong>: trigger automatic compaction above 400K tokens, even for models with 1M context windows</li><li><strong>Cache prompts</strong>: cache prompts to save money when using Uber&#x2019;s own harness, Minions</li><li><strong>&#x2026; and more: </strong>Uber wrote <a href="https://www.uber.com/us/en/blog/efficient-software-factory/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">an engineering blog post</a> detailing the dozens of optimizations taken to reduce token cost without noticeable change in the quality of code generated by agents</li></ul><p>From the outside, the single biggest win seems to be Uber&#x2019;s transition to using open models for certain tasks. Open models cost 2-20x less, compared to frontier ones:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!30Z3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e389210-803e-483c-832a-aed043429601_1572x702.png" class="kg-image" alt loading="lazy" width="1456" height="650"><figcaption><i><em class="italic" style="white-space: pre-wrap;">The most expensive open weight model costs &#x24;0.30 per code review, vs &#x24;0.50 for the cheapest frontier model (and &#x24;2.50 for the most expensive one). Source: </em></i><a href="https://www.uber.com/us/en/blog/efficient-software-factory/?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">Uber</em></i></a></figcaption></figure><h3 id="pinterest-makes-90-cost-savings-by-dropping-frontier-models"><strong>Pinterest makes 90%+ cost savings by dropping frontier models</strong></h3><p>Interesting details from Pinterest&#x2019;s earnings call last month reveal how much the social media platform saves by running open models. Here&#x2019;s what CEO William Ready said (emphasis mine):</p><blockquote>&#x201c;Our approach to model deployment includes our own compact fit-for-purpose models built for Pinterest-specific use cases and suitable open source models post-trained in our own environment within our secure cloud infrastructure. When we leverage open source models, such as with Pinterest Assistant, we are seeing superior performance for our use cases when compared to closed third-party models because we are able to post-train open models on our highly unique data.<br><br><strong>With open models, we are achieving cost per transaction at less than 8% of the cost of comparable closed proprietary models. </strong>This gives us substantial headroom to deepen and extend these capabilities over time in a way that is differentiated, highly effective, and cost efficient.&#x201d;</blockquote><p>Basically, what used to cost Pinterest &#x24;100 to run on a closed, frontier model, they now spend &#x24;8 on by using open models on owned or rented inference!</p><h3 id="att-56-savings-by-swapping-claude-for-open-models"><strong>AT&amp;T: 56% savings by swapping Claude for open models</strong></h3><p>With 100,000 employees, AT&amp;T is a big spender on AI. The telco giant cut its AI bill by 56% while measuring a 2% decrease in the quality of AI&#x2019;s output, after they moved workloads over to open models. From <a href="https://www.theinformation.com/newsletters/applied-ai/t-using-open-source-models-curb-anthropic-bills?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">The Information</a>:</p><blockquote>&#x201c;Austin said he&#x2019;s found that open source models are &#x201c;just as good or better&#x201d; than older models sold by the likes of Anthropic and OpenAI. For instance, AT&amp;T&#x2019;s software developers still rely on cutting-edge models for complex tasks like generating code, but can use cheaper open source models for less intense tasks like generating summaries of previously submitted code, he said.<br><br>After the company began using router provider LiteLLM, the costs of some advanced AI tasks such as coding fell by as much as 56% while the quality of the AI&#x2019;s performance fell just 2%, Austin said.&#x201d;</blockquote><h3 id="anthropic-overpriced-compared-to-the-rest-of-the-market"><strong>Anthropic overpriced compared to the rest of the market?</strong></h3><p>Only a few months ago, Anthropic was the preferred model (Claude) and harness (Claude Code) among engineers. But Anthropic&#x2019;s models are becoming steeply more expensive at a time when open weight models &#x2013; and also OpenAI &#x2013; are getting much cheaper. Meanwhile, Opus 5 is 100x more expensive (!!) than models like GPT-5.6 Luna xhigh and DeepSeek. That may be simply too much to ignore for some tech companies:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!9_-_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cd4931f-ab6d-4628-8798-27341f35eccb_1120x852.png" class="kg-image" alt loading="lazy" width="1120" height="852"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Typical cost for an AI agent run, per model. Source: </em></i><a href="https://modelzengarden.com/?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">Model Zen Garden</em></i></a></figcaption></figure><p>Seeing this data, I&#x2019;m not surprised that more tech companies are looking to run open weight providers on inference providers, due to the significant savings available from a model that&#x2019;s similarly capable as one from Anthropic.</p><h3 id="what-worked-for-stripe-coinbase-uber-ramp"><strong>What worked for Stripe, Coinbase, Uber &amp; Ramp</strong></h3><p>The engineering team at Databricks interviewed engineers at Stripe, Coinbase, Uber, and Ramp, and <a href="https://www.databricks.com/blog/managing-ai-coding-costs-scale?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">collected</a> how different approaches helped save costs for them. The summary:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!pejT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5d9da58-d8d7-4eaf-b668-a16fe4d613c5_1646x652.png" class="kg-image" alt loading="lazy" width="1456" height="577"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Source: </em></i><a href="https://www.databricks.com/blog/managing-ai-coding-costs-scale?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">Databricks</em></i></a></figcaption></figure><p>To answer the question posed in the header of this report, it&#x2019;s apparent that using open models is indeed the approach offering the biggest savings, followed by smart model routing. Spending controls and context optimization also bear down on costs, but they don&#x2019;t come close to the first two techniques in results.</p><p><em>A week after publishing this article, Ara Krahzian at Ramp </em><a href="https://x.com/arakharazian/status/2097706961584140645?s=20&amp;ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>has confirmed</em></a><em> that AI spend in August, has, indeed, declined at the top 1% of businesses by 10%, based on Ramp data:</em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/09/image.png" class="kg-image" alt loading="lazy" width="1200" height="725" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/09/image.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/09/image.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/09/image.png 1200w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">AI spend starting to decline at the top 1% of firms. Source: </span><a href="https://ramp.com/data/ai-index-sept-2026?ref=blog.pragmaticengineer.com" rel="noreferrer"><span style="white-space: pre-wrap;">Ramp</span></a></figcaption></figure><p><em>I&#x2019;d wager those companies are not spending fewer tokens, but they are optimizing cost, in ways outlined above.</em></p><hr><p>Read the full issue of <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-tech-companies-move-to?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><strong>last week&#x2019;s The Pulse</strong></a><strong>,</strong> or check out <a href="http://todo/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><strong>this week&#x2019;s The Pulse</strong></a>. This week&#x2019;s issue covers:</p><ol><li><strong>New trend of CPU shortages:&#xa0;</strong>after a GPU shortage and memory shortage driven by AI companies, we&#x2019;re now experienceding a CPU shortage, thanks to AI agents using a lot more CPU with tool usage. If you will need more compute in the future: secure it now, while you can (even if it&#x2019;s expensive to do so).</li><li><strong>Growth dream ends for more COVID-era unicorns:&#xa0;</strong>Miro sold itself to Bending Spoons for &#x24;1.35B, after it was valued at &#x24;17B in 2022. Airtable saw a similar valuation cut last month, and it seems a batch of now-overvalued, VC-funded companies are desperate to sell.</li><li><strong>Industry Pulse:</strong>&#xa0;Overtime at Google to get Borg working on SpaceX&#x2019;s data centers; SpaceX cuts Claude Code tokens by 90%; OpenAI launches Astra; Meta unveils Muse (and Mark Zuckerberg pushed production code in this release); &#x2013; to which Mark Zuckerberg made personal contributions; OpenAI&#x2019;s agents go rogue, again.</li><li><strong>Do engineers lose touch when AI handles incidents?&#xa0;</strong>In the aviation industry, pilots are exposed to emergency situations every six months, to keep their critical problem solving skills sharp. In the tech industry, we might need something similar, especially if AI would take on handling of the simpler incidents.</li></ol>]]></content:encoded></item><item><title><![CDATA[The Pulse: Meta wanted to reduce teams by 60% because of AI]]></title><description><![CDATA[An in-depth report by Reuters details how Meta’s leadership decided to slash team sizes by 60%. Zuckerberg changed his mind, and now the company is stuck with low morale and culture turned mercenary.]]></description><link>https://blog.pragmaticengineer.com/the-pulse-meta-wanted-to-reduce-teams-by-60-because-of-ai/</link><guid isPermaLink="false">6a9934b9534530000142389d</guid><dc:creator><![CDATA[Ivan Klaric]]></dc:creator><pubDate>Thu, 03 Sep 2026 17:01:49 GMT</pubDate><content:encoded><![CDATA[<p><em>Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of four topics from </em><a href="https://pragmaticengineer.substack.com/p/the-pulse-meta-wanted-to-reduce-teams" rel="noreferrer"><em>last week&#x2019;s The Pulse</em></a><em> issue. Full subscribers received the article below seven days ago. If you&#x2019;ve been forwarded this email, you can </em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>subscribe here</em></a><em>.</em></p><p>Two months ago, I asked <a href="https://newsletter.pragmaticengineer.com/p/why-is-meta-destroying-its-engineering?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">why Meta appeared intent on destroying its engineering organization</a>, at a time when the social media giant was reporting record revenue and profits. The question was raised after the company did two unexpected things:</p><ol><li><strong>Laid off 10% of staff. </strong>Executed large layoffs in May, with circa 10% of engineers shown the door.</li><li><strong>Moved 20-30% of engineers to AI training. </strong>At around the same time, infra and product teams lost a further 20-30% of their engineers, who were reassigned to data labeling work for AI training.</li></ol><p>The outcome of that period was low morale and a string of embarrassing outages, including <a href="https://newsletter.pragmaticengineer.com/i/202307236/4-most-embarrassing-ever-outage?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">a &#x201c;zero auth password reset&#x201d; outage on Instagram</a>, where anyone&#x2019;s account &#x2013; including that of former US president Barack Obama &#x2013; could be taken over just by asking the AI bot to replace Obama&#x2019;s email with a different one.</p><p>Now, thanks to reporting by Reuters, <a href="https://www.reuters.com/investigations/mark-zuckerberg-had-bold-plan-replace-meta-staff-with-ai-heres-how-it-imploded-2026-08-26/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">new details</a> have emerged about a plan for much larger layoffs, which eventually did not go ahead. The news report is pretty damning, and I want to get into what the planned AI job cuts reveal about Meta at this point in its history, what Zuckerberg might have been thinking, and what it could mean for other tech companies.</p><h3 id="making-meta-%E2%80%9Cai-native%E2%80%9D-project-organization-transformation"><strong>Making Meta &#x201c;AI-native:&#x201d; Project Organization Transformation</strong></h3><p>The plan was formed in January of this year. As <a href="https://www.reuters.com/investigations/mark-zuckerberg-had-bold-plan-replace-meta-staff-with-ai-heres-how-it-imploded-2026-08-26/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">per Reuters:</a></p><blockquote>&#x201c;In January, Meta CEO Mark Zuckerberg and his top lieutenants gathered for their annual leadership retreat at his Hawaii compound. There they hatched a radical plan to reimagine work at the social-media giant in the age of artificial intelligence.<br><br>Code-named Project OT &#x2013; short for Organization Transformation &#x2013; the plan envisioned an &#x201c;AI native&#x201d; future for the owner of Facebook and Instagram. AI would take over much of the daily work performed by thousands of human employees. Virtual workers would be overseen inside Meta by smaller, &#x201c;talent-dense&#x201d; cadres of human staffers, according to one internal planning document reviewed by Reuters and three people familiar with the project.&#x201d;</blockquote><p>The idea was that many existing teams could be reduced by 60% in their size through layoffs and reallocation of workers to other parts of the business. Underpinning this was the assumption that AI would enable these smaller teams to operate as well as before. HR at the social media giant projected that the project would involve a bigger layoff than happened in 2022-2023, when 25% of staff were let go. The new plan was to do one layoff+restructuring in May, and another in November.</p><p><em>I suspect a 30-40% company-wide layoff was planned.</em></p><p>But at the last minute, something changed. From <a href="https://www.reuters.com/investigations/mark-zuckerberg-had-bold-plan-replace-meta-staff-with-ai-heres-how-it-imploded-2026-08-26/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Reuters</a> (emphasis mine):</p><blockquote>&#x201c;But on the night of May 19, just hours before the first layoff wave, Zuckerberg blinked. Meta laid off 10% of its employees the next day, but it called off planning for the November cuts, according to one internal document reviewed by Reuters.<br><br><strong>By then, Meta employees were in open revolt, convinced that the company&#x2019;s AI transformation initiatives were partly aimed at replacing them</strong>.&#x201d;</blockquote><p>The Reuters report shows those employees were right: Meta&#x2019;s AI initiatives were indeed aimed at laying off as many of them as possible, without changing overall productivity!</p><p>Even though these 60% cuts did not happen, some teams had 30-40% cuts and struggled to cope with their workloads. It also didn&#x2019;t help that I talked with teams whose key engineers got reassigned to AI labeling: those were devs with critical domain knowledge that was lost after they left.</p><h3 id="why-did-meta-want-60-smaller-teams"><strong>Why did Meta want 60% smaller teams?</strong></h3><p>You must assume that a company like Meta acts rationally overall, and on that basis it&#x2019;s worth figuring out what the rationale might be in the case of &#x2018;Project OT&#x2019;. The article offers a hint: executives at the company had been captivated by &#x201c;AI-native&#x201d; businesses in Asia, <a href="https://www.reuters.com/investigations/mark-zuckerberg-had-bold-plan-replace-meta-staff-with-ai-heres-how-it-imploded-2026-08-26/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Reuters</a> claimed:</p><blockquote>&#x201c;Meta executives, including Chief Data Officer Alex Schultz and Head of Product Naomi Gleit, visited Asia last year and admired how startups there had built their organizational charts around AI, according to three people familiar with the trips. Meta executives also commissioned their own research into how AI startups were organized and set up pilot projects to determine what being &#x201c;AI native&#x201d; would mean at the company, according to one source familiar with the research and internal documents describing the pilots.&#x201d;</blockquote><p>And indeed, in February Meta experimented with &#x201c;AI-native pods&#x201d; as <a href="https://newsletter.pragmaticengineer.com/i/188532718/meta-more-hands-on-managers-and-ai-native-pods?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">reported in The Pulse</a> at the time. The presentation obtained by Reuters shows leadership intended to achieve 60% reductions in team size with small, 3-5 person, &#x201c;AI-native&#x201d; teams doing the work of what had been between 10 and 20 people:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!e8iR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4101a302-8ebd-44c4-906e-367d8be75b59_1242x892.png" class="kg-image" alt loading="lazy" width="1242" height="892"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Internal presentation at Meta about &#x201c;traditional&#x201d; vs &#x201c;AI-native&#x201d; teams. Source: </em></i><a href="https://www.reuters.com/investigations/mark-zuckerberg-had-bold-plan-replace-meta-staff-with-ai-heres-how-it-imploded-2026-08-26/?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">Reuters</em></i></a></figcaption></figure><p>And Meta is probably on the money that engineering teams are becoming a lot smaller at startups &#x2013; and &#x201c;AI-native companies&#x201d; are also getting smaller, by size. But those are companies that are <em>growing </em>slower, without ever having done mass layoffs. Meanwhile, Meta seems to have wanted to become smaller not organically, and over time, but with a brutal layoff and sudden reassignments, in the span of a year, ignoring the impact such a sudden change would have on the company, teams, and employees.</p><h3 id="downsides-of-tiny-teams"><strong>Downsides of tiny teams</strong></h3><p>In theory, a smaller team could work better with less communication overhead and quicker decision-making, so there are cases where the upsides of a small team outweigh the downsides. For example, if there&#x2019;s a small team of very senior folks with sound judgment skills, outstanding domain knowledge, and who don&#x2019;t care about growing professionally anymore. However, such expected gains would come with several real costs, mostly associated with losing so much experience and skill:</p><ul><li><strong>Domain knowledge:</strong> A lot of personal domain knowledge is suddenly gone.</li><li><strong>Redundancy</strong>: what if someone is on vacation, another is sick, and the other has an urgent appointment that cannot be moved? In a 10-20 person team, it would mean business pretty much as usual. But in a 3-5 person team, you&#x2019;re down to two people doing everything!</li><li><strong>Capacity for oncall:</strong> a healthy oncall schedule needs 6+ engineers if every alert is to be taken <em>seriously</em> by an engineer whose main focus is oncall and systems stability.</li><li><strong>Lack of &#x201c;slack time&#x201d;: </strong>Innovation often comes from having time to focus on other work, instead of putting out fires. A bigger team naturally creates more &#x201c;slack time&#x201d; that can be used for other things, like university recruiting events, writing engineering blog posts, working with other teams on building things together, etc. In contrast, one that&#x2019;s stretched thin with a maximum of 5 people or less gets almost zero slack time.</li><li><strong>Professional growth: </strong>engineers pair with more devs and get more feedback on larger teams. There&#x2019;s more discussion and generally more opportunities to learn.</li><li><strong>Judgment</strong>: For honing one&#x2019;s skills, there&#x2019;s more experience and mentoring to be gained in larger teams than on small, &#x201c;AI-native&#x201d; ones where engineers spend the most time with AI. How good is AI&#x2019;s judgment, anyway?</li></ul><h3 id="is-zuckerberg%E2%80%99s-worst-fear-being-out-executed-by-a-startup"><strong>Is Zuckerberg&#x2019;s worst fear being out-executed by a startup?</strong></h3><p>With Meta&#x2019;s business posting record revenue and profits, and facing zero pressure to radically change how the social media giant operates, it&#x2019;s worth asking why the social media giant was in a rush to get to 60% smaller teams. It would be a significant challenge for the 75,000-strong company, unlike for some small startups with under 100 people.</p><p>My hunch is that Mark Zuckerberg is paranoid about a startup which executes better and that could &#x201c;destroy&#x201d; Meta at some point. After all, this is exactly what Facebook did, back in the day. In 2008, Myspace was the king of social networks and Facebook was only a small player &#x2013; yet three years later, Myspace&#x2019;s usership had collapsed. The Huffington Post <a href="https://www.huffpost.com/entry/how-myspace-fell-apart_n_887853?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">analyzed the collapse</a> (emphasis mine) at the time:</p><blockquote>&#x201c;Just over three years ago, in the spring of 2008, Myspace was top dog. That April, the upstart Facebook grabbed the lead and never looked back. In those three years, Myspace has lost over forty million unique visitors per month, lost both co-founders, laid off the vast majority of its staff and more generally, has diminished to a cluttered afterthought of the power it once was.<br><br>In an interview with Businessweek, former founder Chris DeWolfe blamed Myspace&#x2019;s overenthusiasm and underexecution on the product side for many of the site&#x2019;s problems.<br><br>&#x201c;We tried to create every feature in the world and said, &#x2018;okay, we can do it, why should we let a third party do it?&#x2019;&#x201d; said DeWolfe. &#x201c;We should have picked five to ten key features that we totally focused on and let other people innovate on everything else.&#x201d;<br><br>Instead, Myspace unleashed a slew of products that were buggy and dysfunctional and confusing and alienating to users, and which couldn&#x2019;t keep pace with Facebook&#x2019;s own progress.<br><br><strong>&#x201c;[Myspace failed] to execute the product development,&#x201d;</strong> former Facebook president, Sean Parker, said in a recent interview. &#x201c;<strong>They weren&#x2019;t successful in iterating and evolving the product enough</strong>, it was basically this junk heap of bad design that persisted for many, many years. There was a period of time where, if they had just copied Facebook rapidly, I think they would have been Facebook. The network effects, the scale effects were enormous. There was so much power there.&#x201d;<br><br>Ironically, Myspace&#x2019;s desperate attempts to recoup its former success came in the form of imitating Facebook, a site it&#x2019;d once tried to set itself apart from. It adopted the news feed Facebook had popularized, and neatened up the site itself in a way that also suggested it was taking visual cues from Zuckerberg&#x2019;s page. In November 2010, the site integrated with Facebook Connect, calling it &#x201c;Mashup with Facebook.&#x201d;</blockquote><p>Myspace had twice as many employees as Facebook (around 800 at the time), and grew faster than Facebook in 2003-2007. But Facebook out-executed Myspace by being more nimble and more focused. Zuck&#x2019;s business has seemed to try and be like a startup in its nimbleness of execution since then, not wanting to give anyone the chance to disrupt it like it did to Myspace.</p><p><strong>If so, is Zuckerberg being paranoid about a similar threat to Meta today? </strong>Myspace was far from being the decades-old company that Meta has become! It was only founded six months before Facebook and got more traction in its early years, but fumbled execution as it grew. In contrast, Meta is today the tenth largest publicly traded company by market capitalization in the world, with a &#x24;1.4T valuation.</p><p>Then again, maybe there&#x2019;s cause for Zuckerberg to be paranoid: Anthropic, only five years old, with one twentieth of the workforce Meta has, and might be going public at a <a href="https://www.ft.com/content/840ac156-af1c-4a82-b260-ae791072fcfa?syn-25a6b1a6&amp;ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">close to &#x24;2T valuation</a> as soon as October. Anthropic is not a direct competitor to Meta &#x2013; it&#x2019;s not a social media company &#x2013; but Zuckerberg clearly sees AI companies as a form of competition to Meta&#x2019;s business model. After all, every minute a person spends chatting with an AI chatbot like ChatGPT, they&#x2019;re not spending it on Instagram, Facebook or WhatsApp.</p><p>Maybe this is one reason for the forced reallocation of 20-30% of software engineers to do data labeling and other training tasks on Meta&#x2019;s AI model. To Meta&#x2019;s credit, Muse Spark is a pretty capable model, and while it is behind the likes of GPT-5.6 and Opus 5, it&#x2019;s already ahead of Google&#x2019;s AI models &#x2013; no small feat!</p><h3 id="most-valuable-assets-people-or-gpus"><strong>Most valuable assets: people or GPUs?</strong></h3><p>Let&#x2019;s consider how Zuckerberg might respond if he perceives these things:</p><ul><li>Smaller teams execute better with AI</li><li>These smaller teams can out-execute Meta: like Anthropic has done with AI model development</li><li>There&#x2019;s a danger that Anthropic and OpenAI could do with Meta, like Facebook did with Myspace</li></ul><p>One approach would be to lay off 20-40% of the workforce, but there are consequences:</p><ul><li><strong>Workers reject being treated like &#x201c;cattle&#x201d;. </strong>Meta&#x2019;s &#x201c;Project Organization Transformation&#x201d; assumed that productivity would go up if teams greatly shrank and used AI tools. But would this happen? When people realize 60% of their colleagues were reassigned or let go because of AI, they might look further ahead: will another 60% be laid off at some point for the same reasons? Work could start to resemble the &#x201c;Hunger Games&#x201d;, where people have job security only until the next model release.</li><li><strong>Engineering is officially a cost center, not a profit center. </strong>We previously covered how most tech companies <a href="https://newsletter.pragmaticengineer.com/p/profit-centers-cost-centers?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">treat engineering as a &#x201c;profit center</a>&#x201d; that generates revenue, and is therefore worth investing in. At such companies, engineers are treated well; not just financially, but in how leadership treats them as a key part of the business. At Meta, software engineering became a cost center pretty much overnight!</li><li><strong>Mission, what mission? </strong>People often join a company and stay motivated over time due to a mission they personally believe in. What if next year&#x2019;s mission is to lay off as many people as possible, or to survive future culls? That doesn&#x2019;t seem like a very inspiring mission.</li></ul><p><strong>What makes Meta worth its &#x24;1.4T valuation, anyway? </strong>Meta generates &#x24;228B annual revenue, and &#x24;68B profit (net income). The company is valued 6x its annual revenue and 20x its annual profit because investors bet its revenue and profits will continue to rise. But how does this happen? It&#x2019;s via advertising, innovation, and launching new products.</p><p>How do you promote and enable the innovation which creates the products of tomorrow? &#x201c;AI-pilled&#x201d; folks might look to the technology as it gets more capable. But AI-native companies which can innovate will achieve results faster, putting Meta behind the likes of Anthropic, OpenAI, and SpaceX.</p><p>Or you develop a smaller workforce full of entrepreneurs and innovators, who will invent these new approaches and products. Basically, the best employees need to be motivated to stick around longer term.</p><p><strong>That&#x2019;s the problem with large layoffs; they prompt <em>precisely</em> the best employees to quit to join competitors, or launch their own businesses. </strong>This happened with Meta&#x2019;s previous layoffs, as covered two weeks ago in &#x2018;<a href="https://newsletter.pragmaticengineer.com/p/the-pulse-metas-self-inflicted-resignation?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Meta&#x2019;s self-inflicted resignation wave&#x2019;.</a> When leadership declares the &#x2018;bottom&#x2019; 20-40% of the workforce is redundant, then very few people feel safe, and key members of Meta&#x2019;s engineering organization will get offers from AI labs and Big Tech rivals. This is the &#x201c;resignation wave&#x201d; in action, all started by May&#x2019;s layoffs and forced reassignments.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!dmOz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20578602-8db1-448c-80f9-6d0fb5cff05a_683x560.png" class="kg-image" alt loading="lazy" width="683" height="560"><figcaption><span style="white-space: pre-wrap;">Why it makes sense to start interviewing externally, after large layoffs and even larger forced reassignments</span></figcaption></figure><p>Knowingly or not, Meta creates an internal &#x201c;mercenary&#x201d; culture, where more of the people who stay are in it for the money and little else. Everyone knows they could well be laid off at any time the AI becomes good enough to replace them. People cannot control whether they end up on a list of positions to be cut, so it&#x2019;s sensible to just make as much money as possible while awaiting the seemingly inevitable. <em>That sounds like a pretty miserable place to work.</em></p><p>It could also lead to a situation where the workforce becomes more populated by those with no better options, who are not in demand from other companies.</p><h3 id="do-social-impacts-matter-to-meta"><strong>Do social impacts matter to Meta?</strong></h3><p>A final element of the planned drastic job cuts, as revealed in the Reuters report, that I want to touch on is the potential wider, external impacts. Honestly, I&#x2019;m surprised that none of Meta&#x2019;s leadership seems to have considered this angle.</p><p><strong>By executing massive layoffs for the sake of AI, Meta could have invited more regulation of the emerging AI sector. </strong>Meta is one of the largest tech employers in the US, and the CEOs of Anthropic and OpenAI are on record for predicting mass unemployment, and calling on governmental intervention should it happen. In fairness, other tech companies have also held major AI-related layoffs; Block let go 40% of its workforce, about 4,000 people in February.</p><p>But Meta is not just another tech company: it&#x2019;s the world&#x2019;s leading social media company, and just <a href="https://edition.cnn.com/2026/08/26/tech/meta-states-settle-trial-children?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">lost a major US lawsuit</a> alleging that its platforms harm children and faces an &#x24;18B fine. As a result, it has committed to make its platforms less addictive. If the planned cuts had happened at Meta and all those staff became unemployed, how would it have dealt with complying with the court&#x2019;s ruling to make its products safer for children? Could AI be relied on to deliver this with much less human input?</p><p>In light of the recent legal defeat, it wouldn&#x2019;t be a good look for Zuckerberg&#x2019;s company to blatantly put profits ahead of people by dismissing a load more workers. The combined effect of the two events would create terrible optics. In response, the government could decide that Anthropic&#x2019;s and OpenAI&#x2019;s CEOs were right about the threat to society of mass job losses and roll out things like:</p><ol><li>Stricter employee protection, specifically around AI-related layoffs.</li><li>Higher taxation on profits of companies that &#x201c;replace&#x201d; staff with AI, and channel the revenue to deal with widespread whitecollar unemployment</li><li>Start taxing AI at source whenever tokens are sold, and use the surplus to counter the social ills of unemployment</li></ol><p>Or the government could do nothing and leave it to the market to deal with unemployed whitecollar workers by creating enough new companies to employ highly-skilled software engineers, PMs, designers and other folks.</p><p><strong>Overall, the canceled plan to cut thousands more jobs in this climate just adds to the feeling that there are no adults running Meta. </strong>Since Sheryl Sandberg quit in 2022 as Chief Operating Officer and Zuckerberg&#x2019;s &#x201c;right hand&#x201d;, Meta has acted irrationally, irresponsibly, and unpredictably:</p><ul><li>2022-2023: laying off 25% of staff</li><li>2024-2025: immediately rehired even more people so that 2025&#x2019;s headcount returned to 2022 levels, raising the question of what the point of layoffs even was</li><li>2026: on track to overtake Google as #1 in advertising revenue this year</li><li>May 2026: conducted sudden layoffs and forced reassignments of engineers, while aiming to replace as many devs with AI as possible for no obvious reasons like external pressure or competitive threats.</li></ul><p>I&#x2019;ve long had a generally positive view of Meta&#x2019;s engineering culture, but with the company&#x2019;s leadership seemingly worshiping AI and holding their colleagues in disdain, you have to wonder which software engineer would choose to work at Meta if other options are available. There are many tech companies that value their human software engineers, understand that great teams make for great companies, and that AI is a tool and not a replacement for human energy, motivation, and thoughtfulness. But Meta is clearly not among them.</p><hr><p>Read the full issue of <a href="https://pragmaticengineer.substack.com/p/the-pulse-meta-wanted-to-reduce-teams" rel="noopener noreferrer nofollow"><strong>last week&#x2019;s The Pulse</strong></a><strong>,</strong> or check out <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-tech-companies-move-to?ref=blog.pragmaticengineer.com" rel="noreferrer"><strong>this week&#x2019;s The Pulse</strong></a>. This week&#x2019;s issue covers:</p><ol><li><strong>New trend: tech companies moving to open models.&#xa0;</strong>Uber, Pinterest, Stripe, Coinbase, Ramp, and AT&amp;T are making large savings on their AI bills by dropping proprietary models and using smart model routing.</li><li><strong>Automatic software maintenance experiments by Linear and Anthropic.&#xa0;</strong>Both startups are experimenting with how far they can push AI agents to automatically fix bugs and remove tech debt. It&#x2019;s working better than anyone might&#x2019;ve expected in the recent past, but not producing code that can be merged without review.</li><li><strong>Frontier AI lab wars: OpenAI pulls models from SpaceX / Cursor.&#xa0;</strong>With SpaceX now a frontier model and rival to OpenAI and Anthropic, OpenAI has pulled its GPT models from Cursor. This isn&#x2019;t an option for Anthropic which is dependent on the SpaceX compute they rent to serve Claude.</li><li><strong>HR tech startup&#x2019;s one-dev-per-project approach.&#xa0;</strong>A full-remote HR startup with 70 engineers has a single engineer run each project, and says the approach works well. Will this approach be adopted elsewhere, especially at other full-remote startups?</li><li><strong>Industry Pulse.</strong>&#xa0;Meta moved over to Slack for better agent interoperability, layoffs at Uber and PagerDuty, Anthropic upsets users by calling a rate limit decrease an &#x201c;increase&#x201d;, token usage explodes on OpenRouter, AI drives surging demand for Apple&#x2019;s Mac Mini &amp; Mac Studio, and more.</li></ol>]]></content:encoded></item><item><title><![CDATA[How software engineering is changing: an essay challenge]]></title><description><![CDATA[<p>The pace of change in software engineering is only accelerating, especially since January of this year. This is all to do with the industry-wide adoption of LLMs, AI tooling, and AI infrastructure. At The Pragmatic Engineer, we always want to capture as much of what&#x2019;s going on</p>]]></description><link>https://blog.pragmaticengineer.com/how-software-engineering-is-changing-an-essay-challenge/</link><guid isPermaLink="false">6a96f544dd3e7c0001ccc8b2</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Tue, 01 Sep 2026 16:06:50 GMT</pubDate><content:encoded><![CDATA[<p>The pace of change in software engineering is only accelerating, especially since January of this year. This is all to do with the industry-wide adoption of LLMs, AI tooling, and AI infrastructure. At The Pragmatic Engineer, we always want to capture as much of what&#x2019;s going on as possible at startups, Big Tech, and other businesses, in order to share with subscribers. That&#x2019;s why we&#x2019;re launching an essay competition with a chance to win up to &#x24;10,000, this week!</p><p>Send us up to 10,000 words on how you see things at your startup or tech company, or at a business you&#x2019;re connected with. The best entries will be published in the Pragmatic Engineer and win prizes of &#x24;2,500, plus one grand prize of &#x24;10,000 for the best essay we read.</p><p>The Pragmatic Engineer reports many developments in tech in <a href="https://newsletter.pragmaticengineer.com/s/deepdives?ref=blog.pragmaticengineer.com"><u>our deepdives</u></a>, including how <a href="https://newsletter.pragmaticengineer.com/p/inside-anthropic?ref=blog.pragmaticengineer.com"><u>building software is changing at Anthropic</u></a>, why <a href="https://newsletter.pragmaticengineer.com/p/why-ramp-built-inspect?ref=blog.pragmaticengineer.com"><u>Ramp built its own in-house coding agent</u></a>, how <a href="https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development?ref=blog.pragmaticengineer.com"><u>Uber uses AI for development</u></a>, how <a href="https://newsletter.pragmaticengineer.com/p/how-codex-is-built?ref=blog.pragmaticengineer.com"><u>Codex is built</u></a> and what it could mean for the future of software engineering, and much more. Almost every company we talk with currently says that processes which worked fine for years are suddenly pretty outdated.</p><p>This pace of change makes it hard to cover the full breadth and diversity of tech in one deepdive per week &#x2013; especially right now, when engineers are building and using new and better tools in every part of the software development lifecycle.&#xa0;</p><p><strong>So, we&#x2019;re launching a writing challenge to encourage software builders to share how things on the ground are changing. </strong>We&#x2019;ll share these cutting-edge reports with readers in future editions of the Pragmatic Engineer.</p><p>So, tell us what&#x2019;s new, different, better, and worse in your part of the tech industry since AI entered your workflow!&#xa0;</p><h2 id="what-we%E2%80%99re-looking-for">What we&#x2019;re looking for</h2><ul><li><strong>An essay written for software engineers</strong>: 3,000 &#x2013; 10,000 words on one of these topics:<ul><li>How software engineering is changing at your company, institution, or open source project</li><li>The engineering culture at your company, institution, or Open source project in 2026</li><li>How you build software in your company, institution, or open source project</li><li>Software engineers turning into AI engineers at your company, institution, or open source project. Basically, how the work is changing</li></ul></li><li><strong>First-hand details: </strong>Winning essays will include the authors&#x2019; personal observations and opinions.</li><li><strong>Include details about the team and company: </strong>Including details about the team and company in the spotlight is important and enriches the essay by painting a more complete picture for readers; what engineering practices are changing, what&#x2019;s still the same, what about tooling, and processes? Is there any &#x201c;traditional wisdom&#x201d; that no longer holds true &#x2013; or is still true today? <em>It&#x2019;s not necessary for writers to work at a company/team being written about.</em></li><li><strong>Software engineers and &#x201c;builders&#x201d; only:</strong> We want to hear from folks who build software; meaning that you have built from scratch, pushed to prod, or been paged when your service (or someone else&#x2019;s) caused an outage. Basically, if you do this currently, or did it in the past, then your essay is eligible for entry. <em>You don&#x2019;t have to be a builder right now if you&#x2019;re still close to those who build software.</em></li><li><strong>Individual work.</strong> This competition is specifically for individuals, so articles written collectively by teams are not eligible.<em> Of course, outside of this competition, The Pragmatic Engineer always welcomes articles from teams that want to share interesting developments!</em></li><li><strong>No AI writing allowed. </strong>Writing is thinking, and we are interested in your own thoughts and observations, not a sharp, one-sentence observation turned into three paragraphs of blob text by an LLM. Using AI as a research tool is allowed if you&#x2019;re confident about the accuracy of its output, but all the words must be written by a person.</li><li><strong>Submitted essays must not be available to read elsewhere before 20 October. </strong>The essay has to be purpose-written for this competition and cannot have been published online or in print prior to 20 October 2026 in order to be eligible. <em>After this date, a submitted essay can be published on any company blog, personal blog, or other medium. In fact, I recommend publishing it &#x2013; one goal of this challenge is to increase general awareness of how the industry is changing, covered from different viewpoints.</em></li></ul><h2 id="prizes">Prizes</h2><p>The competition has the following prizes:</p><ul><li><strong>Grand prize: &#x24;10,000</strong> and publication in The Pragmatic Engineer (following editing), and a Pragmatic Engineer surprise package. <em>For winning entries, we reserve the right to make edits for legal, editorial, style, grammar, and punctuation reasons.</em></li><li><strong>Runner-up prize(s): &#x24;2,500 </strong>+ sharing an excerpt in The Pragmatic Engineer + a The Pragmatic Engineer surprise package. Focus of the runner up category includes viewpoints from:<ul><li>Bootstrapped (non-VC-funded) companies</li><li>More &#x201c;traditional&#x201d; companies that not digital-first, or which even predate digitalization</li><li>AI-native startups founded in 2023 or later which have been using AI tools since day one</li><li>Academia, government institutions, and open source projects</li></ul></li></ul><p><strong>For quality deepdives:</strong> We plan to publish a roundup of essays in the future on topics which contain interesting learnings, and that clearly show great effort on the part of authors. These pieces will receive a The Pragmatic Engineer surprise package.</p><h3 id="timeline">Timeline</h3><ul><li><strong>End of day, 4 October, PST:</strong> deadline for all submissions.</li><li><strong>20 October: </strong>decision on the prizes.</li><li><strong>3 November</strong>: expected publication of the Grand Prize winner</li></ul><div class="kg-card kg-button-card kg-align-center"><a href="https://docs.google.com/forms/d/e/1FAIpQLScfETruGfa3OdmXPl6ue4Knblw4x7NtbZpd4q3-wrzbbe-uRQ/viewform?usp=dialog&amp;ref=blog.pragmaticengineer.com" class="kg-btn kg-btn-accent">Submit your essay here</a></div><p></p><h2 id="faq">FAQ</h2><p><strong>Why is AI writing banned from this contest? I want to use AI to write my essay like I do for writing code!&#xa0;</strong></p><p>It&#x2019;s a rule that you cannot include writing in your essay which was generated by AI. As everyone who reads this newsletter likely knows; there is no shortage of ways to detect AI-written text these days! The Pragmatic Newsletter is fully written by humans, and the same applies here. The reason for this hardline stance is that we believe in the value of human thought and experience, as told by people with first-hand knowledge. It&#x2019;s also about the audience: The &#x201c;audience&#x201d; for AI-written code is usually a machine, whereas the writing in Pragmatic Engineer is for humans, by humans. AI produces a statistical average in its output which creates uniform, dull text that&#x2019;s an inferior reading experience to human writing &#x2013; at least today it is.</p><p><strong>What about AI spellcheckers like Grammarly or similar ones? </strong></p><p>These are fine to use, to eliminate those pestering typos. Just make sure they are your words!</p><p><strong>Can the entry be anonymous?</strong></p><p>No, because we only want to receive essays that are stories and observations that are <em>yours</em> to tell. And so we are only looking for entries that make the company/team/project/institution name clear, as well as your own name.</p><p>Of course, writing it with names mentioned could well mean getting permission to talk about your company/team/organization in public, and it also requires more skill to highlight not just the good changes, but the tricky, or not-so-good changes. This is part of the challenge.</p><p>Getting in front of The Pragmatic Engineer readers (and to enter this specific challenge) is not possible as anonymous.</p><p><strong>Can I use images as well?</strong></p><p>Of course! We love images and illustrations.</p><p><strong>Can I publish an essay with the note that it&apos;s pending my company approving publishing it?</strong></p><p>You can, but we treat it as unreviewable until we receive notice that it is approved for us to review. Basically, if the approval comes too late compared to the prize decisions to be announced on 20 Oct, the piece will not be eligible for prizes.</p><p><strong>Can I publish my essay online after writing it?</strong></p><p>In order to be eligible for consideration and prizes, an essay cannot be available to read anywhere online or in print before or after it is submitted to this contest. After 20 October 2026, no publication restrictions apply.</p><p><strong>Can my essay be changed after I send it?</strong></p><p>For spelling, punctuation, grammar, legal, and editorial reasons, the Pragmatic Engineer reserves the right to edit or amend all writing published on this platform.</p>]]></content:encoded></item><item><title><![CDATA[The Pulse: We need to talk about migrations with AI]]></title><description><![CDATA[Asana migrated off testing framework Enzyme in two weeks: without AI, this work would surely have been kicked down the road. Airbnb and Uber share similar stories and AI seems excellent at migrations.]]></description><link>https://blog.pragmaticengineer.com/the-pulse-we-need-to-talk-about-migrations-with-ai/</link><guid isPermaLink="false">6a900f61f1788f0001c466a3</guid><dc:creator><![CDATA[Ivan Klaric]]></dc:creator><pubDate>Thu, 27 Aug 2026 18:04:54 GMT</pubDate><content:encoded><![CDATA[<p><em>Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of four topics from </em><a href="https://pragmaticengineer.substack.com/p/the-pulse-we-need-to-talk-about-migrations" rel="noopener noreferrer nofollow"><em>last week&#x2019;s The Pulse</em></a><em> issue. Full subscribers received the article below seven days ago. If you&#x2019;ve been forwarded this email, you can </em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>subscribe here</em></a><em>.</em></p><p>OpenAI put an impressive-sounding case study about how they helped Asana save &#x24;5.9M with a single migration. From <a href="https://openai.com/index/asana/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">OpenAI</a> (emphasis mine.)</p><blockquote><strong>&#x201c;Asana cleared 5 years of engineering work in 2 weeks with Codex</strong>. Using OpenAI Codex, Asana replaced an outdated testing system in two weeks for about &#x24;12K.<br><br>For this project, Codex helped Asana&#x2019;s engineers remove Enzyme, an outdated testing system that had made the company&#x2019;s code harder to upgrade. Model and infrastructure costs came to about &#x24;12,000, compared with Asana&#x2019;s roughly &#x24;6 million estimate for the previous staffing plan.<br><br>After 1.5 weeks of engineering effort spread across two calendar weeks, Enzyme was fully removed. Model and infrastructure costs totaled about &#x24;12K. For comparison: the previous plan was expected to take at least five years and estimated to cost roughly &#x24;6M. The experience changed which long-running software projects the company believes are practical to take on.&#x201d;</blockquote><p>For context, Asana migrated from Enzyme to React Testing Library, which indeed would not be a simple migration. However, their estimate of four engineers (each on circa &#x24;300K/year, according to OpenAI&#x2019;s arithmetic), spending five years on the project, had me like:</p><figure class="kg-card kg-image-card"><img src="https://substackcdn.com/image/fetch/&#x24;s_!qxa1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F798d1525-1097-40a9-b68e-8ae5dbb6598f_970x666.png" class="kg-image" alt loading="lazy" width="970" height="666"></figure><p>But thinking about this for longer raised the question: what does a migration from Enzyme to React Testing Library even look like?</p><h3 id="enzyme-to-react-testing-library-migration"><strong>Enzyme to React Testing Library migration</strong></h3><p>Let&#x2019;s take a simple test and see how it looks in various testing libraries.</p><p>For our test, we want to verify that a button increments a counter. Here&#x2019;s our button in React:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!h51u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff06b0181-683a-4d84-9202-07f934ddd24e_1096x718.png" class="kg-image" alt loading="lazy" width="1096" height="718"><figcaption><span style="white-space: pre-wrap;">Our button that increments its counter</span></figcaption></figure><p>Now, the test to verify this, in Enzyme:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!l6Y2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ccd8ac-1d7c-40de-9a69-ba767cd39c1a_1166x1038.png" class="kg-image" alt loading="lazy" width="1166" height="1038"><figcaption><span style="white-space: pre-wrap;">The unit test in Enzyme</span></figcaption></figure><p>And let&#x2019;s rewrite this test in React Testing Library:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!ELJG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F552f03c4-627e-452b-95a9-7d118904e12b_1240x990.png" class="kg-image" alt loading="lazy" width="1240" height="990"><figcaption><span style="white-space: pre-wrap;">The unit test in React Testing Library</span></figcaption></figure><p>The two tests do the same, but they have <em>completely</em> different syntax! Let&#x2019;s see just how different they are, with a side-by-side comparison:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!F2AP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ee548b-3558-4123-8d6b-c8524cedd121_1696x1022.png" class="kg-image" alt loading="lazy" width="1456" height="877"><figcaption><span style="white-space: pre-wrap;">Two very different files: the only code in common is the imports</span></figcaption></figure><p>The main reason for this difference is that the two frameworks use a fundamentally different approach to testing. Whereas Enzyme is oriented towards component testing (notice how the test operates on a component instance), the React Testing Library operates on the rendered <a href="https://en.wikipedia.org/wiki/Document_Object_Model?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Document Object Model</a> (a data structure representing the HTML shipped to the client) so the test sees the whole rendered page, not just the component its written for. That&#x2019;s why the testing approach will differ radically between the two frameworks, especially when testing complex user journeys. You can learn more <a href="https://kentcdodds.com/blog/introducing-the-react-testing-library?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">here</a> on the tradeoffs between the two approaches from the React Testing Library author.</p><h3 id="it-took-airbnb-6-weeks-to-migrate-3500-tests-with-ai"><strong>It took Airbnb 6 weeks to migrate 3,500 tests with AI</strong></h3><p>Last year, Airbnb <a href="https://medium.com/airbnb-engineering/accelerating-large-scale-test-migration-with-llms-9565c208023b?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">revealed </a>how they migrated their Enzyme test suite of 3,500 component test files within six weeks with LLMs. The estimate of doing this by hand was 1.5 engineering years. Airbnb did the LLM-aided migration in a multi-phase process:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!lMyB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F368903d9-6c04-4b96-8670-8c8acfb9626f_587x369.png" class="kg-image" alt loading="lazy" width="587" height="369"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Five phases of the migration, for each file. Source: </em></i><a href="https://medium.com/airbnb-engineering/accelerating-large-scale-test-migration-with-llms-9565c208023b?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">Airbnb</em></i></a></figcaption></figure><p>Airbnb&#x2019;s team had to build loops to keep retrying migrations; once they did, 75% of files were migrated in just four hours, and the migrations were straightforward. They then built a more sophisticated refactor pipeline for the remaining 25% of tests; after building the pipeline, the new loop migrated most of the remaining tests (97%) in total, after running over 4 days. The remaining 3% was done with LLM input, with engineers finishing it in a week.</p><p>This was in March 2025, when the frontier coding model was Claude 3.7 Sonnet. Today, models are a lot more capable, such as the likes of GPT-5.6 Sol and Claude Fable 5.</p><h3 id="ai-makes-impractical-migrations-doable"><strong>AI makes impractical migrations doable</strong></h3><p>On the basis that it took Airbnb six weeks, I find it credible that it took Asana two weeks to migrate what is probably a similarly complex test infrastructure from Enzyme to RTL, a year later.</p><p><strong>The time and &#x24;6M cost as quoted by OpenAI feels inflated. </strong>I assume the numbers were based on an estimate that a fulltime engineer could do a maximum of X tests migrated per day, where X was between 5 and 10. Then, calculate the number of engineering years this takes (perhaps 20 engineering years), and multiply by the cost of an engineer. You estimate a project like this when it&#x2019;s an undesirable project you <em>really</em> don&#x2019;t want to do as an engineer!</p><p>So, looking at it from this point of view: does it matter if the estimate was 1.5 years (Airbnb) or half a decade (Asana, hypothetically)? Or if the estimated cost was &#x24;1M or &#x24;5M? It would still be an <em>impractical</em> migration and a foolish endeavor: too long and distracting, at least, in the &#x201c;traditional&#x201d; way!</p><p><strong>Pre-AI, years-long migrations were rare. </strong>In 2021, Sentry took 1.5 years to convert their frontend codebase from JavaScript to TypeScript. That was a migration of 1,100 files and 95,000 lines of code! Around 10 engineers worked on the migration, so if we assume a &#x24;300K-per-engineer cost, that&#x2019;s a &#x24;2&#x2013;4M cost for circa 95,000 lines of code.</p><p><strong>Indeed, Asana&#x2019;s reported &#x24;12,000 migration cost could actually cost even less if there was ruthless focus on cost optimization. </strong>What about using a model that&#x2019;s 10x cheaper than OpenAI, like an open model running on inference providers? After all, why use the most expensive model, especially if a company already owns GPUs, running models, making inference practically free (except for power costs, that is.) For a first run, &#x24;12,000 would be affordable for a company paying &#x24;300K for engineers. But for subsequent runs, I&#x2019;d wager it&#x2019;s worth spending time optimizing the cost, and saving &#x24;10K per migration (or more!)</p><h3 id="a-few-more-details-from-inside-asana">A few more details from inside Asana</h3><p>I managed to catch up with <a href="https://www.linkedin.com/in/dan-ubilla/?ref=blog.pragmaticengineer.com"><u>Dan Ubilla</u></a> at Asana, who leads the Developer Productivity group at the company. He helpfully clarified a few things about the <a href="https://asana.com/inside-asana/migrating-off-enzyme-2-weeks?ref=blog.pragmaticengineer.com"><u>Enzyme migration post</u></a> on the Asana site:</p><ul><li><strong>Asana started the Enzyme migration in 2024. </strong>The team had 4,000+ Enzyme files to migrate, and they took a first stab at the migration with LLMs, at the time. Beyond migrating existing tests, much of this phase focused on getting the codebase into a state where future tests could be written more idiomatically. This included improving mocking, data set up, and coverage instrumentation. They finished migrating about 25% of the files to RTL, choosing the tests that had the highest return on investment: meaning easiest to migrate, or most frequently updated ones.</li><li><strong>The remainder of the migration became low priority. </strong>Asana prioritized migrations as critical (&#x201c;must do soon&#x201d;), important (&#x201c;important to do soon&#x201d;), and opportunistic (&#x201c;nice to have&#x201d;). The company has a good number of critical and important migrations, and the remainder of the Enzyme migration sat as one of the many opportunistic.</li><li><strong>Five years was about when the migration was <em>projected</em> to finish. </strong>The effort was not about &#x201c;a team working for five years, nonstop on the project&#x201d; &#x2013; not at all! It was about the timeframe that the opportunistic Enzyme migration would have been completed, given its priority, and done, realistically. Given this migration was going on for two years, the five-year estimate was a rational one.</li><li><strong>The team wanted to prove that LLMs drastically speed up migrations, and demonstrated it with an opportunistic , low-priority one. </strong>The Enzyme migration was not all that important to do quickly, and would have sat around for years. So it was the perfect candidate to prove that with LLMs, long migrations can be sped up!</li></ul><p>And finally, one addition from my end:</p><p><strong>The &#x24;6M cost was a back-of-the envelope estimation. </strong>I asked Dan how this estimate of the migration costing &#x24;6M came together. Dan confirmed that the estimation was done the same way as most of us do these estimations:</p><ul><li>Estimate how long it takes an engineer to manually migrate a single Enzyme file (including rewrite + validation). Be generous with this estimation</li><li>Multiply it by the outstanding files to migrate (the 3,000+ ones)</li><li>Add in the time to remove any traces of the framework, monitoring, static analysis tools</li><li>Multiply by the hourly rate of a typical engineer</li><li>&#x2026; and the number came out to &#x24;6M</li></ul><p>This estimation does not take into account that migrating even ten files by hand takes less than ten times more than it takes to migrate one file (you become more efficient), nor does it assume LLM usage. It&#x2019;s a baseline to get a sense of how the work would have been done, pre-AI, if distributed across all Asan engineers to pick up, and migrate few files, whenever they have time. <em>My take is that this number is probably an overestimation, but the point is less about the number, and more to convey that this is a lot of work!</em></p><p>Internally, Asana&#x2019;s team and leadership are now convinced about the usefulness of LLMs for migrations, and they&#x2019;ll be using them for other, long-running, otherwise soul-sucking migrations.</p><h3 id="expect-long-avoided-migrations-to-finally-happen"><strong>Expect long-avoided migrations to finally happen</strong></h3><p>A few months ago, Uber <a href="https://www.uber.com/gb/en/blog/junit-migration/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">shared</a> that they executed a massive JUnit migration in four months with two engineers and AI: moving 600,000 unit tests spanning 15 million lines of code (!!) by moving from the unsupported JUnit 4 to JUnit 5. During the migration, 1.25M lines of code were modified. This type of migration used to be impractical; with AI tools, it took eight engineering months of effort, plus AI costs.</p><p>And there&#x2019;s the <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-what-can-we-learn-from?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Bun migration</a> (530,000 lines of code from Zig to Rust in two weeks for a &#x24;165K API cost) as another example of drastically faster migrations with AI.</p><p><strong>The best part about rapid, AI-assisted migrations is not needing to worry about supporting &#x201c;old&#x201d; libraries. </strong>One of the main reasons library migrations have been such a pain was the need to keep supporting the old library or technology during the migration. Shortening this window could well be worth the additional cost, at least until we figure out how to drastically reduce the time and cost of these migrations, as well.</p><p>The shared characteristic of all of the above migrations is that engineers needed to plan for it, design verification loops, and be involved throughout. I always dreaded migrations, so I see it as good news that we have a new tool to use for &#x201c;grunt work&#x201d; like this.</p><hr><p>Read the full issue of <a href="https://pragmaticengineer.substack.com/p/the-pulse-we-need-to-talk-about-migrations" rel="noopener noreferrer nofollow"><strong>last week&#x2019;s The Pulse</strong></a><strong>,</strong> or check out <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-meta-wanted-to-reduce-teams?ref=blog.pragmaticengineer.com" rel="noreferrer"><strong>this week&#x2019;s The Pulse</strong></a>. This week&#x2019;s issue covers:</p><ol><li><strong>Did Meta really decide to reduce team sizes by 60% because of AI?&#xa0;</strong>An in-depth report by Reuters details how Meta&#x2019;s leadership decided to slash team sizes by 60%, hatching plans in January to execute the social media giant&#x2019;s largest-ever layoffs. But Mark Zuckerberg changed his mind at the last second, and now the company is stuck with all-time low morale, a wave of resignations, and its prized culture turning mercenary. Analysis.</li><li><strong>More thoughts on Ramp&#x2019;s in-house AI infra.&#xa0;</strong>Building AI tools in-house is akin to an &#x201c;internal bootcamp&#x201d; for AI engineering, which probably justifies the exercise at most tech companies.</li><li><strong>Industry Pulse.&#xa0;</strong>GitHub&#x2019;s load increase is speeding up, Stripe acquires OpenRouter, Ramp launches Ramp Router in public, a career &#x201c;double boomerang&#x201d;, App Store revenue drops for the first time ever at Apple &#x2013; and what is a bug?</li></ol>]]></content:encoded></item><item><title><![CDATA[Why you're not getting a response to your podcast pitch from me (or others)]]></title><description><![CDATA[<p><em>This email is a response to the 50+ podcast pitches that arrived in my inbox just last month, and keep arriving in growing numbers, from PR agencies and marketing teams at various companies. It&apos;s also a message to tech founders building stuff for developers: focus on building something</em></p>]]></description><link>https://blog.pragmaticengineer.com/why-youre-not-getting-a-response-to-your-podcast-pitch-from-me-or-others/</link><guid isPermaLink="false">6a900187f1788f0001c465cd</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Thu, 27 Aug 2026 09:59:13 GMT</pubDate><content:encoded><![CDATA[<p><em>This email is a response to the 50+ podcast pitches that arrived in my inbox just last month, and keep arriving in growing numbers, from PR agencies and marketing teams at various companies. It&apos;s also a message to tech founders building stuff for developers: focus on building something that devs love, or find epic, and not hiring marketing/PR folks who then mass-email podcast hosts with AI-generated podcast pitches.</em></p><p>I host <a href="https://pragmaticpodcast.com/?ref=blog.pragmaticengineer.com" rel="noreferrer">The Pragmatic Engineer Podcast</a>. Thanks to so many of you tuning in, the podcast is widely listened to &#x2013; it&apos;s one of the <a href="https://podcasts.apple.com/us/charts?genre=1318&amp;ref=blog.pragmaticengineer.com" rel="noreferrer">top-ranked</a> software engineering podcasts, and episodes <a href="https://blog.pragmaticengineer.com/podcast-sponsorship/" rel="noreferrer">typically reach</a> 500K+ people. <em>If you&apos;re listening to the podcast, or reading the newsletter: thank you!</em></p><p>The podcast only has guests who, as as a software engineer, I&apos;m excited to talk to and learn from. These folks typically fall into one of these categories:</p><ul><li><strong>Built/builds epic pieces of technology.</strong> Examples include <a href="https://newsletter.pragmaticengineer.com/p/from-swift-to-mojo-and-high-performance?ref=blog.pragmaticengineer.com" rel="noreferrer">Chris Lattner</a> (built LLVM, Swift, Mojo), <a href="https://newsletter.pragmaticengineer.com/p/typescript-c-and-turbo-pascal-with?ref=blog.pragmaticengineer.com" rel="noreferrer">Anders Heljsberg</a> (created C#, TypeScript, TurboPascal), <a href="https://newsletter.pragmaticengineer.com/p/the-programming-language-after-kotlin?ref=blog.pragmaticengineer.com" rel="noreferrer">Andrey Breslav</a> (created Kotlin), <a href="https://newsletter.pragmaticengineer.com/p/how-linux-is-built-with-greg-kroah?ref=blog.pragmaticengineer.com" rel="noreferrer">Greg KH</a> (longtime Linux maintainer), <a href="https://newsletter.pragmaticengineer.com/p/how-kubernetes-is-built-with-kat?ref=blog.pragmaticengineer.com" rel="noreferrer">Kat Cosgrove</a> (longtime Kubernetes release lead), <a href="https://newsletter.pragmaticengineer.com/p/mitchell-hashimoto?ref=blog.pragmaticengineer.com" rel="noreferrer">Mitchell Hashimoto</a> (Terraform, Ghostty).</li><li><strong>Works at a company I find very interesting and relevant. </strong>Examples include <a href="https://newsletter.pragmaticengineer.com/p/building-claude-code-with-boris-cherny?ref=blog.pragmaticengineer.com" rel="noreferrer">Boris Cherny</a> at Anthropic (created Claude Code), <a href="https://newsletter.pragmaticengineer.com/p/netflix?ref=blog.pragmaticengineer.com" rel="noreferrer">Elizabeth Stone</a> (CTO at Netflix: a company whose engineering culture I&apos;ve been fascinated with), or <a href="https://newsletter.pragmaticengineer.com/p/how-aws-s3-is-built?ref=blog.pragmaticengineer.com" rel="noreferrer">Mai-Lan Tomsen Bukovec</a> (leads S3 at AWS)</li><li><strong>Is a deep domain expert </strong>- typically with a decade+ of experience.<strong> </strong>For example, <a href="https://newsletter.pragmaticengineer.com/p/developer-productivity-with-dr-nicole?ref=blog.pragmaticengineer.com" rel="noreferrer">Nicole Forsgren</a> (developer productivity, DORA, SPACE), <a href="https://newsletter.pragmaticengineer.com/p/measuring-the-impact-of-ai-on-software?ref=blog.pragmaticengineer.com" rel="noreferrer">Laura Tacho</a> (DX),  <a href="https://newsletter.pragmaticengineer.com/p/why-rust-is-different-with-alice?ref=blog.pragmaticengineer.com" rel="noreferrer">Alice Ryhl</a> (Rust), <a href="https://newsletter.pragmaticengineer.com/p/cicd-with-robert-erez?ref=blog.pragmaticengineer.com" rel="noreferrer">Robert Erez</a> (CI/CD)</li><li><strong>Deep thinkers with a decade+ of experience. </strong>For example, <a href="https://newsletter.pragmaticengineer.com/p/kubernetes-and-retiring-at-the-top?ref=blog.pragmaticengineer.com" rel="noreferrer">Kelsey Hightower</a>, <a href="https://newsletter.pragmaticengineer.com/p/software-architecture-with-grady-booch?ref=blog.pragmaticengineer.com" rel="noreferrer">Grady Booch</a>, or <a href="https://newsletter.pragmaticengineer.com/p/stop-being-skeptical-about-ai-for?ref=blog.pragmaticengineer.com" rel="noreferrer">Charity Majors</a>.</li></ul><p>As the podcast has become more popular, I am getting overloaded with pitches from PR people, Comms people, and Marketing people, though. The typical pitch is usually AI-written, and goes something like this:</p><blockquote>From &lt;CommsPerson@Startup.com&gt;<br><br>Hi Gergely,<br><br>I have a potential guest and topic that feels unusually aligned with The Pragmatic Engineer&#x2019;s audience.<br><br>X is the co-founder and CEO of Startup, which now serves ## million developers and ## thousand companies. The platform processes {large number of business metrics} every day, giving CEO a large-scale view into how engineering ability and team expectations are changing as AI-generated code becomes standard.<br><br>The useful conversation would not be a Startup product story. It would examine questions engineering leaders are actively dealing with:<br><br>- AI-generated topic #1 assumed to be a fit for the podcast<br>- AI-generated topic #2<br>- AI-generated topic #3 <br><br>CEO has built Startup from its earliest days in Location all the way to global enterprise scale. He/she can bring both operating experience and concrete data instead of generic AI predictions.<br><br>Would this be worth exploring for the podcast?<br><br>Best,<br><br>MarketingPerson<br>Startup</blockquote><p>I get 10-20 of these pitches, per week, in my inbox. Until now, I&apos;ve been ignoring them, but then MarketingPerson sends two more follow-ups. I now have an AI agent monitoring my inbox, and I decided to at least send an AI reply to explain why I&apos;m not sending a response to these pitches. </p><p>If you look at how my podcast works, it should be obvious to why such guest requests are not a good fit - and why having founders wanting to talk about their own startup would be a bore of a topic, and, frankly, a waste of time for 99% of listeners &#x2013; possibly more.</p><p>But to spell it out to the marketing folks:</p><p><strong>A) Send out AI emails: expect nothing back.</strong> Don&apos;t expect a response to an AI-written email, or a templated email. I get it, you <em>think</em> it&apos;s a numbers game: send a tweaked email out to 100 podcasts, and hope that at least one replies. In reality, by playing the same game as everyone else does, you are assisting to the noise, and end up drowning yourself in it as well.</p><p>And this goes not only to you, as a marketing person, but also to a founder/CEO who thinks they can put in zero effort in A Thing and get great results: you&apos;re kidding yourself. <em>To those founders who have set themselves the goal of being invited onto a specific podcast: I&apos;d challenge you, ask a former guest, how they got invited? I can already tell you that it sure wasn&apos;t an AI-generated email sent out by a marketing person they hired!</em></p><p><strong>B) My podcast doesn&apos;t take self-pitches. </strong>The only type of pitch I listen to is a software engineer telling me &quot;wow it could be great to have this and this person on the podcast, because of this thing they built/thing they did.&quot; In these cases, I check out that thing they built or thing they did. When a lot of people tell me the same thing, I might listen more.</p><p>But a CEO recommending themselves as a podcast guest? Or their marketing or PR team recommending the same? <em>Ignore</em>. </p><p>But to leave these marketing folks with some advice:</p><p><strong>If your CEO/founder has so much to say about a topic: say it and write it! </strong>Ironically, every time I look up what the founder has written about the topic they (or their marketing team) are pitching, there&apos;s nothing! Nada.</p><p>If the pitch is sincere, then write down your thoughts! Post it on your company blog or personal blog.</p><p>But if you&apos;re just looking for &quot;distribution&quot;, &quot;free publicity&quot;, mass emailing podcasts is not how to go about it. Everyone is doing it, and it&apos;s not working for anyone.</p><p>The only founders you see on podcasts who are worth listening to? They built some epic stuff, are often hands-on, and they did not mass-email dozens or hundreds of podcasts with an AI-generated, generic agenda to talk about.</p><p></p>]]></content:encoded></item><item><title><![CDATA[The Pulse: Meta’s self-inflicted resignation-wave]]></title><description><![CDATA[In what was predictable: Meta’s layoffs and forced reassignments pushed engineers not impacted by either to look for a new job. Meta is now offering large equity retainers, and it doesn’t seem working]]></description><link>https://blog.pragmaticengineer.com/the-pulse-metas-self-inflicted-resignation-wave/</link><guid isPermaLink="false">6a87427404189e00018c442c</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Thu, 20 Aug 2026 18:08:45 GMT</pubDate><content:encoded><![CDATA[<p><em>Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of four topics from </em><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-metas-self-inflicted-resignation?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>last week&#x2019;s The Pulse</em></a><em> issue. Full subscribers received the article below seven days ago. If you&#x2019;ve been forwarded this email, you can</em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em> subscribe here</em></a><em>.</em></p><p>Two months ago, I <a href="https://newsletter.pragmaticengineer.com/p/why-is-meta-destroying-its-engineering?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">covered</a> how Meta seemingly deliberately started destroying its once-standout engineering organization. The company did 10% layoffs at a time when revenue and profits hit an all-time high, and reassigned about 20-30% of software engineers to data labeling with basically no notice.</p><p>The result was that a good chunk of software engineers at Meta &#x2013; even those not reassigned &#x2013; were starting to interview elsewhere:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/image-6.png" class="kg-image" alt loading="lazy" width="1456" height="983" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/08/image-6.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/08/image-6.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/image-6.png 1456w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Why so many engineers at Meta are looking for a way out, visualized. Source: </em></i><a href="https://newsletter.pragmaticengineer.com/p/why-is-meta-destroying-its-engineering?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">Why is Meta destroying its engineering organization?</em></i></a></figcaption></figure><p>I said &#x2013; and still maintain &#x2013; that the layoffs were an unforced, self-inflicted error on Meta&#x2019;s part. Coupled with forced reassignment, they struck disaster. And I&#x2019;ve now gathered new details that confirm that Meta is bleeding top engineering and product management talent:</p><h3 id="some-layoffs-reversed-in-the-11th-hour">Some layoffs reversed, in the 11th hour</h3><p>In the UK, mass layoffs require a notification to those <em>potentially</em> affected, before the cuts can happen. A few weeks after this notification, a good chunk of folks were &#x201c;un-notified,&#x201d; I confirmed. But those on notice had already started to look for jobs, obviously.</p><h3 id="retainer-equity-grants-offered-to-ic6-engineers-resigning">Retainer equity grants offered to IC6+ engineers resigning</h3><p>Meta started to offer large retainer equity grants to those resigning and leaving for Google, Anthropic, and OpenAI: a practice not done before. Talking with long-time Meta engineers, Meta simply didn&#x2019;t make counteroffers or negotiate when an engineer handed in their resignation. But this practice has been abandoned. Here&#x2019;s a story of a senior, long-tenured engineer I confirmed to have happened:</p><ul><li>This dev was force-reassigned to one of the AI data labeling teams</li><li>They thought &#x201c;oh no, this is not what I want to do&#x201d; and started to interview</li><li>Got a Google offer, but compensation was below their current one. Google basically lowballed them.</li><li>Decided to leave anyway. Told their new manager they were resigning.</li><li>New manager asked for some time, then presented a large, one-off, retainer equity grant, vesting over 3 years</li><li>The engineer went back to Google, telling the company, unfortunately, they are a key engineer and showed them the retainer amount Meta is paying for them to stay</li><li>Google upped their offer, out-bidding Meta&#x2019;s retainer offer</li><li>The engineer who was desperate to leave &#x2013; even for lower compensation! &#x2013; was thrilled, and happily left for Google.</li></ul><p><strong>Retainer equity seems to be offered for most IC6 engineers who resigned in the last few weeks. </strong>I talked with seven such people, who were all IC6 (staff-level engineer) and IC7 (principal-level engineers), who shared more details. They are not aware of IC4 (mid-level engineer) or IC5 (senior-level engineers) getting such offers.</p><p><strong>Retainer equity offered is &#x24;400K to &#x24;1M+</strong>, and vests over 3 years, for the folks who got these offers. The &#x24;1M+ offers were all for engineers with Anthropic or OpenAI offers, and I confirmed a &#x24;400K and a &#x24;600K grant for engineers with an offer for other, smaller AI startups.</p><p>A current Meta engineer who is interviewing asked me if these folks needed to present their offer letter to get a counteroffer. I asked two of these folks with counteroffers, and neither had to do so, but they both indicated they were handing in their resignation. Upon receiving this notification, their director, together with HR, offered a discretionary retainer equity, should they stay.</p><h3 id="anthropic-and-openai-on-a-hiring-spree-from-meta">Anthropic and OpenAI on a hiring spree from Meta</h3><p>Anthropic and OpenAI seem to be on a hiring spree, signing Meta engineers that Meta wants to retain now that it is too late! I have confirmed that three engineers who received an offer from Anthropic were also offered large, &#x24;1M+ equity grants (vesting over 4 years) as counter-offers to stay. Two out of the three rejected it and joined Anthropic, and the third one initially accepted the offer and then still left for Anthropic a month later, forfeiting this grant.</p><p>OpenAI is having similar success, and the two AI labs seem to be the main destination for now ex-Meta engineers to bounce to. It makes sense: these companies can match Meta&#x2019;s total compensation, and although neither OpenAI nor Anthropic is publicly traded, both companies organize secondary equity sales, and their respective IPOs are likely to happen in 3-12 months&#x2019; time.</p><h3 id="ai-startups-also-successful-in-hiring-infra-experts-from-meta">AI startups also successful in hiring infra experts from Meta</h3><p>I had an in-depth discussion with another long-tenured AI infra engineer at Meta, who was considering whether to stay, or to go. This person wrote up their situation, and shared it with me, writing:</p><blockquote>&#x201c;With the current situation at Meta (layoffs, forced drafting to do AI work, general sense of disruption at work, low moarale, and almost zero productivity across teams, plus multiple reorgs) I started to look around, on the market, a few weeks before the 20 May layoffs. I figured I have a 50% chance of being let go.<br><br>I did not get laid off, but I got offers from startups, and one from a high-growth AI startup I like, and also an offer from Google.<br><br>Now, the pros to staying a Meta:Context, relationshipsScale that few others haveBig Tech perks, relatively &#x201c;chill&#x201d; WLB in terms of oncallHigh TC<br><br>The cons:Terrible morale, hard to &#x201c;move&#x201d; work through mostly unmotivated teams all around meRe-orgs continue, I have very low confidence in middle management (Directors, VPs) to navigate this churnFurther layoffs are likely: it&#x2019;s clear that there&#x2019;s more bloat, surely Zuck will do another round in 2027. And no one is safe during a layoff<strong>A &#x2018;doom loop&#x2019; for anyone who stays</strong>: low morale &#x2192; unmoitivated bith highly compensated engineers &#x2192; a bloated organization that moves slow&#x201d;</blockquote><p>After a new reorg, this engineer got a supportive manager, who made it clear they would help them thrive inside of Meta. So the engineer rejected both the AI startup&#x2019;s offer and that of Google, deciding to stay&#x2026; but only for a month!</p><p>The AI startup&#x2019;s founder spent more time with this engineer, increased the equity in the package significantly, and convinced this engineer that at the startup they <em>matter </em>as a person, while at Meta they would be doing soulless work, worrying about the next layoff, probably early 2027.</p><p>So this engineer also handed in their resignation. And it all started with the layoffs: the engineer assumed there was a 50% chance of being let go and wanted more career stability!</p><h3 id="those-deciding-to-not-resign-stay-for-the-money">Those deciding to not resign: stay for the money?</h3><p>There are engineers staying &#x2013; at least until the end of the year, to wait for the stock refershers &#x2014; which we&#x2019;ll talk about in just a moment.</p><p>Another engineer I talked to decided to quit Meta with morale so low, and start his own thing. Management convinced him to stay until the end of the year, hinting at large equity refreshers being handed out around January, which could be in the &#x24;1M+ range for this specific engineer.</p><h3 id="the-2022-stock-price-causing-a-tc-decrease-for-many">The 2022 stock price causing a TC decrease for many?</h3><p>One reason there&#x2019;s speculation about large equity refreshers being handed out at the end of the year is that Meta&#x2019;s stock price was very low in 2022 and 2023, when equity refreshers and new hire grants were handed out. In both March 2022 and March 2023, the stock price was around &#x24;200 - which is about a third of this year&#x2019;s stock price (which has been fluctuating between &#x24;520- 680, currently sitting at &#x24;540.) By March 2024, the stock price rose to &#x24;500, and then to &#x24;580 in March 2025.</p><p>Because of this, those who joined Meta in 2022 have seen their equity grants nearly triple, and the 2023 equity is worth nearly 3x as well. But for these lucky folks, total compensation is set to drop by the end of this year, and their equity refresher would need to be higher than in past years to avoid a compensation drop.</p><p>Inside of Meta, engineers who I talked to are split between expecting further attrition (those leaving whose total compensation drops steeply) and those who think that there will be more attrition unless there are higher-than-usual equity refreshers.</p><h3 id="a-%E2%80%9Cmercenary%E2%80%9D-culture-at-meta">A &#x201c;mercenary&#x201d; culture at Meta?</h3><p>I wonder if Meta made a massive mistake by treating engineers as &#x201c;commodities&#x201d; and turning their culture into a &#x201c;mercenary&#x201d; one. Between March and June, Meta treated engineers as replaceable commodities that could be thrown out or moved between teams, while stripping them of any autonomy. The reassignments to AI labeling were not explained, nor were managers or individuals asked about preferences: from above, someone said that <em>Alice</em> and <em>Bob</em>, starting on Monday, are no longer with the team, but are training up Meta AI. Never mind that these were the two most experienced engineers on the team, or that <em>Bob</em> was the team&#x2019;s infra expert, and <em>Alice</em> the &#x201c;fixer&#x201d; engineer on the team.</p><p>And all this damage was done, for what? It was to allow Meta to restart its AI coding model development efforts, and release <a href="https://ai.meta.com/blog/introducing-muse-spark-msl/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Meta Muse Spark</a>: an AI model that is currently the <a href="https://artificialanalysis.ai/articles/muse-spark-1-2?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">7th most capable</a> AI model as per Artificial Intelligence Analysis, tied with Grok 4.5. Credit where it&#x2019;s due: with this model, Meta is now well ahead of Google&#x2019;s Gemini in capability.</p><p>With the damage done, there is little motivation for anyone to stay at Meta &#x2013; unless they are on a visa, or if it&#x2019;s about the money. You can have an OK engineering culture with a team who is mostly interested in making more money than what they would elsewhere: but this is more of a mercenary culture, and companies run by mercenaries are more easily out-executed by teams where people believe in the mission of the company.</p><p><strong>If you work at a company that would love to hire from Meta: now is (still) your opening!</strong> So go for it.</p><p>And if you&#x2019;re at Meta: you are <em>so</em> in-demand, outside of the company, at places where engineering is still treated as a profit center. As Ryan Nystrom, currently building AI at Notion, <a href="https://x.com/ryannystrom/status/2087877824615010811?s=20&amp;ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">put it:</a></p><blockquote>&#x201c;Meta friends: the industry is exhilarating right now. Get out. Go build something. The handcuffs are an illusion.<br><br>I&#x2019;m having the time of my life at Notion. Come, and have fun again.&#x201d;</blockquote><p>Read the full issue of <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-metas-self-inflicted-resignation?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><strong>last week&#x2019;s The Pulse</strong></a><strong>,</strong> or check out <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-we-need-to-talk-about-migrations?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><strong>this week&#x2019;s The Pulse</strong></a>. This week&#x2019;s issue covers:</p><ol><li><strong>More on the &#x201c;great engineering leader career break.&#x201d; </strong>The industry is changing fast, and the VPE and CTO roles also need to adapt. And don&#x2019;t forget that these are the roles from which you can drive change that reorganizes engineering in ways that work better.</li><li><strong>We need to talk about migrations with AI. </strong>Asana needed to migrate off testing framework Enzyme, but it meant doing a massive rewrite of test cases. With AI, the project was completed in two weeks: without AI, this work would surely have been kicked down the road. Airbnb and Uber share similar stories, and AI seems like a superb fit for framework migrations.</li><li><strong>Are AI startups making the Gartner Magic Quadrant irrelevant?</strong> Gartner ranked AWS, Microsoft and IBM above Anthropic, Cursor and OpenAI in their &#x201c;AI code modernization tools&#x201d; ranking. This is most likely because the first three pay large sums of money to Gartner, but AI labs and vendors refuse to pay this &#x201c;Gartner tax.&#x201d;</li><li><strong>Industry Pulse.</strong> Another hours-long GitHub outage, GitHub alternatives are here and fighting for market share, Slack launches Slack Code, text generated by Claude to be watermarked, and Uber open sources SubmitQueue.</li></ol><p><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-we-need-to-talk-about-migrations?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Read the full The Pulse.</a></p>]]></content:encoded></item><item><title><![CDATA[The Pulse: Grok’s CLI caught uploading all your local files to the cloud]]></title><description><![CDATA[Devs discover that Grok CLI pushed all local files, .env files and git history have been pushed to a GCP bucket, unencrypted. SpaceX’s initial reaction? Blame the devs]]></description><link>https://blog.pragmaticengineer.com/grolk-cli-uploaded-all-your-files-to-the-cloud/</link><guid isPermaLink="false">6a85ba5c1b8a5e00015742b1</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Wed, 19 Aug 2026 14:21:33 GMT</pubDate><media:content url="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/aa1de119-a4fd-4a85-b20a-bdc73c9db948_1182x842.webp" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/aa1de119-a4fd-4a85-b20a-bdc73c9db948_1182x842.webp" alt="The Pulse: Grok&#x2019;s CLI caught uploading all your local files to the cloud"><p><em>Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of four topics from </em><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-groks-cli-caught-uploading?ref=blog.pragmaticengineer.com" rel="noreferrer"><em><u>a previous The Pulse</u></em></a><em> issue. Full subscribers received the article below four weeks ago. If you&#x2019;ve been forwarded this email, you can</em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com"><em> <u>subscribe here</u></em></a><em>.</em></p><p>Last week, xAI (Elon Musk&#x2019;s AI company, now part of SpaceX) released the Grok 4.5 model, built by Cursor (an acquisition), trained on SpaceX GPUs, and branded &#x201c;Grok.&#x201d; It&#x2019;s a pretty good model; benchmarking as close in coding capability to Opus 4.8 and GPT 5.5 &#x2013; while being 60-70% lower cost.</p><p>Grok 4.5 can be used via API, but is easiest used via the Grok Build coding CLI. So, that&#x2019;s what many devs did. Some of them have noticed something&#xa0;<em>really</em>&#xa0;weird: the CLI is uploading all their local files in their working directories! Here&#x2019;s an independent AI safety researcher known as &#x2018;Cerblab&#x2019;&#xa0;<a href="https://gist.github.com/cereblab/dc9a40bc26120f4540e4e09b75ffb547?ref=blog.pragmaticengineer.com"><u>documenting what is happening</u></a>&#xa0;(emphasis mine):</p><blockquote>&#x201c;xAI&#x2019;s official Grok Build coding CLI (grok), on a normal consumer login, does three things worth documenting precisely:<strong>It transmits the contents of files it reads &#x2014; including a .env secrets file &#x2014; to xAI, verbatim and unredacted</strong>. The secret appears in two channels: the live model turn (POST /v1/responses) and a session_state archive uploaded and accepted (HTTP 200) via POST /v1/storage &#x2014; the endpoint the binary routes to the grok-code-session-traces GCS bucket (see section 5).<strong>It uploads the whole repository &#x2014; every tracked file&#x2019;s content plus git history &#x2014; independent of what the agent reads.&#xa0;</strong>Grok packages the workspace and uploads it via POST /v1/storage. Proven directly: on a real codebase, with the prompt &#x201c;reply OK, do not read any files&#x201d;, Grok uploaded the entire repo as a git bundle (POST /v1/storage &#x2192; 200); git cloning the captured bundle recovers a file the agent was told not to open &#x2014; src/_probe/never_read_canary.txt &#x2014; with its unique marker verbatim, plus the full git history (appendix uploaded_repo.bundle). And it scales: on a 12 GB repo of never-read random files, /v1/storage moved 5.10 GiB, all HTTP 200 (truncated mid-stream), while the model-turn channel moved just 192 KB &#x2014; a ~27,800&#xd7; ratio that pins the upload to the codebase, not to what was read. No storage upload failed; the only non-200s were a model-usage quota (402/429) on /v1/responses and one unrelated 404 &#x2014; not a storage size cap.<strong>The storage destination is a Google Cloud Storage bucket, grok-code-session-traces</strong>&#xa0;(not AWS S3) &#x2014; named verbatim in the binary and in a captured metadata.json (gs://grok-code-session-traces/&#x2026;). I did not find this mechanism surfaced in the CLI&#x2019;s install/quickstart materials (not an exhaustive docs audit &#x2014; &#xa7;7), it is active by default, and disabling &#x201c;Improve the model&#x201d; does not turn it off (/v1/settings still returned trace_upload_enabled: true; &#xa7;6).<br><br>None of this proves xAI trains on the data &#x2014; that is a policy question addressed in [section] 6. What is proven is transmission, acceptance, and storage.&#x201d;</blockquote><p>There&#x2019;s so much wrong with this approach! To name a few:</p><ul><li><strong>Sending your codebase over the context window is not normal.&#xa0;</strong>All AI agents send over their context window to the server that runs the LLM. That&#x2019;s where tokenization happens and the context is appended to the session. This means that other AI agents send over some part of the code that they read in their context window.</li><li><strong>No need to send over the source code to index it.&#xa0;</strong>Indexing the codebase is important for efficient code lookup, and we&#xa0;<a href="https://newsletter.pragmaticengineer.com/p/cursor?ref=blog.pragmaticengineer.com"><u>covered how Cursor does this in a privacy-conscious way</u></a>&#xa0;by indexing a user&#x2019;s codebase locally, creating embeddings, and sending those embeddings to the server. Cursor&#x2019;s server does not store any of the user&#x2019;s codebase though. Except that Grok CLI transferred all users&#x2019; codebases to a cloud bucket!&#xa0;<em>Given Cursor and Grok are now combined as part of SpaceX, it&#x2019;s a real head scratcher why the Grok CLI isn&#x2019;t doing what Cursor always has.</em></li><li><strong>Sending over unencrypted .env files is reckless.&#xa0;</strong>Local .env files store secrets, database access tokens, service access tokens, and more. These are sensitive pieces of information that need to be handled with care. If transmitted, they should be encrypted at the very least. Grok / SpaceX storing them on the GCP storage bucket &#x2013; likely unencrypted &#x2013; is flat-out unacceptable and reason enough for any sensible company to ban usage of Grok CLI.</li><li><strong>No good reason to upload git history.&#xa0;</strong>Sure, seeing Git history could be helpful when training an AI model.</li><li><strong>It&#x2019;s malicious to not tell devs anything about it.&#xa0;</strong>Developers using Grok CLI haven&#x2019;t been asked to opt into this data upload, nor notified of it. Most evidently had no idea this has been happening, and are understandably furious after Cerblab&#x2019;s writeup went viral.</li></ul><h2 id="spacex-throws-devs-%E2%80%9Cunder-the-bus%E2%80%9D">SpaceX throws devs &#x201c;under the bus&#x201d;</h2><p><strong>Caught red-handed, Grok CLI disabled file uploads with a remote feature flag.&#xa0;</strong>AWS engineer Wes Eklund&#xa0;<a href="https://github.com/weklund/grok-network-monitor?ref=blog.pragmaticengineer.com"><u>started tracking</u></a>&#xa0;upload functionality with the CLI, finding that the uploads suddenly stopped due to a feature flag being flipped by the Grok team, pausing data collection.</p><p>But the code functionality to stream all local files to the server, unencrypted, remained present in the CLI, even in later updates. Read an&#xa0;<a href="https://github.com/weklund/grok-network-monitor?ref=blog.pragmaticengineer.com"><u>in-depth analysis by Wes.</u></a></p><p><strong>SpaceX&#x2019;s official response was pretty laughable,&#xa0;</strong>not explaining why .env files and .git history were uploaded, and adding that enterprise customers with zero data retention (ZDR) enabled were the only ones unaffected by underhanded, secret uploading of users&#x2019; local files:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/image-2.png" class="kg-image" alt="The Pulse: Grok&#x2019;s CLI caught uploading all your local files to the cloud" loading="lazy" width="1184" height="732" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/08/image-2.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/08/image-2.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/image-2.png 1184w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Translation: &#x201c;Enterprise users with ZDR turned on were not impacted. To everyone else: we didn&#x2019;t tell you about this hidden/privacy command, but it&#x2019;s your fault. Source:&#xa0;</em></i><a href="https://x.com/SpaceXAI/status/2076692402442846289?s=20&amp;ref=blog.pragmaticengineer.com"><i><em class="italic" style="white-space: pre-wrap;">SpaceX</em></i></a></figcaption></figure><p>My initial reaction is what a condescending response by SpaceX, swiftly followed by the question: does Grok CLI even have enterprise customers? It might be few, given how reckless the team evidently is by uploading unencrypted secrets! SpaceX CEO Elon Musk chimed in with a post that seemed to be almost trolling angry users. He&#xa0;<a href="https://x.com/elonmusk/status/2076737992689914215?s=20&amp;ref=blog.pragmaticengineer.com"><u>wrote</u></a>:</p><blockquote>&#x201c;SpaceX policy regarding data retention.<br><br>It is actually helpful for debugging issues if we can retain some amount of data, so allowing this would be appreciated, but your privacy settings are always respected.&#x201d;</blockquote><p>This makes it worse because SpaceX has been secretly uploading far more data than is &#x201c;useful for debugging!&#x201d; Uploading the git history and sensitive .env files is&#xa0;<em>not</em>, in any way, useful for debugging. Also, Grok/SpaceX did not upload &#x201c;some amount of data&#x201d;; it uploaded every last file it could find in your local folder.</p><p>The developer community is justifiably upset to read SpaceX and Musk pretending that Grok has only uploaded scraps of data purely for debugging purposes. This time, even fans of SpaceX and Grok are speaking out against Musk and his company&#x2019;s behavior. AWS engineer&#xa0;<a href="https://x.com/WesEklund/status/2076739552946081795?s=20&amp;ref=blog.pragmaticengineer.com"><u>Wes Eklund</u></a>:</p><blockquote>&#x201c;Elon, firstly, huge fan of everything you work on. Completely understand the need for some trace data to improve customer experiences.<br><br>From what I&#x2019;ve researched, it seems to be much more than just trace debugging issues. It seems to be entire code repos with sensitive information just collected entirely.<br><br>Your Google Cloud blob storage must have petabytes of code repos from us.<br><br>Not ideal.&#x201d;</blockquote><h2 id="sam-altman-pushes-grok-to-open-source-grok-cli">Sam Altman pushes Grok to open source Grok CLI</h2><p>OpenAI CEO, Sam Altman, also posted, using a term Musk often employs when commenting on things he disapproves of in society, and hinting at the benefits of Codex which doesn&#x2019;t upload your whole local filesystem, or mess with .env files and the git history. The Codex harness is open source, so secretive file-upload functionality would be visible in the source code:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/image-3-1.png" class="kg-image" alt="The Pulse: Grok&#x2019;s CLI caught uploading all your local files to the cloud" loading="lazy" width="1182" height="842" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/08/image-3-1.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/08/image-3-1.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/image-3-1.png 1182w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Altman uses Musk&#x2019;s trademark &#x201c;concerning&#x201d; remark against him. Source:&#xa0;</em></i><a href="https://x.com/sama/status/2077053226080436235?s=20&amp;ref=blog.pragmaticengineer.com"><i><em class="italic" style="white-space: pre-wrap;">Sam Altman</em></i></a></figcaption></figure><p>Musk clearly read it and responded a few hours later:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/image-5.png" class="kg-image" alt="The Pulse: Grok&#x2019;s CLI caught uploading all your local files to the cloud" loading="lazy" width="1178" height="508" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/08/image-5.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/08/image-5.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/image-5.png 1178w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Musk committing to open sourcing Grok CLI. Source:&#xa0;</span><a href="https://x.com/elonmusk/status/2077361679034118271?ref=blog.pragmaticengineer.com"><span style="white-space: pre-wrap;">Elon Musk</span></a></figcaption></figure><p>A day later, (15 July), SpaceX did indeed&#xa0;<a href="https://github.com/xai-org/grok-build?ref=blog.pragmaticengineer.com"><u>open source</u></a>&#xa0;Grok CLI. Altman&#x2019;s comment seemingly hit home. Also, SpaceX has stated it is deleting data from its servers,&#xa0;<a href="https://x.com/SpaceXAI/status/2077494536788664782?s=20&amp;ref=blog.pragmaticengineer.com"><u>writing</u></a>:</p><blockquote>&#x201c;We disabled default retention for all Grok Build users starting on July 12th. Additionally, we are deleting all coding data that was previously retained, ensuring every user&#x2019;s preferences are respected. With these steps, Grok Build goes beyond other major coding products to protect user privacy.&#x201d;</blockquote><p><strong>The open sourced repo is rushed, unsurprisingly.</strong>&#xa0;Kernel engineer Elliot Arledge used the repo and reported what he&#xa0;<a href="https://x.com/elliotarledge/status/2077543457925853276?s=20&amp;ref=blog.pragmaticengineer.com"><u>found</u></a>:</p><blockquote>&#x201c;Out of the box, `cargo test --workspace` doesn&#x2019;t compile. 190+ errors, all one bug class: cross-crate test helpers hidden behind #[cfg(test)], which Bazel&#x2019;s per-target test builds tolerate but Cargo doesn&#x2019;t, because a dependency is never compiled in test mode. The default-bazel feature is declared in ~20 manifests and wired to nothing. Ungating the benign helpers and putting the signing-key test seam behind a dev-dependency-only feature gets the suite running for the first time on the published tree: 24,663 passed, 28 failed, and every one of the 28 is a pre-existing bug the broken build had been hiding (tests reading your real ~/.claude/settings.json, a tool missing from the registry, macOS /var symlink breakage, one Theme::current() race).<br><br>Questions for the team:<br><br>Did anyone try downloading this repo and running it before publishing?&#x201d;</blockquote><p>In fairness, it&#x2019;s clear from the outside that the dev team was instructed to open source the repo ASAP, and did just that. I would expect improvements to allow the developer community to compile the repo and run tests will come later.</p><p>On a side note, I wonder what the mood within Grok is. A mandate to open source the product &#x2013; that was not built to be open sourced! &#x2013; and doing it in a couple of hours hints what it&#x2019;s like to work there. Some folks doubtless would find it thrilling and a big challenge, while others likely find it pretty stressful having the &#x201c;Eye of Sauron&#x201d; (the CEO) upon them!</p><h2 id="can-companies-trust-grok-now">Can companies trust Grok now?</h2><p>To hand it to Grok/SpaceX, the last 24 hours of this incident saw some impressive execution. In contrast, everything that took place beforehand screams &#x201c;amateur hour&#x201d;:</p><ul><li>Did no one in teams that wrote the functionality to upload the complete local codebase raise concerns that this would be unacceptable to devs?</li><li>How did uploading secrets without encryption not raise alarm bells?</li><li>Why greenlight any of it without opt-in and do it in a secretive manner?</li></ul><p>For sensible companies generating revenue with software, vendors who are allowed to access their codebase are limited to those that can be trusted. Grok has demonstrated it is unprepared to handle codebases with security fundamentals in mind.</p><p>There&#x2019;s now frantic backpedaling and rapid open sourcing, but my impression is that this is simply because Grok/SpaceX was caught red-handed, and understands the risk of losing enterprise contracts caused by this flagrant breach of trust. This is why SpaceX&#x2019;s communication mentioned that enterprise customers with zero data retention have not been impacted!</p><p><strong>Trust is earned in drops and lost in buckets; SpaceX/Grok will likely learn this.&#xa0;</strong>By secretly uploading codebases and secrets, Grok CLI revealed itself as an untrustworthy coding agent that&#x2019;s a risk to use. Meanwhile, all the major competitors &#x2013; Claude Code, Codex, OpenCode, Gemini CLI &#x2013; have never violated user trust this way.</p><p>Grok CLI can rebuild trust, but it&#x2019;ll likely take years of no security-related incidents to prove they are an open source-first product (that they were not, just a day ago!), and also demonstrate that they care about &#x201c;normal&#x201d; developers, and not just enterprise clients with ZDR turned on.</p><p><strong>This incident is a good reminder of why planning and process can slow shipping speed, but increase revenue generation.&#xa0;</strong>I would wager that the Grok team has shrunk SpaceX&#x2019;s enterprise subscription prospects for the foreseeable, in the name of saving a few hours on security reviews, learning what other coding harnesses do with codebase uploads, or even just asking the Cursor team!</p><p>I predict Grok/SpaceX will have to offer very high usage limits inside the Grok CLI to convince devs to take a risk on running this software on their system. And they will have to undercut OpenAI and Anthropic API pricing massively for any security team to greenlight use of a CLI that just last week was sending .env secrets unencrypted to their GCP buckets.</p><p>Of course, SpaceX/Grok will be just fine as it has the capital to fix things. It will now just be a lot more expensive and time-consuming to fix something that was likely caused by a few engineers wanting to make debugging easier!</p><p><em>Read the </em><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-groks-cli-caught-uploading?ref=blog.pragmaticengineer.com" rel="noreferrer"><em>full <u>The Pulse issue</u></em></a><em>, or check out </em><a href="https://newsletter.pragmaticengineer.com/s/the-pulse?ref=blog.pragmaticengineer.com" rel="noreferrer"><em><u>this week&#x2019;s The Pulse</u></em></a><em>. The full issue additionally covers:</em></p><ol><li><strong>New trend: concern about massive increase in code review load.&#xa0;</strong>Top of mind for engineering leaders: what to do about the ever-growing code review load, and how devs are starting to review code less thoroughly than before? Many questions, but few proven solutions.&#xa0;<em>Send comments about what you see working.</em></li><li><strong>Are more devs at enterprises upset about enterprise pricing by AI labs &#x2013; and does it matter?&#xa0;</strong>I got a message from a reader baffled to learn their company pays 20-30x the price for tokens than their own &#x24;20/month Claude Code / Codex subscription. It may show how valuable AI coding tools are.</li><li><strong>Linux creator: AI &#x201c;clearly useful.&#x201d;&#xa0;</strong>Inside the Linux kernel maintainers group, the discussion veered onto whether Linux should consider banning AI contributions, similar to how some FOSS projects have done so. Linus Torvalds weighed in and made it clear that AI is useful, everyone should decide whether to use it, but no one is allowed to tell others what tools to use. Given AI is an increasingly capable tool, it would be foolish to not use it as such.</li></ol><p><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-groks-cli-caught-uploading?ref=blog.pragmaticengineer.com" rel="noreferrer">Read the full The Pulse</a></p>]]></content:encoded></item><item><title><![CDATA[The Pulse: Bending Spoons' Acquisition Strategy]]></title><description><![CDATA[In only 5 years, Hopin went from zero to a $7.7B valuation, and back to zero again. Also: Bending Spoons’ startup acquisition model.]]></description><link>https://blog.pragmaticengineer.com/the-pulse-bending-spoons-acquisition-strategy/</link><guid isPermaLink="false">6a72f95dd1f60900010e34a7</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Wed, 05 Aug 2026 11:45:13 GMT</pubDate><content:encoded><![CDATA[<p>Bending Spoons has <a href="https://investors.bendingspoons.com/newsroom/bending-spoons-agrees-to-acquire-airtable?ref=blog.pragmaticengineer.com" rel="noreferrer">announced</a> buying Airtable for &#x24;1.285B in cash this week - which is less than the &#x24;1.4B in total funding Airtable has raised in the past, and well below the &#x24;11B valuation it had during its last fundraise in December 2021.</p><p>Selling to Bending Spoons is a company admitting defeat, and its inability or unwillingness to turn its business around, and wanting to get the highest possible cash for the business. Because this is what Bending Spoons is excellent at: they pay the highest cash value for a struggling business with a well-known brand, then take over operations, and operate the product with a fraction of the staff. They often let go most or all of the original team as they move over product operations to their in-house engineering team based in Italy and Europe.</p><h3 id="evernote-what-happens-when-a-new-team-takes-over-a-legacy-application">Evernote: what happens when a new team takes over a legacy application</h3><p>And having talked with Bending Spoons&apos; engineering team <a href="https://newsletter.pragmaticengineer.com/p/twisting-the-rules-of-building-software?ref=blog.pragmaticengineer.com" rel="noreferrer">on the podcast</a>: they have done impressive engineering work after a takeover, in the past! For example, upon acquiring Evernote, the Bending Spoons engineering team discovered that the note-taking service was running as a Java 11 monolith (!!), with user data sharded across 750 <em>manually</em> provisioned virtual machines (!!!) on top of Google Cloud - in 2023! At a time when running cloud-native setups (managed databases, microservices) was common knowledge for years.</p><p>Evernote&apos;s existing setup was weirdly inefficient and operationally very heavy, with manual interventions needed to keep the service running. Needless to say, performance was poor because some VMs were regularly overloaded. Also, oncall was brutal! </p><p>The Bending Spoons engineering team rationalized the architecture:</p><ul><li>Migrated user data sharded from the 750 manually provisioned VMs to a managed database</li><li>Split up the Java 11 monolith to microservices</li><li>Did all of the above without disrupting user experience</li><li>Improved performance of the backend by a wide margin</li><li>Reduced oncall load after finishing the migration to a cloud-native setup vs the previous manual provisioning setup</li><li>Did all the above in about 6 months.</li></ul><p>It&apos;s a fair question: would long would have the original Evernote engineering team have taken to do the same changes that made the service more reliable, more performant, and cheaper to operate? I would guess it would have taken them many years: in fact, if they did not make this change until 2023, who knows if they would have ever made these pretty rational changes? And so the &quot;shock therapy&quot; of Bending Spoons starting with a blank page, and a new team taking over operating the full product, with a laser focus on efficiency: well, this approach can be pretty efficient, as the Evernote example shows.</p><p><em>You can listen to the full podcast episode I did with the Bending Spoons team: </em><a href="https://newsletter.pragmaticengineer.com/p/twisting-the-rules-of-building-software?ref=blog.pragmaticengineer.com" rel="noreferrer"><em>Twisting the rules of building software: Bending Spoons</em></a><em>.</em></p><h3 id="price-increases-and-the-existing-team-let-go-the-two-most-typical-complaints">Price increases and the existing team let go: the two most typical complaints</h3><p>Bending Spoons taking over an existing product has two major criticisms:</p><ol><li><strong>Price increases. </strong>Evernote was the biggest example of price hikes: after Bending Spoons took over operating the product - and improving its performance - price hikes followed. Being Spoons kept investing in Evernote, adding new features (including AI ones), but customers paying &#x24;37/year for the Pro plan pre-2023 were charged &#x24;250/year <a href="https://www.zdnet.com/article/why-i-left-evernote-for-notion/?ref=blog.pragmaticengineer.com" rel="noreferrer">by 2026</a>. My take is that this is what happens when a product starts working a business maximizing profits: lots of customers will leave for competition, while others will pay more, valuing a more reliable service that gets more investment than before. Bending Spoons <a href="https://evernote.com/release-notes?ref=blog.pragmaticengineer.com" rel="noreferrer">keeps improving</a> Evernote since the acquisition, alongside the price increases. Clearly, the company is optimizing for maximizing revenue, not maximizing the number of customers, though.</li><li><strong>Layoffs</strong>. Bending Spoons let go most/all of the Evernote team in the US, briging operations in-house. This is part of the &quot;usual&quot; playbook of Bending Spoons: they buy products to operate them as efficiently as possible. The re-architecting example shows benefits of starting from scratch, and not needing to deal with internal resistance for changes that result in more efficient operations. Knowing that with a Bending Spoons acquisition, letting go of all the existing team is on the table is something that comes with selling to this company.</li></ol><p>With this, let me share my analysis of a past Bending Spoons acquisition: when they bought SteamYard from Hopin.</p><hr><p><em>Below is the now un-paywalled excerpt from </em><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-89?ref=blog.pragmaticengineer.com" rel="noreferrer"><strong><em>The Pulse #89: The end of Hopin</em></strong></a><em><strong>,</strong> from April 2024, sent to paid The Pragmatic Engineer subscribers. If you&apos;d like to get analysis like this in your inbox, weekly, </em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com" rel="noreferrer"><em>subscribe to The Pragmatic Engineer</em></a><em>.</em></p><h3 id="the-end-of-hopin">The End of Hopin</h3><p>It&#x2019;s been a real rollercoaster ride for the virtual events provider:</p><ul><li><strong>2019</strong>: founded with a mission to provide a solution for hosting virtual events.</li><li><strong>2020-2021:</strong>&#xa0;raised a total of &#x24;1B in funding during a seed round in Feb 2020, Series A in June, Series B in November, and then a Series C in March-June 2021. The company was valued at &#x24;7.75B and acquired several startups, the biggest of which was video streaming platform, StreamYard, for &#x24;250M.</li><li><strong>2022</strong>: layoffs in&#xa0;<a href="https://newsletter.pragmaticengineer.com/p/the-scoop-3?s=w&amp;ref=blog.pragmaticengineer.com">February</a>, when Hopin was one of the early scaleups to do large cuts (12%), followed by more&#xa0;<a href="https://newsletter.pragmaticengineer.com/p/the-scoop-18?ref=blog.pragmaticengineer.com">in July</a>&#xa0;(29%), and&#xa0;<a href="https://www.conference-news.co.uk/uncategorized/hopin-announces-new-layoffs-and-transformation-new-product-launches/?ref=blog.pragmaticengineer.com">November</a>&#xa0;(17%)</li><li><strong>2023</strong>: Hopin&#xa0;<a href="https://newsletter.pragmaticengineer.com/i/135691414/events-tech-hopin-selling-its-events-tech-business?ref=blog.pragmaticengineer.com">sold</a>&#xa0;its core event tech business to RingCentral for &#x24;50M. We&#xa0;<a href="https://newsletter.pragmaticengineer.com/i/135691414/events-tech-hopin-selling-its-events-tech-business?ref=blog.pragmaticengineer.com">analyzed this at the time.</a></li><li><strong>2024:&#xa0;</strong>Last month, Hopin&#x2019;s UK entity entered liquidation. Insiders told me it was merely a restructure, with Hopin UK employees joining StreamYard. Basically, Hopin became the business it had purchased back in 2021.</li></ul><p>This week, Italian mobile app developer Bending Spoons&#xa0;<a href="https://www.businesswire.com/news/home/20240409133596/en/Bending-Spoons-to-Acquire-StreamYard-Leader-in-Live-Streaming-and-Video-Recording-Solutions?ref=blog.pragmaticengineer.com">acquired</a>&#xa0;the remains of Hopin, which is basically the StreamYard product. All Hopin staff will soon be laid off.</p><h3 id="the-bending-spoons-acquisitions-strategy">The Bending Spoons acquisitions strategy</h3><p>Bending Spoons has previously acquired apps such as the notes app Evernote in 2022, events app Meetup in 2024, and video-recording app FiLMiC in 2022. Their approach to these acquisitions was the same each time:</p><ol><li>Take over operating the product</li><li>Fire most staff immediately</li><li>Have some remaining staff hand over services, then fire them as well</li><li>Operate the app with a much smaller team and raise prices.</li><li>Profit!</li></ol><p>I talked with current Hopin employees for details on what will happen next, and if this model will be followed again. Unfortunately, it will.</p><p><strong>All existing Hopin staff will be let go, eventually.</strong>&#xa0;This affects around 80 staff working on StreamYard, and another 70 on other Hopin products, Streamable (video sharing) and Superwave (community platform.) I&#x2019;m told severance packages are generous enough, at around 3-4 months&#x2019; salary.</p><p>As with other Bending Spoon acquisitions, a subset of the team was requested by Bending Spoons to help with the transition (and then be let go afterwards.) Understandably, morale is very low for this reason, and the certainty that everyone will lose their jobs.</p><h3 id="how-much-did-streamyard-sell-for">How much did StreamYard sell for?</h3><p>From talking with current employees, I gather that circa 95% of Hopin&#x2019;s revenue comes from StreamYard, and not more than 5% from Streamable and Superwave. So the only valuable asset that this acquisition priced in is StreamYard.</p><p>In 2021, Hopin paid &#x24;250M for it. Back then, the video streaming service generated about &#x24;40M in annual revenue. This has risen to about &#x24;70M per year and keeps growing in an increasingly crowded market. StreamYard was at around break even and can be easily made profitable, I&#x2019;m told.</p><p>A good question is whether Bending Spoons paid &#x24;250M or more for this asset. In 2023, RingCentral paid &#x24;50M for the &#x201c;core&#x201d; virtual events offering which was making &#x24;20M in annual recurring revenue (ARR) at the time, I&#x2019;ve confirmed with insiders. However, ARR was falling steeply, and was forecast to hit &#x24;10-15M within a year. So RingCentral paid a 2.5x multiple for an asset losing revenue.</p><p>StreamYard brings in &#x24;70M per year, and this is increasing. I&#x2019;d assume the purchase price would be at least the same 2.5x multiplier, if not more. So there&#x2019;s a fair chance this sale&#x2019;s value is close to &#x24;200M.</p><h3 id="why-did-hopin-sell-to-a-buyer-which-wants-to-lay-off-everyone">Why did Hopin sell to a buyer which wants to lay off everyone?</h3><p>I have exclusively learned that StreamYard&#x2019;s founders actually offered to Hopin&#x2019;s board of directors to buy the company back, and operate independently, as before. This would&#x2019;ve been a better outcome for employees, most of whom would surely have kept their jobs. Some of StreamYard&#x2019;s staff knew of this plan and naturally supported it. The Bending Spoons sale has taken everyone by surprise.</p><p>But why would Hopin choose a buyer that is guaranteed to sack existing staff? Well, the board might have had no real choice, due to Hopin having raised&#xa0;<em>too much</em>&#xa0;money.</p><p>Hopin raised &#x24;1B in funding, during which it almost certainly offered board seats to investors including a16z, General Catalyst, Coatue, Northzone, Salesforce Ventures, Tiger Global, Accel, and others. It&#x2019;s safe to assume investors control the board, and as Hopin will never live up to its &#x24;7.75B valuation, the board-level rationale has evidently been to maximize the amount of money clawed back.</p><p>Of that &#x24;1B, here&#x2019;s what&#x2019;s left:</p><ul><li>&#x24;50M from selling Hopin&#x2019;s core business</li><li>Whatever StreamYard sells for</li><li>Residual cash left over from the fundraising</li></ul><p>The board serving investors&#x2019; interests&#xa0;<em>had</em>&#xa0;to shop around for the highest bidder, and minimize losses. I have to assume the decision on whether StreamYard&#x2019;s founders could buy back their own company came down to whether or not someone else was offering more money for it. Unfortunately for Hopin&#x2019;s staff (and fortunately for investors,) Bending Spoons probably offered more.</p><h3 id="the-risk-of-raising-too-much-venture-capital">The risk of raising too much venture capital</h3><p>Hopin is a reminder that raising too much venture capital can have unexpected, seemingly irrational, outcomes.<strong>&#xa0;</strong>Firing all staff from a company making &#x24;70M/year while being break-even or profitable sounds irrational from the company&#x2019;s perspective. But it is rational for investors and a buyer:</p><ul><li>Hopin&#x2019;s investors realized the company is a &#x201c;failed bet.&#x201d; They want to cash out their losses: get back whatever money they can &#x2013; which is still in the hundreds of millions of dollars! &#x2013; and use this capital to make new bets.</li><li>Hopin&#x2019;s buyer &#x2013; Bending Spoons &#x2013; wants to maximize their return. They pay &#x24;X for the company, and the goal is to generate &#x24;Y over the next several years in profit from it, where &#x24;Y &gt; &#x24;X. So, the acquisition pays for itself. Bending Spoons has a working model that involves firing all existing staff, and operating the product more efficiently.</li></ul><p>The biggest losers in this story are:</p><ul><li>Some investors. Collectively, investors poured &#x24;1B into Hopin. In October 2023, Hopin&#xa0;<a href="https://find-and-update.company-information.service.gov.uk/company/12035150/filing-history?page=1&amp;ref=blog.pragmaticengineer.com">returned</a>&#xa0;&#x24;581M of capital to investors (so 58% of all amount raised). It is unclear if the StreamYard purchase that could be another &#x24;200-300M, will be returned to them. It is safe to assume that investors will lose about 20-42% of the amount they invested, depending on how much proceedings of the StreamYard purchase they get paid.&#xa0;<em>This is much better than in the case of&#xa0;</em><a href="https://newsletter.pragmaticengineer.com/p/the-scoop-fast?ref=blog.pragmaticengineer.com"><em>one-click checkout startup Fast going bankrupt</em></a><em>&#xa0;a year after raising &#x24;100M in funding, where investors most likely lost all their investment! In the case of Hopin: it&#x2019;s still a loss, but it&#x2019;s far from a 100% loss like with Fast.</em></li><li>Employees who expected a better outcome. Shares issued to staff by Hopin are now officially worthless. At the same time, Hopin did pay above-the-market base salaries, and offered generous severance during redundancies. Unfortunately, a reality of fast-growing startups is that they can grow fast, but also go down fast.</li></ul><p>Winners of this sale are:</p><ul><li>The original founders of StreamYard who sold the company for &#x24;250M cash. Even though these founders are also departing, they netted a healthy return in 2021.</li><li>Bending Spoons, which has acquired a market-leading streaming product generating &#x24;70M per year and growing. StreamYard would normally not be available to buy, but the need of the Hopin board to &#x201c;cash in&#x201d; the company&#x2019;s remaining assets made this sale possible.</li></ul><p>I assume the biggest winner of the Hopin story stands to be Hopin&#x2019;s founder and former CEO, Johnny Boufarhat. He sold more than &#xa3;100M (&#x24;127M) of his shares&#xa0;<a href="https://www.ft.com/content/3472e2db-717f-4c7a-9d65-c1c461c79870?ref=blog.pragmaticengineer.com">in 2021 as secondaries</a>. He probably netted more money than Hopin &#x2013; excluding StreamYard &#x2013; generated in its lifetime! Selling a good chunk of his shares in 2021, at the peak of hype for virtual events is a good reminder that when everyone is buying, it can be a profitable strategy to sell!</p><h3 id="what-happened-to-other-fast-growing-startups-in-europe">What happened to other fast-growing startups in Europe?</h3><p>In 2020, Hopin was known as the fastest-ever growing startup in Europe by valuation. This visualization by Sifted went viral, and was widely shared by Hopin staff on social media:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/image.png" class="kg-image" alt loading="lazy" width="1456" height="801" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/08/image.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/08/image.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/image.png 1456w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Graph showing Hopin&#x2019;s growth to &#x24;7.75B in under 2 years. Source:&#xa0;</em></i><a href="https://sifted.eu/articles/hopin-fastest-growing-startup?ref=blog.pragmaticengineer.com"><i><em class="italic" style="white-space: pre-wrap;">Sifted</em></i></a><i><em class="italic" style="white-space: pre-wrap;">.</em></i></figcaption></figure><p>Hopin&#x2019;s current value is now zero, having sold its valuable assets. But how have other, formerly fastest-growing startups in Europe performed? I visualized this:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/image-1.png" class="kg-image" alt loading="lazy" width="1600" height="1025" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/08/image-1.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/08/image-1.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/08/image-1.png 1600w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">How the group of fastest-growing startups in Europe in 2020 are doing today. Wolt and Revolut were the only two to remain on a &#x201c;hockey stick-growth,&#x201d; valuation-wise.</span></figcaption></figure><p>Excluding Hopin, the car sale website Cazoo did worst; it&#x2019;s currently close to bankruptcy, valued at about &#x24;60M. The companies that managed to grow above than their 2020 valuations are:</p><ul><li>Food delivery service Wolt was acquired by DoorDash for &#x20ac;7B (&#x24;8.1B) in 2022</li><li>Ride-hailing app Bolt was last valued at &#x24;8.5B, and is supposedly&#xa0;<a href="https://www.reuters.com/business/autos-transportation/uber-rival-bolt-names-new-cfo-preparation-ipo-2023-07-06/?ref=blog.pragmaticengineer.com">preparing</a>&#xa0;for an IPO in 2025</li><li>Neobank, Revolut, was valued at &#x24;33B, even though some investors&#xa0;<a href="https://www.ft.com/content/5adbb200-02bf-40d6-815c-c13a4a30b5c4?ref=blog.pragmaticengineer.com">cut their valuation</a>&#xa0;of the company to around &#x24;20B in the summer of 2023</li><li>Spotify&#x2019;s current market cap is nearly &#x24;60B, and the company is trading close to its 2021 all-time-high</li></ul><p>This chart confirms what we already know: 2020-2022 was a time when startup and scaleup valuations hit all-time highs, fueled by zero interest rates, and widespread changes in consumer spending caused by the Covid-19 pandemic.&#xa0;<em>We have covered&#xa0;</em><a href="https://newsletter.pragmaticengineer.com/p/zirp?ref=blog.pragmaticengineer.com"><em>what the end of rock bottom rates could mean for the tech industry.</em></a></p>]]></content:encoded></item><item><title><![CDATA[The Pulse: Quitting Spotify Podcasts over reliability]]></title><description><![CDATA[Spotify’s podcast platform has become chronically unreliable since the company’s leadership started boasting about AI adoption. Competitors haven’t had similar issues, so I offboarded from Spotify.]]></description><link>https://blog.pragmaticengineer.com/the-pulse-quitting-spotify-podcasts-over-reliability/</link><guid isPermaLink="false">6a6b68cb5afb0c00015a3f23</guid><dc:creator><![CDATA[Ivan Klaric]]></dc:creator><pubDate>Thu, 30 Jul 2026 15:51:38 GMT</pubDate><content:encoded><![CDATA[<p><em>Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of four topics of </em><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-quitting-spotify-podcasts?ref=blog.pragmaticengineer.com" rel="noreferrer"><em>last week&apos;s The Pulse issue</em></a><em>. Full subscribers received the article below seven days ago. If you&#x2019;ve been forwarded this email, you can </em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>subscribe here</em></a><em>.</em></p><p>You can no longer watch The Pragmatic Engineer Podcast as <em>video</em> in the Spotify app (only as audio) because I have quit publishing video on that streaming platform. This comes after I decided that reliability takes a back seat within that team &#x2013; and across much of Spotify. Unlike on other platforms such as YouTube, Apple Podcasts, and Substack, I&#x2019;ve recently encountered a series of reliability issues around Spotify being unable to process video episodes. Even though I enjoyed a direct link with the Podcasts team there, things haven&#x2019;t improved.</p><p>So from now, I will no longer be publishing video episodes on Spotify. You can find videos of my in-depth chats with guests only <a href="https://www.youtube.com/@pragmaticengineer?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">on YouTube</a>. <em>Apologies for any inconvenience this change causes! </em>Audio episodes of the podcast can still be found <a href="https://open.spotify.com/show/2Bho9xCbOQMWMJ7UKmqCzD?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">on Spotify</a> via the RSS podcast feed hosted <a href="https://pragmaticpodcast.com/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">on Substack</a>.</p><p>Honestly, the decision to quit the streaming giant wasn&#x2019;t hard, and I reckon there&#x2019;s a point here about the risk of deprioritizing reliable operations at major companies in order to push on things like AI adoption, as Spotify seems to be doing.</p><p>Some context: for the first two years of The Pragmatic Engineer Podcast, it was published on three podcast platforms:</p><ol><li><strong>Substack&#x2019;s podcast platform (audio)</strong>: this is where the <a href="https://api.substack.com/feed/podcast/458709.rss" rel="noopener noreferrer nofollow">&#x201c;master&#x201d; RSS feed</a> is served to the likes of Apple Podcasts, the web, Overcast, Pocket Casts, etc</li><li><strong>YouTube (video):</strong> video episodes uploaded individually</li><li><strong>Spotify (video + audio): </strong>every video episode<em> was </em>uploaded individually and then served as video or audio episodes from the platform.</li></ol><p>As someone hosting a podcast, there are good reasons to bother doing three separate uploads:</p><ul><li><strong>Most podcast platforms don&#x2019;t support video.</strong> There will always be a need for a platform that serves the master RSS feed for audio versions while the video ones are elsewhere.</li><li><strong>YouTube doesn&#x2019;t integrate with anything. </strong>YouTube is the leader in video podcast distribution, and uploading there directly makes sense.</li><li><strong>I had a direct line to the Spotify team, which was a big plus. </strong>Starting out the podcast, I had the unusual privilege of contact with the podcasts team, thanks to the newsletter gaining a decently-size audience. I was persuaded to take the plunge with them.</li></ul><p>For eighteen months, nothing <em>major</em> went wrong. The admin portal for podcast publishers (called &#x2018;Spotify Creators&#x2019;) was pretty wonky; it gave intermittent errors, and was unable to remember me when I signed in, so, each Wednesday, I&#x2019;d have to sign in with a code sent to my email to publish an episode.</p><p>But overall, things worked, until it all went suddenly downhill&#x2026;</p><h3 id="unable-to-publish-spotify-podcast-episodes-3-out-of-5-weeks"><strong>Unable to publish Spotify podcast episodes 3 out of 5 weeks</strong></h3><p>From late May, I did not include links to Spotify on new episode announcements because their podcasts product or platform seemingly had outages every time one published on Wednesdays at around 9am PST / 12pm EST / 6pm EU time.</p><p><strong>Outage #1 (20 May): podcast publishing broke</strong>, my episode would not process on Spotify for 2+ hours. When uploading a video file to Spotify, there&#x2019;s a processing pipeline that runs to create chunks of the podcast in different video and audio formats. This pipeline appeared to stop running, meaning new episodes were not published.</p><p>It was not just the publishing that broke: the Creator portal looked absurd, with NaN% values everywhere, during the outage:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!dFJF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8041085f-fc43-4b61-9e99-47d7e11e5a84_1752x1058.png" class="kg-image" alt loading="lazy" width="1456" height="879"><figcaption><i><em class="italic" style="white-space: pre-wrap;">During outage #1</em></i></figcaption></figure><p>I emailed the Spotify team to alert them about the outage and also <a href="https://x.com/GergelyOrosz/status/2057127878517526860?s=20&amp;ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">complained online</a>. I got a response, confirming the outage and pledging to do better:</p><blockquote>&#x201c;The issue was in one of our podcast publishing metadata pipelines. A small subset of episodes completed normal media processing but then missed a downstream publish update because a newly introduced validation signal was not correctly wired into the logic that wakes up the publishing path. In simpler terms: the episode could become eligible to publish, but the final propagation step was not reliably triggered for that class of episodes.<br><br>We identified the root cause, deployed a fix, and reprocessed the affected episodes with all-clear called early this morning. We&#x2019;re also tightening the system so that fields used for publishing eligibility cannot be added without also triggering the relevant downstream updates.<br><br>Separately, we&#x2019;re reviewing how partial creator-impacting publishing delays are surfaced, because even when this is not a broad platform outage, it is still a bad experience for publishers like yourself.<br><br>Apologies again that you hit this. It was a real bug, not a wide outage, but it hit some of our most relevant creators.&#x201d;</blockquote><p><strong>Outage #2 (17 June): Spotify down. </strong>Four weeks later, when attempting to publish a video episode, all of Spotify went down for many users, <a href="https://x.com/GergelyOrosz/status/2067285989710582271?s=20&amp;ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">including myself.</a></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!nelU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fece389ea-6dd6-45c8-b269-718ee5fc0098_1100x620.png" class="kg-image" alt loading="lazy" width="1100" height="620"><figcaption><span style="white-space: pre-wrap;">Spotify&#x2019;s web player on 17 June</span></figcaption></figure><p>Spotify does not maintain a status page, so it&#x2019;s impossible to tell how widespread the outage was. I didn&#x2019;t include a Spotify link in that week&#x2019;s announcement either.</p><p><strong>Outage #3 (24 June): podcast publishing broke &#x2013; again. </strong>Outage #3 in five weeks; <em>deja vu</em>. This time, it was episode publishing not working, yet again. After waiting two hours for the episode to publish on Spotify, I yet again sent out the announcement with no Spotify link.</p><p>I also emailed the Spotify Podcasts team, who confirmed the outage. I said I was considering stopping publishing video episodes, and to switch to audio-only publishing (which means pointing Spotify to my master RSS feed.) I said that an apology was appreciated but it wasn&#x2019;t enough to make it worth publishing video episodes there.</p><p><strong>I also asked for the incident review because I had the feeling that reliability was not all that important on this podcast product. </strong>For the first outage I got a vague description of what happened, and promises of improvements that were never done &#x2013; e.g. during this second outage, there was no improved communications to creators, which I was told would happen, after outage #1.</p><p>Internally, Spotify&#x2019;s team surely conducted an incident review as per usual, so I figured I&#x2019;d hear back in about two weeks&#x2019; time, and assumed a reply would be forthcoming because I&#x2019;d made clear I was ready to leave Spotify Podcasts if reliability didn&#x2019;t improve.</p><h3 id="no-incident-review-three-weeks-later-so-i-quit-spotify"><strong>No incident review three weeks later, so I quit Spotify</strong></h3><p>The incident review had never arrived as promised by three weeks later, even though there had been time for it to be completed. It was yet another sign of a platform that has become unreliable. Also, the creator portal occasionally threw up this error:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!Y77E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e90510f-31f3-4ea4-a0d5-b84827c929a0_868x470.png" class="kg-image" alt loading="lazy" width="868" height="470"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Spotify&#x2019;s creator portal on 16 July</em></i></figcaption></figure><p>I checked my Spotify stats: stream plays had been trending downwards unsurprisingly, given the ongoing outages, while the other podcast platforms didn&#x2019;t show the decline.<strong> </strong>It made me decide &#x201c;enough is enough&#x201d; and to move off Spotify.</p><p>Staying on their platform depended on seeing an incident review, but they didn&#x2019;t prioritize transparency, still had no status page, and nobody had built a feature for episode-processing status like YouTube has had for years. So, I pulled the plug and left:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!fWEQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4477d3a8-1d2b-4434-80d8-f8eb7165562a_1358x930.png" class="kg-image" alt loading="lazy" width="1358" height="930"><figcaption><span style="white-space: pre-wrap;">Offboarding from Spotify&#x2019;s (video) podcasts product</span></figcaption></figure><p>After I made the switch away from Spotify, the platform&#x2019;s creators portal became buggier than ever, as in these examples:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!cc6F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd0e0887-73fe-4c4b-9ca0-76460aecca8f_2048x1150.png" class="kg-image" alt loading="lazy" width="1456" height="818"><figcaption><span style="white-space: pre-wrap;">My Creators page after I changed the source of my podcasts to the master RSS feed</span></figcaption></figure><p>Comments disappeared:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!Kclv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F182ad478-188d-4f67-ab5b-962fa3196d3b_2048x1546.png" class="kg-image" alt loading="lazy" width="1456" height="1099"><figcaption><i><em class="italic" style="white-space: pre-wrap;">My show had no comments, suddenly</em></i></figcaption></figure><p>&#x2026; even though other parts of the UI showed dozens of comments:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!ks8o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ef9802b-f2d7-466d-8c4d-b59c1972be91_2048x1190.png" class="kg-image" alt loading="lazy" width="1456" height="846"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Zero comments, yet episodes with comments</em></i></figcaption></figure><p>Episode links directed to 404 pages:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!Keep!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c237ccb-e0cb-4bac-903d-83da831ea9e9_2048x1309.png" class="kg-image" alt loading="lazy" width="1456" height="931"><figcaption><span style="white-space: pre-wrap;">404 pages inside the Creator portal, when clicking links</span></figcaption></figure><p>A day or two later, these issues disappeared: I assume no one had tested the flow of moving away from Spotify Podcasts to an RSS feed, and it&#x2019;s why the experience was so poor.</p><h3 id="incident-review-finally-published-but-with-a-wrong-timeline"><strong>Incident review finally published, but with a wrong timeline</strong></h3><p>A few days after offboarding from Spotify, their team <a href="https://engineering.atspotify.com/2026/7/content-ingestion-and-podcast-video-incident-report?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">published the incident report</a> for outage #3. Reading through it, something did not add up in the timeline:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!5ROX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0bb70a5-df4c-444c-a9a9-9642c084f7c1_1662x866.png" class="kg-image" alt loading="lazy" width="1456" height="759"><figcaption><span style="white-space: pre-wrap;">The original timeline published for the 24 June incident</span></figcaption></figure><p>My email account confirmed that I mailed the Spotify team at around 17:30 about the outage. So, after weeks of creating this report, why did the incident report downplay the fact that customers alerted the team before their own automated alerts fired?I complained to the Podcasts team, and to their credit, the incident report was updated:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!a8Ln!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36fa0a3a-ba07-453f-b1dd-0269b80a7552_2048x932.png" class="kg-image" alt loading="lazy" width="1456" height="663"><figcaption><i><em class="italic" style="white-space: pre-wrap;">The updated incident timeline</em></i></figcaption></figure><p>I didn&#x2019;t like how high-level <a href="https://engineering.atspotify.com/2026/7/content-ingestion-and-podcast-video-incident-report?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">the report is</a>, and how vague the promised improvements were. Specifically, this one:</p><blockquote>&#x201c;During this incident, many creators learned something was wrong from their audiences before they heard anything from us. We are improving our processes and technical capabilities so creators get notified as soon as possible when things aren&#x2019;t working.&#x201d;</blockquote><p>Overall, I don&#x2019;t regret the choice to leave, particularly when the focus of Spotify&#x2019;s leadership is on AI, not reliability.</p><h3 id="does-spotify-have-%E2%80%9Cai-psychosis%E2%80%9D"><strong>Does Spotify have &#x201c;AI psychosis?&#x201d;</strong></h3><p>Previously, I used the term &#x201c;AI psychosis&#x201d; differently from the usual way of describing when someone starts believing everything an AI model tells them, however outlandish. I <a href="https://newsletter.pragmaticengineer.com/i/202307236/7-is-ai-psychosis-just-a-meta-issue?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">applied it</a> to Meta&#x2019;s rush to develop its own AI model at the cost of the reliability of its profitable business activities. This was based on Instagram&#x2019;s most embarrassing-ever account takeover incident, which <a href="https://newsletter.pragmaticengineer.com/i/202307236/7-is-ai-psychosis-just-a-meta-issue?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">occurred</a> when the team responsible for Instagram&#x2019;s Trust &amp; Safety was slashed. Soon after, AI-generated, AI-reviewed code caused the hacking of a former US president&#x2019;s account.</p><p>At Spotify, it should have gone the other way. In March, I had the opportunity to meet its Head of Technology &amp; Platforms, Tyson Singer, who said the company puts reliability far ahead of AI adoption, and doesn&#x2019;t adopt AI for its own sake. So, it was somewhat surprising to read the summary below of a podcast Spotify did <a href="https://x.com/ClaudeDevs/status/2071671418245492926?s=20&amp;ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">with Anthropic</a>:</p><blockquote>&#x201c;Spotify now ships 4,500 production deploys a day, and 73% of PRs are now AI-assisted.<br><br>Niklas Gustavsson (VP of Engineering at Spotify) keeps 5 to 10 Claude sessions running in tmux, one per git worktree, agents working in the background. All of it inside a 20M+ line monorepo. He expected agents to struggle at that size, but it&#x2019;s worked well.<br><br>Spotify&#x2019;s migration codemods grew into thousands of lines of edge cases. Code has too much API surface for static rewrites. Early LLMs barely did better. Adding a judge took PR success from ~25% to 80%.<br><br>All of this leans on verification, the single most important thing when agents are used and the place most companies underinvest<br><br>Spotify rebuilt their test automation around it so engineers can confidently guide and supervise agents, rather than manually execute repetitive tasks.&#x201d;</blockquote><p>It seems to me that all the talk is about <em>usage</em> of AI, and none about <em>reliability</em>, all while Spotify&#x2019;s platform becomes less reliable than ever, at the same time as the streamer is going all-in on AI; with AI judges and devs running 5-10 parallel Claude sessions.</p><p>All things considered, it&#x2019;s worth asking if Spotify has the corporate variant of &#x201c;AI psychosis&#x201d;, whereby the reliability of a successful operation gets torched in the chase for the next big thing by executives. I don&#x2019;t even think Spotify is all that different from Meta and other companies in this!</p><p>Things look bad, based on the quality and reliability degradation of products. Annoyingly, in many cases, customers don&#x2019;t really have the choice of going elsewhere. My podcast is an exception, as video podcasts on Spotify never truly took off, so quitting the platform wasn&#x2019;t a big deal. Even so, I&#x2019;m particularly disappointed that Spotify has prioritized AI usage over reliability. I know some executives there pushed against this, but I feel safe in assuming that they lost that battle.</p><h3 id="value-of-staying-reliable-%E2%80%9Csucking-less%E2%80%9D"><strong>Value of staying reliable &amp; &#x201c;sucking less&#x201d;</strong></h3><p>Max Kanat-Alexander, distinguished engineer at Capital One, has <a href="https://www.codesimplicity.com/post/suck-less/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">written about</a> how a software project can become wildly successful just by &#x201c;sucking less&#x201d; in his reflections upon the success of the Bugzilla project, (2004-2009):</p><blockquote>&#x201c;All you have to do to succeed in software is to consistently suck less with every release.<br><br>Nobody would say that Bugzilla 2.18 was awesome, but everybody would say that it sucked less than Bugzilla 2.16 did. Bugzilla 2.20 wasn&#x2019;t perfect, but without a doubt, it sucked less than Bugzilla 2.18. And then Bugzilla 3.0 fixed a whole lot of sucking in Bugzilla, and it got a whole lot more downloads.<br><br>Why is it that this worked?<br><br>As long as you consistently suck less with every release, you will retain most of your users. You&#x2019;re fixing the things that bother them, so there&#x2019;s no reason for them to switch away. Even if you didn&#x2019;t fix everything in this release, if you sucked less, your users will have faith that eventually, the things that bother them will be fixed. New users will find your software, and they&#x2019;ll stick with it too. And in this way, your user count will increase steadily over time.<br><br><strong>But what happens if you release frequently, but instead of fixing the things in your software that suck, you just add new features that don&#x2019;t fix the sucking?</strong> Well, eventually the patience of the individual user is going to run out. They&#x2019;re not going to wait forever for your software to stop sucking.&#x201d;</blockquote><p>Personally, I got tired of Spotify&#x2019;s Podcasts product continually going in the wrong direction on Max&#x2019;s scale: the poor reliability, frequent errors on the Creators site, and the sense that they don&#x2019;t really care about improving <em>existing</em> things.</p><hr><p>Read the full issue of <a href="https://pragmaticengineer.substack.com/p/the-pulse-quitting-spotify-podcasts" rel="noopener noreferrer nofollow">last week&apos;s The Pulse</a>. The full The Pulse additionally covers:</p><ol><li><strong>Will Kimi K3 trigger US push for closed-source AI models?&#xa0;</strong>Moonshot AI&#x2019;s latest open model, Kimi K3, is on par with Anthropic&#x2019;s Fable 5. Could it lead to the US government regulating or banning Chinese open models to protect US labs?</li><li><strong>AWS laughs off &#x201c;heart attack&#x201d; billing error.&#xa0;</strong>AWS customers were billed trillions more than they should have been, due to what was likely a conversion error. But instead of sharing an incident report, AWS saw the funny side.</li><li><strong>Industry pulse.&#xa0;</strong>OpenAI&#x2019;s unreleased model tried to hack HuggingFace to improve its test scores, X took more than a year to develop its new Android app, Google&#x2019;s new AI model flops, and more.</li></ol><p><a href="https://pragmaticengineer.substack.com/p/the-pulse-quitting-spotify-podcasts" rel="noreferrer">Read the full The Pulse.</a></p>]]></content:encoded></item><item><title><![CDATA[The Pulse: New trend - concern about massive increase in code review load]]></title><description><![CDATA[Top of mind for engineering leaders: what to do about the growing code review load, and how devs are starting to review code less thoroughly than before? Many questions, but few proven solutions.]]></description><link>https://blog.pragmaticengineer.com/the-pulse-new-trend-concern-about-massive-increase-in-code-review-load/</link><guid isPermaLink="false">6a61e422435ae800016524b9</guid><dc:creator><![CDATA[Ivan Klaric]]></dc:creator><pubDate>Thu, 23 Jul 2026 16:55:29 GMT</pubDate><content:encoded><![CDATA[<p><em>Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of four topics of </em><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-groks-cli-caught-uploading?ref=blog.pragmaticengineer.com" rel="noreferrer"><em>last week&apos;s The Pulse issue</em></a><em>. Full subscribers received the article below seven days ago. If you&#x2019;ve been forwarded this email, you can </em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>subscribe here</em></a><em>.</em></p><p>One thing I am hearing that&#x2019;s top of mind for many engineering leaders is what is being done to deal with&#xa0;the&#xa0;continuous increase in code review load. It&#x2019;s been a topic for a while, and more such conversations seem to be taking place.</p><p>For me, it began in January, when Opus 4.5 and GPT 5.4 started to write more and better code at most companies. Around then, Director-level folks started talking about the bottleneck of building software moving from coding to the review phase.</p><p><strong>There&#x2019;s been a boom in AI code review tools to deal with the increase in load since February</strong>, and an explosion of experimentation with and adoption of dedicated AI code review tools like&#xa0;<a href="https://www.coderabbit.ai/?ref=blog.pragmaticengineer.com"><u>CodeRabbit</u></a>,&#xa0;<a href="https://www.greptile.com/?ref=blog.pragmaticengineer.com"><u>Greptile</u></a>,&#xa0;<a href="https://www.qodo.ai/?ref=blog.pragmaticengineer.com"><u>Qodo</u></a>,&#xa0;<a href="https://www.sonarsource.com/products/sonarqube/?ref=blog.pragmaticengineer.com"><u>SonarQube</u></a>&#xa0;(now also&#xa0;<a href="https://gitar.ai/?ref=blog.pragmaticengineer.com"><u>Gitar</u></a>). There&#x2019;s also tools offered by coding harnesses themselves like Claude Code review, Cursor review, GitHub Copilot review. And then tools previously not involved in code reviews &#x2013; but which have context on the codebase &#x2013; are also adding this, like&#xa0;<a href="https://sentry.io/product/seer/ai-code-review/?ref=blog.pragmaticengineer.com"><u>Sentry&#x2019;s Seer AI reviews</u></a>,&#xa0;<a href="https://linear.app/diffs?ref=blog.pragmaticengineer.com"><u>Linear code reviews</u></a>.</p><p><strong>Larger companies are building in-house tools to improve the code review experience.&#xa0;</strong>Uber&#x2019;s Code Inbox is one case:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!4ppW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a171592-37ca-4c2a-b1b8-0086fe9c88fe_1456x901.png" class="kg-image" alt loading="lazy" width="1456" height="901"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Uber&#x2019;s Code Inbox. From </em></i><a href="https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development?ref=blog.pragmaticengineer.com"><i><em class="italic" style="white-space: pre-wrap;">How Uber uses AI for software development</em></i></a></figcaption></figure><p>Smart assignments are a feature inside Code Inbox for having reviews progress:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!-zWf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20aa60fe-9b8b-4772-b971-1c6737adcf93_956x692.png" class="kg-image" alt loading="lazy" width="956" height="692"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Smart assignment settings for Code Inbox</em></i></figcaption></figure><p>Then there&#x2019;s Risk Profiles which estimate the impact of a change, and encourage devs to pay extra attention to risky ones:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://substackcdn.com/image/fetch/&#x24;s_!cvl3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30e886bc-2fd9-4626-a79a-eb988a8b7647_996x812.png" class="kg-image" alt loading="lazy" width="996" height="812"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Code Inbox tries to estimate the risk of a code change, and bring attention to it</em></i></figcaption></figure><p>We covered&#xa0;<a href="https://newsletter.pragmaticengineer.com/p/how-uber-uses-ai-for-development?ref=blog.pragmaticengineer.com"><u>how Uber uses AI for software development</u></a>, and it&#x2019;s not just Uber: companies like Cloudflare (<a href="https://blog.cloudflare.com/ai-code-review/?ref=blog.pragmaticengineer.com"><u>AI Code Reviewer</u></a>), Faire (<a href="https://craft.faire.com/agent-fairey-agentic-development-with-custom-mcp-servers-71784c9bc5bd?gi=8a98cd2b8d91&amp;ref=blog.pragmaticengineer.com"><u>Fairey</u></a>), and HubSpot (<a href="https://product.hubspot.com/blog/automated-code-review-the-6-month-evolution?ref=blog.pragmaticengineer.com"><u>Sidekick</u></a>) and many others have also built tools to make their code review flows more fluid, after finding that an in-house implementation worked better than integrating a vendor.</p><p><strong>Another approach is thinking about how to verify code, instead of reviewing.</strong>&#xa0;This is easier said than done; in theory, thorough testing should be able to verify that code works as expected. But how much testing is &#x2018;thorough&#x2019;? What type of tests are we talking about? Integration and end-to-end as well? What about fuzz testing? Or formal methods? What about verifying that new tests exercise the functionality as expected? And how do we connect all of this with observability?</p><p><strong>Too much thorough code review is burning out engineers, and resulting in sub-par code reviews.&#xa0;</strong>I hear a lot anecdotally that devs see others as no longer able to review code with intent, whereby, if the AI code review has no real comments, they just approve it. Meanwhile, those devs who put the same effort and energy into code review as before feel overloaded by AI slop PRs sent their way.</p><p>The problems exist, and the solutions feel more like experiments.</p><p>What are you seeing inside your company, and how are you dealing with the increase in code reviews? Share your ideas for practical, workable &#x201c;replacements&#x201d;?</p><hr><p>Read the full issue of <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-groks-cli-caught-uploading?ref=blog.pragmaticengineer.com" rel="noreferrer"><strong>The Pulse this excerpt is from</strong></a>, or check out <a href="https://newsletter.pragmaticengineer.com/s/the-pulse?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><strong>the latest The Pulse</strong></a> from today. <a href="https://pragmaticengineer.substack.com/p/the-pulse-quitting-spotify-podcasts" rel="noreferrer">Today&#x2019;s issue</a> covers:</p><ol><li>Moving video podcasts off Spotify due to constant reliability issues</li><li>&#x201c;Kimi K3&#x201d; moment &amp; a US lobby for closed-source AI models</li><li>AWS laughs off huge billing error</li><li>Industry Pulse</li></ol><p><a href="https://pragmaticengineer.substack.com/p/the-pulse-quitting-spotify-podcasts" rel="noreferrer"><em>Read the full issue here</em></a></p>]]></content:encoded></item><item><title><![CDATA[The Pulse: What can we learn from Bun’s rapid Rust rewrite with AI?]]></title><description><![CDATA[To a sceptic, spending $165K to migrate Bun from Zig to Rust sounds very expensive. But to a realist, shortening a 1-2 year migration down to 11 days opens amazing new opportunities for devs. However, a thoroughly-tested project is required to pull it off.]]></description><link>https://blog.pragmaticengineer.com/the-pulse-what-can-we-learn-from-buns-rapid-rust-rewrite-with-ai/</link><guid isPermaLink="false">6a58cdde676a90000149edb3</guid><dc:creator><![CDATA[Ivan Klaric]]></dc:creator><pubDate>Thu, 16 Jul 2026 16:50:20 GMT</pubDate><content:encoded><![CDATA[<p><em>Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of four topics of </em><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-what-can-we-learn-from?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>last week&apos;s The Pulse issue</em></a><em>. Full subscribers received the article below seven days ago. If you&#x2019;ve been forwarded this email, you can </em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>subscribe here</em></a><em>.</em></p><p>Last week in San Francisco, I met Jarred Sumner, creator of JavaScript runtime, Bun, and was keen to learn more about the rewrite of Bun from Zig to Rust. But at the time, Jarred didn&#x2019;t want to say too much, as the tool used for the migration, Fable, was out of action due to the US government imposing export controls.&#xa0;</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/data-src-image-e6450cb0-ef41-4b2a-9217-6bcdd2c7a816.png" class="kg-image" alt loading="lazy" width="2000" height="1347" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/07/data-src-image-e6450cb0-ef41-4b2a-9217-6bcdd2c7a816.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/07/data-src-image-e6450cb0-ef41-4b2a-9217-6bcdd2c7a816.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1600/2026/07/data-src-image-e6450cb0-ef41-4b2a-9217-6bcdd2c7a816.png 1600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/data-src-image-e6450cb0-ef41-4b2a-9217-6bcdd2c7a816.png 2048w" sizes="(min-width: 720px) 720px"></figure><p><em>Jarred and I at Anthropic&#x2019;s HQ, last week</em></p><p>Fortunately, the situation is now resolved and Fable is available globally, and Jarred has published a detailed <a href="https://bun.com/blog/bun-in-rust?ref=blog.pragmaticengineer.com"><u>post about the project.</u></a> Before we get into the migration, some context:</p><p><strong>Bun is a complex project, with lots of production software depending on it. </strong>Bun itself does many things:</p><ul><li>JavaScript, TypeScript and CSS <a href="https://stackoverflow.com/questions/44931479/compiling-vs-transpiling?ref=blog.pragmaticengineer.com"><u>transpiling</u></a>, <a href="https://en.wikipedia.org/wiki/Minification_(programming)?ref=blog.pragmaticengineer.com"><u>minifying</u></a> and bundling</li><li>A test runner</li><li>A package manager (npm-compatible)</li><li>Other things: module resolution, a WebSocket client, Node.js implementations and many modules</li></ul><p>Today, Bun has 22 million monthly downloads, and software like Claude Code and OpenCode depend on it, while hosting providers like Vercel, Railway and DigitalOcean do first-party support for Bun.</p><h3 id="why-a-rewrite">Why a rewrite?&#xa0;</h3><p>Zig is not a memory safe language, and memory-related bugs occurred continuously.<strong> </strong>Jarred <a href="https://bun.com/blog/bun-in-rust?ref=blog.pragmaticengineer.com"><u>lists</u></a> memory-related bugs in the latest version of Bun: memory leaks, crashes due to memory issues, heap-out-of-bounds writes, and so on. This was after the Bun team patched the Zig compiler to reduce memory-related issues, and put end-to-end memory leak tests in place. As Jarred says:</p><p>&#x201c;Our bugfix list felt bad and I was tired of going to sleep worrying about crashes in Bun. I don&apos;t blame Zig for that - other users of Zig don&apos;t have the bugs we had, and mixing GC with manually-managed memory is an uncommon enough thing for software to need that no language really designs for it. (...)</p><p>For Bun, correctly handling the lifetimes of garbage-collected values and manually-managed values has been a major source of stability issues - most often small memory leaks and occasionally crashes. Every memory allocation has to be meticulously reviewed. Where do these bytes get freed? How do we ensure it only gets freed once? Did we check for JavaScript exceptions properly? Is this garbage-collected pointer visible to the conservative stack scanner? Is this garbage collected memory or manually managed memory?&#x201d;</p><p>Moving to a memory-safe, yet performant language could eliminate such errors, and Rust is one such language that fitted the bill. Jarred:</p><p>&#x201c;A large percentage of bugs from that list are use-after-free, double-free, and &quot;forgot to free&quot; in an error path. In safe Rust, these are compiler errors and RAII-like automatic cleanup with Drop. Compiler errors are a better feedback loop than a style guide.&#x201d;</p><p>However, doing a <em>full</em> rewrite on Rust has always been a terrible idea. Or at least, it used to be, because of how unbearably long it would have taken:</p><p><strong>There are two problems with rewrites: they take too long, and they take waaaay too long. </strong>A dev who has done rewrites probably knows how things tend to go:</p><ol><li>Make an educated guess about how long it will take; say, nine months.</li><li>Nine months later, there&#x2019;s still another ~6 months to go because new functionality is added to the <em>original</em> codebase, and now that new functionality needs to be added in!</li><li>By 15 months in, there&#x2019;s still months left to go for the same reason!</li><li>In the end, you manage to mandate a &#x201c;feature freeze&#x201d; for two months and finish the rewrite in ~18 months, if lucky. The original nine-month estimate can end up taking 2+ years.</li></ol><p>Jarred likened rewriting Bun in Zig to this:</p><p>&#x201c;Historically, rewrites are a terrible idea. Excluding comments, Bun is 535,496 lines of Zig.&#xa0;</p><p><strong>A rewrite in another language would take a small team of engineers a full year.</strong></p><p>A year of zero user-facing impact is not a realistic option we could consider. So, enforcement through code-style to fix stability issues was our best bet, and was our plan when we added Rust-inspired smart pointers to Bun&apos;s codebase.</p><p>But honestly, I didn&apos;t want to do it. Homegrown smart pointers offer worse ergonomics than Rust, with none of the guarantees.</p><p>What if, instead, I spend a week testing if Anthropic&apos;s new model [Fable] can rewrite Bun in Rust?&#x201d;</p><h3 id="rewriting-bun-with-fable">Rewriting Bun with Fable</h3><p>Unsurprisingly, the rewrite was not as simple as typing a prompt like: &#x201c;Claude, rewrite Bun in Rust. Make zero mistakes.&#x201d; Instead, this is how Jarred did it:</p><p><strong>Step #1: Prep work.</strong> Three hours of intense prep work with Claude, explained<strong> </strong>Jarred:</p><p>&#x201c;Before writing any code, I spent about 3 hours talking to Claude about how to map patterns from our Zig codebase closely to Rust. Claude serialized this discussion into a <a href="https://github.com/oven-sh/bun/commit/46d3bc29f270fa881dd5730ef1549e88407701a5?ref=blog.pragmaticengineer.com"><u>PORTING.md</u></a> document, which ended up <a href="https://news.ycombinator.com/item?id=48016880&amp;ref=blog.pragmaticengineer.com"><u>on Hacker News</u></a> [as the Zig &#x2192; Rust porting guide]&#x201d;</p><p>This guide is a 600-line file with instructions like:</p><p>Ground rules:</p><ul><li>No <strong>tokio</strong>, <strong>rayon</strong>, <strong>hyper</strong>, <strong>async-trait</strong>, <strong>futures</strong>. No std::fs, std::net, std::process. Bun owns its event loop and syscalls. (Rust core/std slice, iter, mem, fmt, and core::ffi are fine &#x2014; only the I/O-touching modules are banned.)</li><li>No <strong>async fn</strong>. Everything is callbacks + state machines, same as the Zig.</li><li><strong>Borrow-checker reshaping is allowed.</strong> When matching Zig flow yields overlapping &amp;mut, capture the needed scalar (.len(), index) into a local, drop the borrow, then re-borrow. Do NOT reach for raw pointers just to silence borrowck; leave // PORT NOTE: reshaped for borrowck so Phase B diff readers aren&apos;t confused.</li></ul><p>It&#x2019;s a series of instructions that makes sense to someone who&#x2019;s expert in Rust.<em> If you want to learn more, we cover </em><a href="https://newsletter.pragmaticengineer.com/p/why-rust-is-different-with-alice?ref=blog.pragmaticengineer.com"><em><u>Rust basics and why Rust is different, with Alice Ryhl.</u></em></a></p><p><strong>Step #2: Trial run + adversarial review. </strong>Asking Claude to rewrite three files out of 1,448 total number of files. After the rewrite, Jarred ran two separate adversarial reviews with Claude to critique the result, in separate sessions than the one that Claude made the changes in.</p><p><strong>Step #3: split up the work across 64 AI agents. </strong>Jarred split up the job so that agents worked on files independent from one another, in parallel.</p><p><strong>Step #4: iron out issues with the run (~1 day). </strong>When Jarred attempted to run all this, agents kept getting in each other&#x2019;s way:</p><p>&#x201c;I asked Claude to loop the workflow on all 1,448 .zig files, and about 2 minutes in, one Claude ran git stash before committing. Another ran git stash pop. And then git reset HEAD --hard. They were stepping on each other! And if I put each Claude into a separate worktree, I would run out of disk space because Bun&apos;s git repository is too big and eventually the changes will need to be compiled and seen together.</p><p>So, I asked Claude to edit the workflow to instruct Claude to never run git stash or git reset or any git command that doesn&apos;t commit a specific file at once. No cargo either. No slow commands at all.</p><p>Then, Claude resumed the workflows. And it was working! Too slowly, so I split it into just 4 workflow shards each with their own worktree (4 worktrees total), each running 16 Claudes committing and pushing files.&#x201d;</p><p><strong>Step #5: have it run and wait ~2 days. </strong>The parallel agents went to work, and completed the rewrite of 535,496 lines of Zig code over the course of two days. Each commit was checked by two adversarial reviews, before being committed.</p><p><strong>Step #7: fix ~1,600 compiler errors (~12 hours).</strong> The rewrite was completed, but nothing compiled. Going crate-by-crate (&#x2018;crate&#x2019; is Rust&#x2019;s concept of a top-level compilation unit), Jarred had Claude fix compiler errors. <em>This alone would be a herculean task for an engineer, but not for Claude</em>:</p><p>&#x201c;Fixing the cyclical dependencies revealed about 16,000 compiler errors. A massive number for 1 human, but not a crazy number for 64 Claude&#x2019;s at once.</p><p>To maximize parallelism, the workflow looped over each crate.</p><ul><li>For each crate, run cargo check, group the output by file and save the errors to a file</li><li>Fix all the compiler errors within that crate</li><li>2 adversarial reviewers for the crate&apos;s changes</li><li>1 fixer applies the fixes&#x201d;</li></ul><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/data-src-image-cd28edee-cd89-4840-b174-c33834d838df.png" class="kg-image" alt loading="lazy" width="1656" height="1200" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/07/data-src-image-cd28edee-cd89-4840-b174-c33834d838df.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/07/data-src-image-cd28edee-cd89-4840-b174-c33834d838df.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1600/2026/07/data-src-image-cd28edee-cd89-4840-b174-c33834d838df.png 1600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/data-src-image-cd28edee-cd89-4840-b174-c33834d838df.png 1656w" sizes="(min-width: 720px) 720px"></figure><p><em>Visualizing fixing of errors, one by one, done by the agents. Source: </em><a href="https://bun.com/blog/bun-in-rust?ref=blog.pragmaticengineer.com"><em><u>Anthropic</u></em></a></p><p>The enjoyable thing about this phase of the migration was that the agents ran from midnight until 11:30am, fixing compiler bugs on their own &#x2013; when Jarred and the team were getting some sleep.</p><p><strong>Step #8: run tests locally (~2 days). </strong>Bun has a large test suite. The next step was to get these tests to <em>run </em>without compilation errors.&#xa0;</p><p><strong>Step #9: get the test suite to pass CI (~3 days). </strong>Once the tests were running (and failing), the next step was to fix the code, so that the tests could pass. This took two days.</p><p><strong>Step #10: Done in 11 days! </strong>After all the tests passed and Jarred verified that everything worked as expected, he merged the changes. The whole process took 11 days, from planning to the finish.</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/data-src-image-15c365dd-95ef-4cf9-a4f3-0f0e6f7e6312.png" class="kg-image" alt loading="lazy" width="1746" height="1084" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/07/data-src-image-15c365dd-95ef-4cf9-a4f3-0f0e6f7e6312.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/07/data-src-image-15c365dd-95ef-4cf9-a4f3-0f0e6f7e6312.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1600/2026/07/data-src-image-15c365dd-95ef-4cf9-a4f3-0f0e6f7e6312.png 1600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/data-src-image-15c365dd-95ef-4cf9-a4f3-0f0e6f7e6312.png 1746w" sizes="(min-width: 720px) 720px"></figure><p><em>The rewrite: porting ~550K lines of code, in 6,500 commits, over 11 days, with 64 agents</em></p><h3 id="how-repeatable-is-this-process">How repeatable is this process?</h3><p><strong>The rewrite cost a whopping &#x24;165,000 with API pricing. </strong>With Fable&#x2019;s API prices, the rewrite consumed 5.9 billion uncached input tokens, 690 million output tokens, and 72 billion cached input token reads. Anthropic sells API tokens at a margin as its business, so the cost of the rewrite for it was lower. It&#x2019;s a large amount: the equivalent of the annual base salary for a software engineer at a mid-tier company in the US!</p><p>But then again, could have an engineer done <em>all this work </em>in a year? Probably not, and Mitchell Hashimoto <a href="https://x.com/mitchellh/status/2075244791571611753?s=20&amp;ref=blog.pragmaticengineer.com"><u>says the same</u></a>:</p><p>&#x201c;On the cost, I think &#x24;165,000 at API pricing for Fable (didn&#x2019;t verify) is an incredible deal. There&#x2019;s absolutely no way an engineer with that salary would&#x2019;ve been able to achieve the milestones Claude did in 11 days. No way. (Even if you break it down to N engineers paid &#x24;165K total in 11 days it doesn&#x2019;t math out)</p><p>This does, however, also reconfirm my own biases which is that Fable in particular is most excellent at hard, focused tasks with clear reward functions. I&#x2019;ve been tweeting about this recently.&#x201d;</p><p><strong>What if AI enables rewrites and migrations that wouldn&#x2019;t have been considered before? </strong>The idea of rewriting Bun in Rust without AI was impractical, admits Jarred:</p><p>&#x201c;By hand, I think this would&apos;ve taken three engineers with full context on the codebase about a year, during which time we wouldn&apos;t be able to improve Node.js compatibility, fix bugs, fix security issues or implement new features. We never would&apos;ve done that. The realistic alternative was to do nothing and keep fixing the bugs at the top of this post forever.&#x201d;</p><p>A rewrite or migration taking months or years is why so many of these projects never happen. Let&#x2019;s take aside the cost for a minute and consider this question: if AI can shorten a one-year rewrite to a week: would you do it?&#xa0;</p><p>If the answer is &#x201c;hell, yes:&#x201d; a blueprint now exists in the form of the Bun migration on how to do it. There are some caveats not detailed in the post, though:</p><ol><li>You need an engineer who is <em>very</em> motivated and knows the codebase very well</li><li>You need an <em>extremely</em> robust test suite, so when the test suite passes, you know it works</li><li>You need to be willing to invest a lot in tokens, not knowing how well it all will work</li></ol><p>In fairness, #3 is the weakest point because we know LLMs are pretty good at &#x201c;mundane&#x201d; work like code migrations. With a good test suite (#2) and a motivated engineer to iron out things (#1), you&#x2019;ll more likely than not succeed.</p><p>The remaining question is how much can be spent. It will likely not be &#x24;165K: and costs can be reduced with a simpler project, or by being thoughtful about model usage. For example, do high-level planning with the most expensive model, and cheaper ones for coding and review tasks.</p><p>Migrations with AI are surely speeding up, but only when projects are well-engineered like Bun&#x2019;s has been.</p><hr><p>Read the full issue of <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-what-can-we-learn-from?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><strong>The Pulse this excerpt is from</strong></a>, or check out <a href="https://newsletter.pragmaticengineer.com/s/the-pulse?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><strong>the latest The Pulse</strong></a> from today. <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-groks-cli-caught-uploading?ref=blog.pragmaticengineer.com" rel="noreferrer">Today&#x2019;s issue</a> covers:</p><ol><li>Grok&#x2019;s CLI uploaded all your local files to the cloud, then got caught.</li><li>New trend: concern about massive increase in code review load.</li><li>Are more devs at enterprises upset about enterprise pricing by AI labs &#x2013; and does it matter?</li><li>Linux creator: AI &#x201c;clearly useful.&#x201d;</li></ol><p><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-groks-cli-caught-uploading?ref=blog.pragmaticengineer.com" rel="noreferrer"><em>Read the full issue here</em></a></p>]]></content:encoded></item><item><title><![CDATA[The Pulse: Interesting AI coding stats from Cursor]]></title><description><![CDATA[Power users generate 10x as many lines of code vs the median, most of the AI spend is coming from input tokens not output ones, and almost half of AI changes are accepted without manual review by devs (!!)]]></description><link>https://blog.pragmaticengineer.com/the-pulse-interesting-ai-coding-stats-from-cursor/</link><guid isPermaLink="false">6a4fd7106171aa00016f1eab</guid><dc:creator><![CDATA[Gergely Orosz]]></dc:creator><pubDate>Thu, 09 Jul 2026 17:20:34 GMT</pubDate><content:encoded><![CDATA[<p><em>Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of four topics </em><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-a-trend-of-trying-to-cut?ref=blog.pragmaticengineer.com" rel="noreferrer"><em>a past <u>The Pulse issue</u></em></a><em>. Full subscribers received the article below five weeks ago. If you&#x2019;ve been forwarded this email, you can</em><a href="https://newsletter.pragmaticengineer.com/about?ref=blog.pragmaticengineer.com"><em> <u>subscribe here</u></em></a><em>.</em></p><p>Cursor has just released a new report based on two years of its aggregated usage data, and there are some interesting findings:</p><h3 id="power-users-generate-10x-as-many-lines-of-code-vs-the-median">Power users generate 10x as many lines of code vs the median</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image.png" class="kg-image" alt loading="lazy" width="1456" height="815" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/07/image.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/07/image.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image.png 1456w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Source: </em></i><a href="https://cursor.com/insights?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">Cursor</em></i></a></figcaption></figure><p>The median dev using Cursor (the p50) generates about 700 lines of code per week with it, while for the 90th percentile, it&#x2019;s closer to 9,000 lines.</p><h3 id="top-1-of-users-create-incredible-volume-of-code">Top 1% of users create incredible volume of code</h3><p>The p99 data is pretty stunning:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-2.png" class="kg-image" alt loading="lazy" width="1456" height="774" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/07/image-2.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/07/image-2.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-2.png 1456w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">The top 1% of Cursor users (p99) vs the top 10% (p90)</span></figcaption></figure><p>The top 1% of users generate around 30-40K lines of code <strong>per week</strong>! That&#x2019;s the equivalent of what ~45 &#x201c;median&#x201d; devs generate in the same period.</p><p>It&#x2019;s worth asking how these top 1% of users are different. Are they writing a lot more greenfield code, do they have a bias for not using libraries, are they tokenmaxxing to get to the top of leaderboards? Do they generate 45x as many bugs, and importantly: are they adding a lot of business value with the software they ship?</p><h3 id="cursor-consumes-10x-more-input-tokens-than-it-generates-in-output-tokens">Cursor consumes 10x more input tokens than it generates in output tokens</h3><p>This is surprising: 90% of Cursor&#x2019;s token usage is input tokens! This means that most of the tokens used are for reading the existing codebase and documentation. Outputting of code is a minority usage:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-3.png" class="kg-image" alt loading="lazy" width="1456" height="811" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/07/image-3.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/07/image-3.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-3.png 1456w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Input tokens (Cursor reading the codebase) is the bulk of token usage</span></figcaption></figure><p>In some ways, this usage makes sense: as devs, we always spent far more time on reading the code, compared to lines of code we typed out. The &#x201c;10:1 read-to-write&#x201d; ratio is a classic. Here&#x2019;s Robert. C. Martin (aka &#x201c;uncle Bob&#x201d;) sharing this observation in 2008, in his book, Clean Code:</p><blockquote>&#x201c;<strong>Indeed, the ratio of time spent reading versus writing is well over 10 to 1.</strong> We are constantly reading old code as part of the effort to write new code&#x2026; [Therefore] making it easy to read, makes it easier to write.&#x201d;</blockquote><p>I find it amusing that we&#x2019;re now seeing this 10:1 read / write ratio for token usage with AI agents!</p><h3 id="input-tokens-become-the-main-ai-token-cost">Input tokens become the main AI token cost</h3><p>Input tokens are priced at a fraction of output tokens: for example, Opus 4.7 charges 5x more for output tokens than for input tokens (&#x24;5 per 1 million input tokens and &#x24;25 per 1 million output tokens). Still, thanks to input tokens dominating token usage, Cursor is seeing input tokens account for closer to 70% of the cost of AI coding agents:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-4.png" class="kg-image" alt loading="lazy" width="1456" height="807" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/07/image-4.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/07/image-4.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-4.png 1456w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Input tokens dominate Cursor costs</span></figcaption></figure><h3 id="without-caching-context-token-cost-would-be-10x-higher">Without caching context, token cost would be 10x higher</h3><p>Cursor does smart caching of context, to avoid re-generating old context with more new input tokens. When taking cache usage into account, Cursor only spends 0.6% of tokens on output tokens. The remaining 99% is split between cache read (90%), cache write (2.5%), and input tokens (7%):</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-5.png" class="kg-image" alt loading="lazy" width="1456" height="793" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/07/image-5.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/07/image-5.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-5.png 1456w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Output tokens are only 0.6% of token usage when considering cache reads &amp; writes</span></figcaption></figure><p><strong>I wonder if context reuse and caching will be a key AI efficiency component in the future? </strong>AI tokens are expensive to generate, so any form of reuse will make a lot of sense, especially in workflows like coding where a lot of existing context is reused.</p><p>Of course, Cursor sharing this detail also makes sense, as they remind everyone that building an efficient AI agent harness is far from trivial. Indeed, if you roll your own agent harness, you also need to put an efficient caching layer in place to match the efficiency of tools like Cursor.</p><h3 id="opus-is-the-most-expensive-model-could-hurt-anthropic">Opus is the most expensive model &amp; could hurt Anthropic</h3><p>At the time of publishing, Opus 4.7 was still considered the most capable coding model. However, it&#x2019;s also very expensive, and Cursor&#x2019;s own data shows it&#x2019;s close to 10x more expensive than its own Composer 2.5 model:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-6.png" class="kg-image" alt loading="lazy" width="1456" height="782" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/07/image-6.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/07/image-6.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-6.png 1456w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Opus 4.7 is twice as expensive as GPT-5.5 &amp; nearly 10x more than Composer 2.5</span></figcaption></figure><p>It&#x2019;s significant that Cursor compares the cost of a single agent request; it&#x2019;s not a direct token-to-token comparison. And it&#x2019;s worth noting this benchmark is being shared by Cursor, which has an incentive for its Composer model to appear the lowest-cost.</p><p>Still, assuming you can get similar-enough results with a 10x cheaper model, it is a saving that&#x2019;s hard to ignore, especially for mid-sized and above companies. I would not be surprised if more tech companies find ways for devs to use less capable &#x2013; but cheaper &#x2013; models for less critical work.</p><h3 id="more-expensive-models-result-in-higher-acceptance-rates">More expensive models result in higher acceptance rates</h3><p>An interesting metric Cursor shares is cost-per-line-added, per model:</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-7.png" class="kg-image" alt loading="lazy" width="1456" height="759" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/07/image-7.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/07/image-7.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-7.png 1456w" sizes="(min-width: 720px) 720px"></figure><p>This metric is a more realistic cost because it correlates to output: &#x201c;smart&#x201d; models that are expensive, but which produce code that is frequently accepted, are penalized by the cost-per-agent-request metric, but they&#x2019;re not here.</p><p>Indeed, Opus 4.7 has the same cost-per-line-accepted as GPT 5.5 at half the cost per agent request. In this comparison, Cursor&#x2019;s Composer model is &#x201c;only&#x201d; 5x as efficient.</p><p>Missing from both lists are Google&#x2019;s Gemini models, a strange omission by Cursor. I reached out to Cursor and they told me that Gemini was left out simply because they see very little usage of this model on their platform, similar to the sparsely used Grok model.</p><h3 id="almost-half-of-ai-changes-accepted-without-manual-review-by-devs">Almost half of AI changes accepted without manual review by devs</h3><p>I&#x2019;ve left the most interesting part of this report to last: in just a month, among devs using Cursor, it has gone from 10% who let AI agents create commits without a manual step, to around 40% of devs who no longer personally check the code:</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-8.png" class="kg-image" alt loading="lazy" width="1456" height="746" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/07/image-8.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/07/image-8.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/07/image-8.png 1456w" sizes="(min-width: 720px) 720px"></figure><p>The jump correlates with Opus 4.7 and GPT-5.5 being released, and around the time when many devs seem to have <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-160-why-its-so-dramatic?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">concluded that writing code by hand is dying</a> after experiencing this generation of models&#x2019; capability at generating code.</p><p>Check out <a href="https://cursor.com/insights?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">the full report from Cursor</a> for more details. Thanks to the team for releasing this data!</p><hr><p>Read the full issue of <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-a-trend-of-trying-to-cut?ref=blog.pragmaticengineer.com" rel="noreferrer">The Pulse this excerpt is from</a>, or check out <a href="https://newsletter.pragmaticengineer.com/p/the-pulse-what-can-we-learn-from?ref=blog.pragmaticengineer.com" rel="noreferrer">the latest The Pulse</a> from today. Today&apos;s issue covers:</p><ul><li>Bun&#x2019;s Rust rewrite with Fable: what can we learn?</li><li>Anthropic&#x2019;s Fable, OpenAI&#x2019;s GPT-5.6 Sol, Cursor&#x2019;s Grok 4.5, Meta&#x2019;s Muse</li><li>North Korean hackers keep trying to infiltrate full-remote companies</li><li>Industry Pulse: Meta&#x2019;s key logging exposed sensitive data, massive cuts at Xbox, Meta could not buy enough AI capacity from Google, Qualcomm acquires Modular, and memory price hikes hit Apple products.</li></ul>]]></content:encoded></item></channel></rss>