Files
nexus/sreweekly/articles/518/04-the-pulse-ai-load-breaks-github-why-not-other-vendors.html
2026-09-12 17:23:01 +08:00

565 lines
53 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>The Pulse: AI load breaks GitHub – why not other vendors? - The Pragmatic Engineer</title>
<meta name="HandheldFriendly" content="True" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="shortcut icon" href="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w256h256/2024/06/The-Pragmatic-Engineer-Blog-Publication-Icon--Logo-.png">
<link rel="stylesheet" type="text/css" href="https://blog.pragmaticengineer.com/assets/css/screen.css?v=2YkU7oqFSRPn32Jc" />
<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic|Open+Sans:700,400" />
<meta name="description" content="GitHub’s leadership blames the 3.5x increase in service load as the cause of degradation – or it might be self-inflicted.">
<link rel="icon" href="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w256h256/2024/06/The-Pragmatic-Engineer-Blog-Publication-Icon--Logo-.png" type="image/png">
<link rel="canonical" href="https://blog.pragmaticengineer.com/the-pulse-ai-load-breaks-github/">
<meta name="referrer" content="no-referrer-when-downgrade">
<meta property="og:site_name" content="The Pragmatic Engineer">
<meta property="og:type" content="article">
<meta property="og:title" content="The Pulse: AI load breaks GitHub – why not other vendors?">
<meta property="og:description" content="GitHub’s leadership blames the 3.5x increase in service load as the cause of degradation – or it might be self-inflicted.">
<meta property="og:url" content="https://blog.pragmaticengineer.com/the-pulse-ai-load-breaks-github/">
<meta property="article:published_time" content="2026-05-07T17:33:18.000Z">
<meta property="article:modified_time" content="2026-05-07T17:33:18.000Z">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="The Pulse: AI load breaks GitHub – why not other vendors?">
<meta name="twitter:description" content="GitHub’s leadership blames the 3.5x increase in service load as the cause of degradation – or it might be self-inflicted.">
<meta name="twitter:url" content="https://blog.pragmaticengineer.com/the-pulse-ai-load-breaks-github/">
<meta name="twitter:image" content="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2023/05/Big-Tech---startups---from-the-inside.png">
<meta name="twitter:label1" content="Written by">
<meta name="twitter:data1" content="Gergely Orosz">
<meta name="twitter:site" content="@GergelyOrosz">
<meta name="twitter:creator" content="@GergelyOrosz">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"publisher": {
"@type": "Organization",
"name": "The Pragmatic Engineer",
"url": "https://blog.pragmaticengineer.com/",
"logo": {
"@type": "ImageObject",
"url": "https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2015/12/pragmatic-engineer-profile-image.png"
}
},
"author": {
"@type": "Person",
"name": "Gergely Orosz",
"url": "https://blog.pragmaticengineer.com/author/gergely/",
"sameAs": [
"https://x.com/GergelyOrosz"
]
},
"headline": "The Pulse: AI load breaks GitHub – why not other vendors?",
"url": "https://blog.pragmaticengineer.com/the-pulse-ai-load-breaks-github/",
"datePublished": "2026-05-07T17:33:18.000Z",
"dateModified": "2026-05-07T17:33:18.000Z",
"description": "GitHub’s leadership blames the 3.5x increase in service load as the cause of degradation – or it might be self-inflicted.",
"mainEntityOfPage": "https://blog.pragmaticengineer.com/the-pulse-ai-load-breaks-github/"
}
</script>
<meta name="generator" content="Ghost 6.64">
<link rel="alternate" type="application/rss+xml" title="The Pragmatic Engineer" href="https://blog.pragmaticengineer.com/rss/">
<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.71/umd/portal.min.js" data-i18n="true" data-ghost="https://blog.pragmaticengineer.com/" data-key="e19be39046770b14a9d5caceb0" data-api="https://pragmatic-engineer.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
display: flex;
flex-direction: column;
align-items: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
text-align: center;
width: 100%;
color: #ffffff;
font-size: 16px;
}
.gh-post-upgrade-cta-content {
border-radius: 8px;
padding: 40px 4vw;
}
.gh-post-upgrade-cta h2 {
color: #ffffff;
font-size: 28px;
letter-spacing: -0.2px;
margin: 0;
padding: 0;
}
.gh-post-upgrade-cta p {
margin: 20px 0 0;
padding: 0;
}
.gh-post-upgrade-cta small {
font-size: 16px;
letter-spacing: -0.2px;
}
.gh-post-upgrade-cta a {
color: #ffffff;
cursor: pointer;
font-weight: 500;
box-shadow: none;
text-decoration: underline;
}
.gh-post-upgrade-cta a:hover {
color: #ffffff;
opacity: 0.8;
box-shadow: none;
text-decoration: underline;
}
.gh-post-upgrade-cta a.gh-btn {
display: block;
background: #ffffff;
text-decoration: none;
margin: 28px 0 0;
padding: 8px 18px;
border-radius: 4px;
font-size: 16px;
font-weight: 600;
}
.gh-post-upgrade-cta a.gh-btn:hover {
opacity: 0.92;
}</style>
<script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/sodo-search.min.js" data-key="e19be39046770b14a9d5caceb0" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css" data-sodo-search="https://pragmatic-engineer.ghost.io/" data-locale="en" crossorigin="anonymous"></script>
<link href="https://blog.pragmaticengineer.com/webmentions/receive/" rel="webmention">
<script defer src="/public/cards.min.js?v=ShRHxgy4po8zN-Wf"></script>
<link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=WwnU9jw5ancNC8Gc">
<script defer src="/public/member-attribution.min.js?v=AKG4hWena9j3yX3I"></script>
<script defer src="/public/ghost-stats.min.js?v=vFcCUf6ZQ0Hyhc8h" data-stringify-payload="false" data-datasource="analytics_events" data-storage="localStorage" data-host="https://blog.pragmaticengineer.com/.ghost/analytics/api/v1/page_hit" tb_site_uuid="39f85cc7-8637-40fc-a57c-f45754453717" tb_post_uuid="cfa6393f-2ec1-4179-b8d5-5c221ad1b4d7" tb_post_type="post" tb_member_uuid="undefined" tb_member_status="undefined" tb_gift_link=""></script><style>:root {--ghost-accent-color: #15171A;}</style>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/themes/prism.min.css" />
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/plugins/line-numbers/prism-line-numbers.min.css" />
<style>
pre[class*=language-] {
margin: 1.75em 0;
}
</style>
</head>
<body class="post-template nav-closed">
<div class="nav mobile">
<h3 class="nav-title">Menu</h3>
<a href="#" class="nav-close">
<span class="hidden">Close</span>
</a>
<ul>
<li class="nav-home elusive-icon Home" role="presentation"><a href="https://blog.pragmaticengineer.com/">Home</a></li>
<li class="nav-newsletter elusive-icon Newsletter" role="presentation"><a href="https://newsletter.pragmaticengineer.com/about">Newsletter</a></li>
<li class="nav-podcast elusive-icon Podcast" role="presentation"><a href="https://pragmaticpodcast.com">Podcast</a></li>
<li class="nav-sponsors elusive-icon Sponsors" role="presentation"><a href="https://blog.pragmaticengineer.com/sponsors/">Sponsors</a></li>
<li class="nav-ethics-statement elusive-icon Ethics statement" role="presentation"><a href="https://blog.pragmaticengineer.com/ethics-statement/">Ethics statement</a></li>
<li class="nav-now elusive-icon Now" role="presentation"><a href="https://blog.pragmaticengineer.com/now/">Now</a></li>
<li class="nav-my-books elusive-icon My Books" role="presentation"><a href="https://blog.pragmaticengineer.com/books/">My Books</a></li>
<li class="nav-early-trends elusive-icon Early trends" role="presentation"><a href="https://blog.pragmaticengineer.com/early-trends/">Early trends</a></li>
<li class="nav-investing elusive-icon Investing" role="presentation"><a href="https://blog.pragmaticengineer.com/investing/">Investing</a></li>
<li class="nav-contact-me elusive-icon Contact me" role="presentation"><a href="https://blog.pragmaticengineer.com/contact/">Contact me</a></li>
<li class="nav-about elusive-icon About" role="presentation"><a href="https://blog.pragmaticengineer.com/about/">About</a></li>
<li class="nav-rss-feed elusive-icon RSS Feed" role="presentation"><a href="https://blog.pragmaticengineer.com/feed/">RSS Feed</a></li>
<li class="nav-bluesky elusive-icon bluesky" role="presentation"><a href="https://bsky.app/profile/gergely.pragmaticengineer.com/">bluesky</a></li>
<li class="nav-twitter elusive-icon twitter" role="presentation"><a href="http://twitter.com/GergelyOrosz">twitter</a></li>
<li class="nav-youtube elusive-icon youtube" role="presentation"><a href="https://www.youtube.com/@pragmaticengineer">youtube</a></li>
<li class="nav-linkedin elusive-icon linkedin" role="presentation"><a href="http://www.linkedin.com/in/gergelyorosz">linkedin</a></li>
</ul>
<a class="subscribe-button icon-feed" href="https://blog.pragmaticengineer.com/rss/">Subscribe</a>
</div>
<span class="nav-cover mobile"></span>
<div class="nav-desktop">
<ul class="sidebar-nav">
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/" class="elusive-icon Home" rel="me">Home</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://newsletter.pragmaticengineer.com/about" class="elusive-icon Newsletter" rel="me">Newsletter</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://pragmaticpodcast.com" class="elusive-icon Podcast" rel="me">Podcast</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/sponsors/" class="elusive-icon Sponsors" rel="me">Sponsors</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/ethics-statement/" class="elusive-icon Ethics statement" rel="me">Ethics statement</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/now/" class="elusive-icon Now" rel="me">Now</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/books/" class="elusive-icon My Books" rel="me">My Books</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/early-trends/" class="elusive-icon Early trends" rel="me">Early trends</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/investing/" class="elusive-icon Investing" rel="me">Investing</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/contact/" class="elusive-icon Contact me" rel="me">Contact me</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/about/" class="elusive-icon About" rel="me">About</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/feed/" class="elusive-icon RSS Feed" rel="me">RSS Feed</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://bsky.app/profile/gergely.pragmaticengineer.com/" class="elusive-icon bluesky" rel="me">bluesky</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="http://twitter.com/GergelyOrosz" class="elusive-icon twitter" rel="me">twitter</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://www.youtube.com/@pragmaticengineer" class="elusive-icon youtube" rel="me">youtube</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="http://www.linkedin.com/in/gergelyorosz" class="elusive-icon linkedin" rel="me">linkedin</a>
</li>
</ul>
</div>
<div class="site-wrapper">
<header class="main-header post-head no-cover">
<nav class="main-nav clearfix">
<a class="blog-logo" href="https://blog.pragmaticengineer.com"><img src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2015/12/pragmatic-engineer-profile-image.png" alt="The Pragmatic Engineer" /></a>
<a class="menu-button icon-menu" href="#"><span class="word">Menu</span></a>
</nav>
</header>
<main class="content" role="main">
<article class="post no-image">
<header class="post-header">
<h1 class="post-title">The Pulse: AI load breaks GitHub – why not other vendors?</h1>
</header>
<section class="post-content" id="content">
<!--
<p><em>Before we start: I'm hosting the first-ever <strong><a href="https://www.pragmaticsummit.com/">The Pragmatic Summit</a></strong> on 11 February, 2026, in San Francisco. Join 400 top engineers and leaders as we answer the question: How is AI reshaping software engineering, dev workflows, and the modern engineering stack?
Spaces are limited - don't miss out! <strong><a href="https://www.pragmaticsummit.com/">Buy tickets here</a></strong>.
</em></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 four topics from </em><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-github-breaks?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>last week’s The Pulse</em></a><em> issue. Full subscribers received the article below seven days ago. If you’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>GitHub’s reliability has been beyond unacceptable recently: last month, third party measurements pinned it at <a href="https://newsletter.pragmaticengineer.com/i/192229275/1-does-github-still-merit-top-git-platform-for-ai-native-development-status?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">one nine</a> (right at 90%). This month, reliability has been down to <em>zero</em> nines – 86% – as per <a href="https://mrshu.github.io/github-statuses/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">a third-party tracker</a>, and last week, things got even worse: a frankly embarrassing data integrity incident, more outages, and a partial explanation from GitHub, eventually.</p><h3 id="data-integrity-incident">Data integrity incident</h3><p>Last Thursday (23 April), <a href="https://www.githubstatus.com/incidents/zsg1lk7w13cf?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">this happened</a>: PRs merged via the merge queue using the squash merge method produced incorrect merge commits, when the merge group contained more than one PR. Commits were reverted from subsequent merges: basically, commits were “lost” in the code that was merged!</p><p>Thanks to <a href="https://www.githubstatus.com/incidents/zsg1lk7w13cf?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">a bug</a> GitHub introduced, the service broke its integrity promise that pull requests would be merged as expected when using <a href="https://docs.gitlab.com/user/project/merge_requests/squash_and_merge/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">squash merge</a>, which is a technique typically used to merge multiple small commits into a single, meaningful commit. This is a big deal: as data integrity promises are some of the most important ones, for services like GitHub.</p><p>A total of 2,092 pull requests were impacted, and companies hit by the outage included Modal and Zipline. Effectively, GitHub pushed a bunch of work on affected customers who had to manually untangle and recover lost commits, which GitHub could offer zero assistance with.</p><p>Customers had to manually go through their git history and restore missing code. After following manual recovery steps (reverting the squash commit and re-applying commits one by one), all commits should have been recovered.</p><p>GitHub <a href="https://x.com/davidxia_/status/2047642368724120043?s=20&ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">later emailed</a> the list of affected commits to customers, but it’s odd that GitHub executives seemed to downplay the nature of this outage. After all, an outage that messes with data integrity is a much bigger deal than something like a fall in availability where no data is corrupted.</p><p>Can Duruk, software engineer at Modal, <a href="https://x.com/can/status/2047823390342324572?s=20&ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">was unhappy</a> about GitHub’s muted response to the outage:</p><blockquote>“The COO going out of their way to find a huge denominator to make the impact appear small feels very dishonest; versus a sincere apology about how this invalidates their entire promise to their customers. We had to dig into their status page about this to even realize they just casually f***ed up our repo.”</blockquote><h3 id="outages-don%E2%80%99t-stop">Outages don’t stop</h3><p>On Monday (27 April), pull requests and issues disappeared from GitHub’s web UI:</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/05/image.png" class="kg-image" alt="" loading="lazy" width="1456" height="788" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/05/image.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/05/image.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/05/image.png 1456w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Pull requests go missing. Source: </em></i><a href="https://x.com/badlogicgames/status/2048803113683788138?s=20&ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">Mario Zechner</em></i></a></figcaption></figure><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/05/image-1.png" class="kg-image" alt="" loading="lazy" width="1198" height="298" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/05/image-1.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/05/image-1.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/05/image-1.png 1198w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Issues also not to be found. Source: </em></i><a href="https://x.com/zeeg/status/2048810616849355252?s=20&ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">David Cramer</em></i></a></figcaption></figure><p>This had to do with an Elasticsearch outage on GitHub’s backend: the cluster became overloaded and went down. So, while pull requests, issues, and projects didn’t vanish altogether, they also didn’t show up during <a href="https://www.githubstatus.com/incidents/ql942tw29yl6?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">the 6-hour-long outage.</a></p><p>There were other outages this week:</p><ul><li><a href="https://www.githubstatus.com/incidents/x69zbgdyfzg0?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Some pull requests not showing up</a> (Tuesday, 28 April)</li><li><a href="https://www.githubstatus.com/incidents/dbypmw7h77l5?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Problems with some GitHub Actions</a> (the same day)</li><li><a href="https://www.githubstatus.com/incidents/x69zbgdyfzg0?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Incomplete pull requests in repositories</a> (Wednesday, 29 April)</li></ul><p>Also on Tuesday (28 April), security firm Wiz <a href="https://www.wiz.io/blog/github-rce-vulnerability-cve-2026-3854?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">disclosed a critical security issue</a>, where a bad actor could get access to all repositories on GitHub and GitHub Enterprise server by using only a <em>git push</em> command. <em>GitHub fixed the issue on GitHub.com within six hours, but GitHub Enterprise servers that were not updated remain vulnerable.</em></p><h3 id="famous-open-source-contributor-quits-github-in-frustration">Famous open source contributor quits GitHub in frustration</h3><p>On Tuesday, Mitchell Hashimoto, founder of HashiCorp, creator of Ghostty, announced GitHub was unfit for professional work and that he was moving off to Ghostty, the open source terminal that’s his main focus. Mitchell’s reasoning <a href="https://mitchellh.com/writing/ghostty-leaving-github?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">was dead simple</a>: being on GitHub makes him unproductive (emphasis mine:)</p><blockquote>“The past month I’ve kept a journal where I put an “X” next to every date where a GitHub outage has negatively impacted my ability to work. Almost every day has an X. On the day I am writing this post, I’ve been unable to do any PR review for ~2 hours because there is a GitHub Actions outage. <strong>This is no longer a place for serious work if it just blocks you out for hours per day, every day.</strong><br><br>It’s not a fun place for me to be anymore. I want to be there, but it doesn’t want me to be there. I want to get work done and it doesn’t want me to get work done. I want to ship software and it doesn’t want me to ship software.<br><br>I want it to be better, but I also want to code. And I can’t code with GitHub anymore. I’m sorry. After 18 years, I’ve got to go. I’d love to come back one day, but this will have to be predicated on real results and improvements, not words and promises.”</blockquote><p>Mitchell’s experience suggests that GitHub’s official status page is inaccurate from the point of view of a heavy user like himself. The third-party “<a href="https://mrshu.github.io/github-statuses/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">missing GitHub status page</a>” is likely to be a better estimation: where GitHub’s reliability is at zero nines: at 85.51% uptime. That means that a part of GitHub was down for 2-3 hours, per day, on average, for the last 90 days (!!)</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/05/image-2.png" class="kg-image" alt="" loading="lazy" width="1456" height="516" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/05/image-2.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/05/image-2.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/05/image-2.png 1456w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Reliability woes: GitHub “not a place for serious work.” Source: </em></i><a href="https://mrshu.github.io/github-statuses/?ref=blog.pragmaticengineer.com" target="_blank" rel="noopener noreferrer nofollow"><i><em class="italic" style="white-space: pre-wrap;">The Missing GitHub Status Page</em></i></a></figcaption></figure><p>Mitchell’s complaint sounds straightforward:</p><ol><li>As a professional software engineer, it’s important to have tools that help you get work done</li><li>For months, GitHub has got in the way of his work on open source projects via a flood of outages</li><li>It makes no sense to use a product unfit for professional work.</li><li>As GitHub shows no signs of improvement, it’s worthwhile to move to a different solution which <em>just</em> <em>works</em></li></ol><h3 id="cto-blames-ai-agent-fuelled-load-spike">CTO blames AI agent-fuelled load spike</h3><p>GitHub CTO, Vlad Fedorov, <a href="https://github.blog/news-insights/company-news/an-update-on-github-availability/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">shared an update</a> on why reliability has been terrible for months at GitHub. He identified the load from agents being much bigger than expected as the culprit. Charts illustrating this were shared by GitHub:</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/05/image-3.png" class="kg-image" alt="" loading="lazy" width="1200" height="671" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/05/image-3.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/05/image-3.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/05/image-3.png 1200w" sizes="(min-width: 720px) 720px"></figure><p>This chart looks eye-catching – but there’s just one tiny issue: no Y axis! So, while it tells the story of the load going up slowly and then very fast, we’re not told by how much. However, I managed to get data from GitHub, and below is the chart showing the actual load increase over two years:</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/05/image-4.png" class="kg-image" alt="" loading="lazy" width="1456" height="913" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/05/image-4.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/05/image-4.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/05/image-4.png 1456w" sizes="(min-width: 720px) 720px"></figure><p><strong>A load increase of ~3.5x, spread across two years, doesn’t seem so brutal at first glance. </strong>It is nothing like a load increase of 10x in a month, and a good chunk of it occurred in recent months. So, why can’t GitHub handle it? In a blog post, Fedorov said:</p><blockquote>“A pull request can touch Git storage, mergeability checks, branch protection, GitHub Actions, search, notifications, permissions, webhooks, APIs, background jobs, caches, and databases. At large scale, small inefficiencies compound: queues deepen, cache misses become database load, indexes fall behind, retries amplify traffic, and one slow dependency can affect several product experiences.”</blockquote><p>Here’s how the per-second load numbers from January 2023 and today compare:</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/05/image-5.png" class="kg-image" alt="" loading="lazy" width="1456" height="633" srcset="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w600/2026/05/image-5.png 600w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/size/w1000/2026/05/image-5.png 1000w, https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2026/05/image-5.png 1456w" sizes="(min-width: 720px) 720px"></figure><p>GitHub took 15 years to achieve the 2023 numbers, and maybe it expected to continue growing in a comparable way in the future. If so, some engineering decisions about long-term infrastructure improvements would have been made obsolete by the arrival of AI agents.</p><p><strong>To add to GitHub’s challenges, the company is in the midst of a migration from its own data centers → Azure. </strong>In October last year, GitHub <a href="https://thenewstack.io/github-will-prioritize-migrating-to-azure-over-feature-development/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">started to</a> move over to Azure – a project expected to take 12 months – because it already had constraints on its own data center capacity.</p><p>Such large-scale infrastructure migrations are hard enough when the load on a service is relatively stable; just making sure nothing breaks takes a lot of effort. But moving at a time when load is spiking means that bugs can cause more visible outages. Of course, GitHub can secure a lot more compute capacity on Azure, now they know what to expect.</p><p><strong>But other major companies prepared for a 10x increase in infra load, so why not Microsoft / GitHub? </strong>A year ago, I did research on how Big Tech was preparing to respond to the impact of AI on their business. Google was improving its internal systems to accommodate for a 10x increase in load. As we covered in The Pragmatic Engineer, <a href="https://newsletter.pragmaticengineer.com/i/167269400/google?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">in July last year:</a></p><blockquote>“Google is preparing for 10x more code to be shipped. A former Google Site Reliability Engineer (SRE) told me:<br><br>“What I’m hearing from SRE friends is that they are preparing for 10x the lines of code making their way into production.”<br><br>If any company has data on the likely impact of AI tools, it’s Google. 10x as much code generated will likely also mean 10x more: code review, deployments, feature flags, source control footprint and, perhaps, even bugs and outages, if not handled with care.”</blockquote><p>Predicted enormous load increases were not secret knowledge within the industry, yet it seems GitHub was blissfully ignorant of their potential size. According to Vlad, GitHub did <em>eventually</em> plan for a need to increase capacity by 10x, but this was in October 2025, months later. In February 2026, the company is now adjusting that expectation to 30x. <a href="https://github.blog/news-insights/company-news/an-update-on-github-availability/?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">He wrote</a>:</p><blockquote>“We started executing our plan to increase GitHub’s capacity by 10X in October 2025 with a goal of substantially improving reliability and failover. By February 2026, it was clear that we needed to design for a future that requires 30X today’s scale.”</blockquote><p>There’s also the question of whether GitHub miscalculated how much time it had to prepare for explosive load growth, and whether it was caught off guard when that growth materialized months sooner than expected at the start of this year.</p><p><strong>Given GitHub only started to prepare for a major load increase in October, its current problems are unsurprising. </strong>At the scale of GitHub, it’s common enough for each team owning a service to plan a year ahead on how much load their service will have, and hardware resources like storage, VMs, and networking are allocated accordingly. Load planning can account for up to half of the preparations, and when reality doesn’t conform to plans, some systems can struggle to scale up.</p><p>So, on one hand, dealing with a 3.5x increase in load over 2 years should not be such a big deal for most services; especially not ones which can be horizontally scaled (when there’s not much state, and scaling is achieved simply by adding new nodes.) But GitHub probably stores a lot more state with pull requests, workflows, projects, etc. This probably makes scaling more tricky when it comes to databases and systems running workflows.</p><p><strong>GitHub also has 18 years of tech debt on its hands, and thousands of staff to align as “organizational overhead.” </strong>As its service load grows faster than before, responding is harder due to all that accumulated “debt”:</p><ul><li>Tech debt: many systems at the company are 10+ years old and are likely patched up, making them more difficult and risky to change</li><li>Organizational debt: around 4,000 people work at GitHub, of whom 1,000 are engineers. Teams have dependencies with each other, and even seemingly simple work can require dozens of engineers to work together</li><li>Customer expectations: GitHub cannot break customer workflows, even if doing so would mean changes to systems happen faster</li></ul><p>GitHub finds itself in the ‘innovator’s dilemma’: the company became successful because it built developer workflows that made sense, pre-AI, and it used to be able to accurately forecast service load changes. But now that engineering teams’ workflows include AI agents, GitHub’s own workflows are not necessarily the best fit, and the company failed to forecast service-level changes.</p><h3 id="other-vendors-floored-by-ai-load-not-really">Other vendors floored by AI load? Not really</h3><p>One thing that doesn’t add up about the situation is that other vendors who are presumably experiencing similar load spikes don’t appear to be suffering with reliability issues as much. Vercel, Linear, Resend, Railway, Sentry, and other infra providers see record-level growth thanks to AI, but keep up with the load.</p><p>Yes, it’s true that AI vendors like Anthropic, OpenAI, and Cursor have some reliability issues, but it’s not at the scale of GitHub’s. GitHub’s direct competitors, GitLab and Bitbucket, presumably see load going up similarly, but they’re not going down as much.</p><p><strong>An obvious question is how much of GitHub’s pain is self-inflicted? </strong>With Microsoft as owner, it has more resources at its disposal than any competitor or startup, and yet failed to predict load increases and is too big to respond with the nimbleness of a startup.</p><p>It’s undeniable that solving for a major load increase is a hard challenge; it’s when the difference between average and standout engineering teams is apparent. GitHub hasn’t been responding like a world-class engineering org.</p><h3 id="github-alternatives">GitHub alternatives?</h3><p>Every regular user of GitHub feels the pain of ongoing outages. As a dev, you can either hope Microsoft will <em>eventually</em> improve reliability, or seek alternatives. As covered above, Mitchell has chosen to quit and is currently deciding where to take Ghostty.</p><p>The obvious alternatives are GitHub’s biggest competitors, GitLab, and Bitbucket. Each offers Git hosting, and neither comes with the uptime woes that GitHub is suffering from.</p><p><strong>Self-hosted </strong>solutions are also an option, like self-hosting your git repo, or going with a <strong>self-hosted forge </strong>like <a href="https://tailscale.com/blog/self-hosted-git-server-tailscale-forgejo?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow">Forgejo</a>, which is an open source, local-first GitHub alternative.</p><p>I also suspect that, soon enough, we’ll see startups offering GitHub-like code hosting capabilities, while offering more robust uptime and being architected to handle the 30x-or-more scale which GitHub hopes one day to support.</p><p><em>Read the full issue of </em><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-github-breaks?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>last week’s The Pulse</em></a><em>, or check out </em><a href="https://newsletter.pragmaticengineer.com/p/the-pulse-did-capacity-shortages?ref=blog.pragmaticengineer.com" rel="noopener noreferrer nofollow"><em>this week’s The Pulse</em></a><em>. This week’s issue covers:</em></p><ol><li>Did Anthropic turn hostile on devs because capacity was running low?</li><li>Amazon finally allows Claude Code and Codex usage</li><li>Meta forcefully assigns engineers to data labelling ahead of job cuts</li><li>New trend: small “AI-forward” teams</li><li>Industry Pulse: why Meta tracks employees’ computer activity, OpenAI starts to move off Datadog, Apple lets slip it uses Claude Code, GitHub → Xbox transfers at Microsoft, VS Code inserted “coathored by Copilot” even when Copilot did nothing, analysis of the Coinbase layoffs</li></ol>
<!-- Newsletter -->
<p>
<a href="https://newsletter.pragmaticengineer.com/about">Subscribe to my weekly newsletter</a> to get articles like this in your inbox. It's a pretty good read - and the <a href="https://substack.com/top/technology">#1 software engineering newsletter</a> on Substack.
</p>
</section>
<footer class="post-footer">
<section class="podcast-details">
<h4>The Pragmatic Engineer Podcast</h4>
<p>
Deepdives with experienced engineers and tech professionals who share their hard-earned lessons, interesting stories and advice they have on building software.
</p>
<p>
Listen to it <a href="https://open.spotify.com/show/2Bho9xCbOQMWMJ7UKmqCzD">on Spotify</a>, on <a href="https://podcasts.apple.com/us/podcast/the-pragmatic-engineer/id1769051199">Apple</a>, on <a href="https://www.youtube.com/@pragmaticengineer">YouTube</a>, or <a href="https://pragmaticpodcast.com/">on the web</a>.
</p>
</section>
<section class="book-details">
<h4>The Software Engineer's Guidebook</h4>
<p>
I wrote <a href="https://www.engguidebook.com/">The Software Engineer's Guidebook</a>. Here is what Tanya Reilly, senior principal engineer and author of <a href="https://www.oreilly.com/library/view/the-staff-engineers/9781098118723/">The Staff Engineer's Path</a> says about it:
</p>
<blockquote>
"From performance reviews to P95 latency, from team dynamics to testing, Gergely demystifies all aspects of a software career. This book is well named: <strong>it really does feel like the missing guidebook for the whole industry.</strong>"
</blockquote>
<p style="padding-top:20px">
<a href="https://www.engguidebook.com/">
<img src="/assets/img/EngGuidebook.jpg" alt="The Software Engineer's Guidebook" style="width: 100%; max-width: 300px; margin: 0 auto; display: block;"/>
</a>
</p>
<p>
<a href="https://www.engguidebook.com/">Get the book here.</a>
</p>
</section>
<section class="conference-details">
<h4>Annual conference talk</h4>
<p>
Every year, I do one conference talk in the US, and one in Europe. <strong>My next conference talk is at <a href="https://leaddev.com/leaddev-new-york/?utm_source=pragmaticengineer&utm_medium=email&utm_campaign=pragmaticengineer">LDX3 New York</a>, on 15 September 2026.</strong>
Previous talks:
</p>
<ul>
<li><a href="https://newsletter.pragmaticengineer.com/p/slow-down-to-speed-up">Slow down to speed up</a> - Craft Conference, 2026</li>
<li><a href="https://newsletter.pragmaticengineer.com/p/software-engineering-with-llms-in-2025">Software engineering with LLMs: reality check</a> - LDX3, London, 2025</li>
</ul>
<p>
<strong>
</strong>
</p>
<!--
In 2025, this will be at <a href="https://leaddev.com/leaddev-london/?utm_source=the-pragmatic-engineer&utm_medium=newsletter-social&utm_campaign=LON25-media-community-partner">LDX3 (formerly: LeadDev)</a> in London, 16 June 2025. My keynote is titled "Software engineering with GenAI." If you'll <a href="https://leaddev.com/leaddev-london/?utm_source=the-pragmatic-engineer&utm_medium=newsletter-social&utm_campaign=LON25-media-community-partner">be there</a>, come say hi!
-->
</section>
<section class="newsletter" id="newsletter-second"> <!-- Section that gets moved up -->
<h4>Newsletter</h4>
<p>
Enjoying this article? <a href="https://newsletter.pragmaticengineer.com/about">Subscribe to my newsletter</a> to get issues like this in your inbox. It's a good read and the <a href="https://substack.com/top/technology">#1 software engineering / AI engineering newsletter</a> on Substack.
</p>
</section>
<section class="authorAndShare">
<section class="author">
<h4><a href="/author/gergely/">Gergely Orosz</a></h4>
<section class="post-meta">
Last updated <time class="post-date" datetime="2026-05-07">07 May 2026</time>. Originally published 07 May 2026.
<br>&copy; Gergely Orosz, 2026
</section>
<p>Writing The Pragmatic Engineer Newsletter. Author of The Software Engineer&#x27;s Guidebook. Previously at Uber, Microsoft, Skype, Skyscanner.</p>
<div class="author-meta">
<span class="author-location icon-location">Amsterdam, Netherlands</span>
</div>
</section>
<section class="share">
<h4>Share this post</h4>
<a class="icon-twitter" href="https://twitter.com/intent/tweet?text=The%20Pulse%3A%20AI%20load%20breaks%20GitHub%20%E2%80%93%20why%20not%20other%20vendors%3F&amp;url=https://blog.pragmaticengineer.com/the-pulse-ai-load-breaks-github/"
onclick="window.open(this.href, 'twitter-share', 'width=550,height=235');return false;">
<span class="hidden">Twitter</span>
</a>
<a class="icon-facebook" href="https://www.facebook.com/sharer/sharer.php?u=https://blog.pragmaticengineer.com/the-pulse-ai-load-breaks-github/"
onclick="window.open(this.href, 'facebook-share','width=580,height=296');return false;">
<span class="hidden">Facebook</span>
</a>
</section>
<section>
</footer>
</article>
</main>
<aside class="sidebar">
<img class="profile-image" src="https://storage.ghost.io/c/39/f8/39f85cc7-8637-40fc-a57c-f45754453717/content/images/2015/12/pragmatic-engineer-profile-image.png" alt="" />
<!--
// to display a custom image, copy the image into assets/img/profile-img.png and replace the previous line with this:
<img class="profile-image" src="https://blog.pragmaticengineer.com/assets/img/profile-image.png?v=0ccd6679d9" alt="" />
-->
<section class="publisher">by <strong>Gergely Orosz</strong></section>
<div class="nav mobile">
<h3 class="nav-title">Menu</h3>
<a href="#" class="nav-close">
<span class="hidden">Close</span>
</a>
<ul>
<li class="nav-home elusive-icon Home" role="presentation"><a href="https://blog.pragmaticengineer.com/">Home</a></li>
<li class="nav-newsletter elusive-icon Newsletter" role="presentation"><a href="https://newsletter.pragmaticengineer.com/about">Newsletter</a></li>
<li class="nav-podcast elusive-icon Podcast" role="presentation"><a href="https://pragmaticpodcast.com">Podcast</a></li>
<li class="nav-sponsors elusive-icon Sponsors" role="presentation"><a href="https://blog.pragmaticengineer.com/sponsors/">Sponsors</a></li>
<li class="nav-ethics-statement elusive-icon Ethics statement" role="presentation"><a href="https://blog.pragmaticengineer.com/ethics-statement/">Ethics statement</a></li>
<li class="nav-now elusive-icon Now" role="presentation"><a href="https://blog.pragmaticengineer.com/now/">Now</a></li>
<li class="nav-my-books elusive-icon My Books" role="presentation"><a href="https://blog.pragmaticengineer.com/books/">My Books</a></li>
<li class="nav-early-trends elusive-icon Early trends" role="presentation"><a href="https://blog.pragmaticengineer.com/early-trends/">Early trends</a></li>
<li class="nav-investing elusive-icon Investing" role="presentation"><a href="https://blog.pragmaticengineer.com/investing/">Investing</a></li>
<li class="nav-contact-me elusive-icon Contact me" role="presentation"><a href="https://blog.pragmaticengineer.com/contact/">Contact me</a></li>
<li class="nav-about elusive-icon About" role="presentation"><a href="https://blog.pragmaticengineer.com/about/">About</a></li>
<li class="nav-rss-feed elusive-icon RSS Feed" role="presentation"><a href="https://blog.pragmaticengineer.com/feed/">RSS Feed</a></li>
<li class="nav-bluesky elusive-icon bluesky" role="presentation"><a href="https://bsky.app/profile/gergely.pragmaticengineer.com/">bluesky</a></li>
<li class="nav-twitter elusive-icon twitter" role="presentation"><a href="http://twitter.com/GergelyOrosz">twitter</a></li>
<li class="nav-youtube elusive-icon youtube" role="presentation"><a href="https://www.youtube.com/@pragmaticengineer">youtube</a></li>
<li class="nav-linkedin elusive-icon linkedin" role="presentation"><a href="http://www.linkedin.com/in/gergelyorosz">linkedin</a></li>
</ul>
<a class="subscribe-button icon-feed" href="https://blog.pragmaticengineer.com/rss/">Subscribe</a>
</div>
<span class="nav-cover mobile"></span>
<div class="nav-desktop">
<ul class="sidebar-nav">
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/" class="elusive-icon Home" rel="me">Home</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://newsletter.pragmaticengineer.com/about" class="elusive-icon Newsletter" rel="me">Newsletter</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://pragmaticpodcast.com" class="elusive-icon Podcast" rel="me">Podcast</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/sponsors/" class="elusive-icon Sponsors" rel="me">Sponsors</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/ethics-statement/" class="elusive-icon Ethics statement" rel="me">Ethics statement</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/now/" class="elusive-icon Now" rel="me">Now</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/books/" class="elusive-icon My Books" rel="me">My Books</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/early-trends/" class="elusive-icon Early trends" rel="me">Early trends</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/investing/" class="elusive-icon Investing" rel="me">Investing</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/contact/" class="elusive-icon Contact me" rel="me">Contact me</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/about/" class="elusive-icon About" rel="me">About</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://blog.pragmaticengineer.com/feed/" class="elusive-icon RSS Feed" rel="me">RSS Feed</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://bsky.app/profile/gergely.pragmaticengineer.com/" class="elusive-icon bluesky" rel="me">bluesky</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="http://twitter.com/GergelyOrosz" class="elusive-icon twitter" rel="me">twitter</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="https://www.youtube.com/@pragmaticengineer" class="elusive-icon youtube" rel="me">youtube</a>
</li>
<li class="nav-desktop" role="presentation">
<a href="http://www.linkedin.com/in/gergelyorosz" class="elusive-icon linkedin" rel="me">linkedin</a>
</li>
</ul>
</div>
<ul>
<li><a href="https://blog.pragmaticengineer.com/newsletter" class="elusive-icon email">Subscribe via email</a></li>
<li><a href="http://feeds.feedburner.com/ThePragmaticEngineer" class="elusive-icon rss">Subscribe in a reader</a></li>
</ul>
<footer class="site-footer clearfix">
<section class="copyright"><a href="https://blog.pragmaticengineer.com">The Pragmatic Engineer</a> &copy; 2026</section>
</footer>
</aside>
<aside class="read-next">
<a class="read-next-story no-cover" href="/techpays-has-been-acquired-levels-fyi/">
<section class="post">
<h2>TechPays has been acquired by Levels.fyi</h2>
<p>tl;dr: TechPays is joining Levels.fyi: so the leading tech salary site in Europe gets the love and&hellip;</p>
</section>
</a>
<a class="read-next-story prev no-cover" href="/the-pulse-token-spend-breaks-budgets-what-next/">
<section class="post">
<h2>The Pulse: token spend breaks budgets – what next?</h2>
<p>In the past 2-3 months, spending on AI agents has exploded at many tech companies, Details from 15 of them, including the different ways they are coping with this realization.&hellip;</p>
</section>
</a>
</aside>
<!-- Signup move up -->
<script>
let contentParent = document.getElementById("content");
let newsletterWithFormElement = document.getElementById("newsletter");
let newsletterWithoutFormElement = document.getElementById("newsletter-second");
let newsLetterTargetPosition = getLastElementBeforeSpecificNode(contentParent.children, "H2", 2); // Add after the 2nd h2
if(contentParent.children.length > newsLetterTargetPosition) {
let nextSibling = contentParent.children[newsLetterTargetPosition];
contentParent.insertBefore(newsletterWithoutFormElement, nextSibling);
} else {
newsletterWithoutFormElement.style.display = "none"
}
function getLastElementBeforeSpecificNode(nodes, nodeName, numberOfNodesToPass) {
var numberOfSpecificNodessSeen = 0;
for(let i=0;i<nodes.length; i++) {
if(nodes[i].nodeName == nodeName) {
numberOfSpecificNodessSeen += 1;
}
if(numberOfSpecificNodessSeen == numberOfNodesToPass+1) {
if(i > 0) {
return i;
} else {
return nodes.lenght;
}
}
}
}
</script>
</div>
<!-- Geniuslink -->
<!--
<script type="text/javascript" src="//cdn.geni.us/snippet.min.js" defer></script>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function() {
var tsid =116191;
Genius.amazon.addOnClickRedirect(tsid, false, "https://buy.geni.us"); });
</script>-->
<!-- Google Analytics -->
<!--
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-7745037-4', 'auto');
ga('send', 'pageview');
</script>
-->
<!-- Plausible -->
<script async defer data-domain="blog.pragmaticengineer.com" src="https://plausible.io/js/plausible.js"></script>
<!-- Source code higlighting -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/prism.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/plugins/line-numbers/prism-line-numbers.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/components/prism-javascript.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/components/prism-css.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="https://blog.pragmaticengineer.com/assets/js/jquery.fitvids.js?v=z1Nmfc9MKQxCtlIV"></script>
<script type="text/javascript" src="https://blog.pragmaticengineer.com/assets/js/index.js?v=wmn33DUYd3qPYenJ"></script>
</body>
</html>