Information Technology · Friday, 21 August 2026
01 · Briefing · what happened
GitHub fell over for eight hours, and the retries are what kept it down
A wrongly-tuned autoscaler and a dormant retry bug in VS Code took the world's biggest code host out for most of a working day. A rival code host launched three and a half hours before the status page went red.
7h 47m
the outage, by GitHub's own clock
outside counts say 6h 42m of degradation
10x
traffic multiplied by a retry bug
a dormant fault in VS Code, triggered by slow replies
50%
error rate on file downloads
about 20% on pull requests and the API
48
major GitHub incidents in a year
out of 257 logged, May 2025 to April 2026
At a glance
- GitHub went down at 13:28 UTC on 17 August and was not fully clear until 21:15 UTC.
- The first cause was small: one helper process hit its limit and the autoscaler was watching the wrong number.
- Automatic retries turned that into the outage - a bug in VS Code multiplied traffic about tenfold.
- Engineers recovered by cutting retries and refusing requests outright, not by adding servers.
- Error rates hit about 20% on pull requests and the API, and about 50% on file downloads.
- Cursor launched a rival code host three and a half hours before the status page went red.
- GitHub has logged 257 incidents in a year, 48 of them major - roughly one bad week in every week.
Forces in play
Every tool that talks to GitHub asks again when it fails. A dormant bug in VS Code turned that habit into ten times the traffic, and kept one service down five hours after the rest recovered.
GitHub has been the obvious place to keep code for eighteen years. After 48 major incidents in twelve months, the Zig language and the Ghostty terminal have both left, and OpenAI is building its own.
GitHub says AI coding assistants and agents are part of the strain. Inside Cursor, about a third of merged code changes are now opened by software running on its own.
Cursor's Origin launched hours before the outage and deliberately does not ask anyone to migrate. GitHub stays in charge of the code; Origin just becomes where the work happens.
Etched doubled to $21bn in under a month and Velaura passed $1bn, both selling hardware to run models more cheaply. Groq is the counter-case, raising at half its value from a year ago.
How it unfolded
- Mon morning Cursor starts rolling out Origin, its own code host
- Mon 13:28 a helper process hits its limit; load balancers saturate
- Mon 16:36 most services recover; retries keep Copilot's token service down
- Mon 21:15 GitHub declares the incident closed, 7h 47m after it began
- Wed GitHub's report names optimistic retries and a VS Code bug
Where this points
Watch whether GitHub's promised fixes to retry limits land before the next incident, which on a year of averages is about a week away.
Full briefing
The eight hours GitHub could not shake off
GitHub published its account of Monday’s outage on Wednesday, and the reason is unusually plain
The first cause was tiny. Network traffic saturated load balancers in GitHub’s Central US facility when an Istio sidecar hit its concurrency limit
It got worse in one specific place. “Delayed replies to a single internal endpoint triggered a latent retry bug in Visual Studio Code that amplified traffic by approximately 10x,” GitHub said
Note how they got out. Engineers cut gateway retries with a code change, then told the load balancers to answer inbound Copilot token requests with an outright HTTP 403 refusal
The damage was broad while it lasted. Error rates ran near 20% across pull requests, issues and the API, and near 50% on archive and raw file downloads
This is not a first. An analysis by LeadDev counted 257 GitHub incidents between May 2025 and April 2026, 48 of them major, with Actions alone accounting for 57
The timing was almost cruel. Cursor began rolling out Origin, its own code-hosting platform, to paid users on Monday morning - roughly three and a half hours before GitHub’s status page lit up
The angle. If you run engineering, the practical question is not whether to leave GitHub. It is whether your build and deploy tooling retries on failure, how many times, and whether anyone has ever measured what your fleet does to a slow dependency. GitHub’s own remediation list is a decent checklist: correct the autoscaling policy, review retry limits, audit concurrency settings
The agents everyone deployed are now the thing breaking in
OpenAI said on Tuesday it is slowing down model development while it rebuilds its research and training systems
Reuters reported on Thursday how one of these agents was actually caught
Two more this week in the same family. Researchers at Adversa showed that Grok will follow instructions hidden as encrypted text on a web page, if the page also carries the key and how to use it
Meanwhile the tools for finding flaws keep getting cheaper. Ray is the open-source engine that distributes a great deal of AI training work across many machines. CISA added a code-injection flaw in it to the actively-exploited list on 17 August, giving federal agencies until the 20th to patch
The breach count is already past last year
Reported data compromises reached 1,803 in the first half of 2026, against 1,732 in the same period of 2025, according to the Identity Theft Resource Center
The week filled in the detail. CareCloud stores electronic medical records for tens of thousands of US healthcare providers. It told federal regulators that more than 3.75 million people had data taken in a March break-in, now the fifth-largest health-data theft of 2026
One story from the other direction is worth keeping. Bloomberg reported how T-Mobile expelled Chinese state hackers from its network in 2024: staff drove to a data centre and physically cut the cable to the compromised system
The money keeps landing one layer below the models
Etched raised $700 million this week at a $21 billion valuation - more than double what it was worth in a July round, less than a month earlier
Not every line goes up. Groq raised $350 million at $3.5 billion, roughly half what it was worth nearly a year ago
Two smaller signals. Ramp’s spending data covers more than 70,000 US businesses. As of July it puts Anthropic at nearly 44% of paying business users to OpenAI’s nearly 40%, a gap that has narrowed since May
Under-covered: a new 5G network for South Africa
Comsol Networks is finishing a multi-billion-rand debt and equity raise to build a new 5G network in South Africa, its founder and chief executive Iain Stevenson told Bloomberg
02 · Lesson · why it matters
The failure that keeps itself alive
When a system slows, everything waiting asks again - and the asking becomes the load. Remove the cause and the outage carries on.
How it works
- Something small slows down
- Everything waiting on it asks again
- The asking is now the load
- The load keeps it slow
- Removing the first cause changes nothing
- You get out by refusing work
The twist
A queue drains when demand falls. A retry storm is the opposite: demand rises when service falls, so the failure feeds itself and the original cause becomes irrelevant.
Where you've seen this
Bank runs
each person queuing is rational, and the queue is the crisis
Motorway jams
the phantom jam outlives the car that braked, by hours
Ambulance queues
crews stuck outside a full hospital are crews not answering calls
Busy phone lines
callers who cannot get through redial, which is why nobody gets through
The catch
Shedding load works because someone is refused. The engineers who cut retries chose which requests to sacrifice, and that choice is rarely written down anywhere the people refused can see it.
Full lesson
The fault was gone long before the outage was
The thing that broke GitHub on Monday was small. One helper process hit a limit it was allowed to hit. The machinery that should have grown to meet it was watching a different number, so it did not grow. That is a Tuesday-morning misconfiguration, the sort every large system carries dozens of.
It produced seven hours and forty-seven minutes of a working day in which a large share of the world’s programmers could not merge code.
The gap between those two facts is the whole lesson. Somewhere between the small fault and the long outage, the failure stopped depending on its cause.
A queue drains. This does not.
The ordinary picture of an overloaded system is a queue. Too many people, not enough tills, the line grows. It is uncomfortable but it is well behaved, because the demand is set somewhere outside the shop. When the rush passes, the queue drains. Nothing the till does changes how many people walk through the door.
A retry storm turns that arrow around. The demand is produced by the failure. Every request that times out does not simply vanish; the software that sent it tries again, because that is what software does when an answer does not come back. So the slower the service gets, the more requests arrive. The more requests arrive, the slower it gets.
GitHub’s own account named it twice. Optimistic retry logic overloaded the internal load balancers. And a dormant retry bug in a code editor, woken by slow replies from one internal address, multiplied the traffic to it roughly tenfold.
This is not the familiar worry about work being done twice when a confirmation goes missing. Nothing here is duplicated in any way that matters. The question is not whether the job ran twice. It is whether the system can ever get back up.
Two ways to sit still
A system with this shape has two resting states, and both are stable.
In the first, everything is served, nothing fails, nothing retries, and the load is just the load. In the second, enough is failing that the retries alone keep it failing, and there it sits. A brief fault is all it takes to cross from one to the other. Removing that fault will not carry you back.
You can watch the crossing in the timeline. The load balancers recovered. Most services were back within three hours. The one endpoint caught in its own retry loop took another five, long after the original saturation was over. It was no longer suffering from anything but the attempts to reach it.
The instinct at that point is to add capacity, and it is usually a poor one. More capacity means more requests served, more clients unblocked, and more traffic aimed at the part that is still slow. The storm scales with what you feed it.
Getting out means refusing
What actually worked was subtraction. Engineers cut the number of retries the gateways would make. Then they told the load balancers to answer one class of request with a flat refusal. Not a slow failure that invites another attempt - an immediate no.
That is load shedding: deliberately serving less so that anything gets served at all. GitHub had already named the absence of it, in an engineering post months earlier, as one of the reasons its incidents ran long.
It is worth sitting with what that decision is. Someone chose which requests would be thrown away, and everyone whose request was thrown away was a person waiting on their work.
Nobody chose the aggregate
Retry-on-failure is the default nearly everywhere. It is also, for one user, obviously right - a network blips, the second attempt succeeds, nobody notices. The behaviour that is correct for each person alone is the behaviour that sinks all of them together, and no one ever decided that. It arrived one sensible library at a time, each shipping a default that made its own users’ lives better.
The bug in the editor is described as latent. It had been sitting there, looking correct, waiting for a condition that had not yet happened.
What the storm reaches
None of this stays inside engineering. Your card terminal retries. Your train app retries. Your phone reconnects on its own, over and over, when a mast is struggling. When a website is down and you press refresh, you have joined the load. It is the same shape as redialling a number you cannot get through on, and the reason nobody can get through.
Every part of Monday behaved reasonably. The monitoring watched a real number, just not the one that mattered. The retry existed to help. The developer pressing refresh wanted their afternoon back. A system can be assembled entirely from correct parts and still hold a way of sitting still that none of those parts can see. And the people inside it are not looking down at the whole. They are looking at one screen that will not load.
03 · Lab · your turn
Ride Out The Storm
Rehearse an outage that keeps itself alive, and find the only moves that end it.
04 · Hope · carry this
The way out was found the same day, by people reading their own logs. Then they published what they got wrong, which is how a system nobody sees whole still gets better.
More from Information Technology