Artwork for podcast Software Architecture Insights
The Limits Nobody Graphed
Episode 14 • 13th October 2026 • Software Architecture Insights • Lee Atchison
00:00:00 00:09:30

Share Episode

Shownotes

GitHub published five incidents for August 2026. Three of them are the same failure.

On the 17th, seven and a half hours of degraded service: 29,000 organizations, 4.8 million requests failed or slow, 56% of front-door requests failing at the peak. Three weeks, three incidents, one blind spot — capacity ran out in places nobody was graphing.

Your autoscaler scales the thing you are observing. Saturation happens in the thing you don't.

In this episode:

  • The August 17th outage, and the two beside it on the 6th and the 26th
  • Sidecar concurrency, network flow tables, database primary headroom: limits with no dashboard
  • Why these limits are dangerous: someone else's layer, hard rather than soft, invisible
  • Retry amplification, and how one data center's capacity problem became an authentication outage everywhere
  • Protective throttles set so high they engaged after the damage was done
  • Two lists to build this week: your real hard limits, and your retry code

Links:

Transcripts

Lee:

Hello and welcome to Software Architecture Insights, your go-to

Lee:

resource for empowering software architects and aspiring professionals

Lee:

with the knowledge and tools they require to navigate the complex

Lee:

landscape of modern software design.

Lee:

On the 17th of August, GitHub had the kind of day that nobody wants.

Lee:

Issues, pull requests, The REST and GraphQL APIs, actions,

Lee:

Copilot, authentication, webhooks, all of it degraded or failing

Lee:

for seven and a half hours.

Lee:

At the peak, 56% of requests through the front door failed or crawled.

Lee:

About 29,000 organizations felt it.

Lee:

Roughly 4.8 million requests either failed outright or took long enough

Lee:

that the person waiting gave up.

Lee:

Now that's a bad day, and talking about it and digesting what happened is a fairly

Lee:

ordinary teardown postmortem review.

Lee:

But what makes this one worth your time is what happened in

Lee:

the three weeks around it GitHub published five incidents for August.

Lee:

Three of them are the same failure.

Lee:

On the sixth, a routine display reduced pod capacity in one data center.

Lee:

The sites still running went past their concurrency limits, and the

Lee:

service mesh sidecar started CPU throttling and restarting out of memory.

Lee:

The incident went on for 10 hours and 42 minutes

Lee:

On the 17th, a new traffic peak pushed one data center's load

Lee:

balancers past their limits.

Lee:

The service mesh sidecar hit its concurrency limit and

Lee:

didn't scale up correctly.

Lee:

Network flow limits ran out across multiple load balancer nodes.

Lee:

On the 26th, actions growth month over month outran the infrastructure,

Lee:

and a traffic burst saturated the shared database primary.

Lee:

One in five run starts failing at the peak Three times in three weeks, capacity

Lee:

ran out somewhere nobody was watching.

Lee:

Production traffic found the limit before any monitoring ever did.

Lee:

Three separate incidents, one underlying blind spot.

Lee:

And a blind spot at a company with GitHub's engineering depth

Lee:

is worth more of your attention than a single bad afternoon.

Lee:

Here is the idea.

Lee:

Your autoscaler scales the thing you are observing.

Lee:

Saturation happens in the thing that you don't observe.

Lee:

Think about what you actually have scaling policy set on.

Lee:

Pods probably, CPU, and memory.

Lee:

Maybe request rate or queue depth if you've done the work on those.

Lee:

Now think about what actually ran out at GitHub.

Lee:

Service mesh sidecar concurrency, network flow table entries on the load

Lee:

balancer node, headroom on a database primary once a fallback path turned on.

Lee:

Nobody writes a scaling policy against sidecar concurrency.

Lee:

I've never seen a dashboard with flow table entries on it,

Lee:

and I bet you haven't either.

Lee:

These limits have three things in common, and the combination

Lee:

is what makes them dangerous.

Lee:

They live deep in the infrastructure plumbing rather than up in your

Lee:

application, so they belong to a layer that somebody else chose.

Lee:

They're hard limits rather than soft ones, which means the behavior past the limit

Lee:

is a cliff instead of a slope, and they have no dashboard, hence no visibility.

Lee:

GitHub's own follow-up list gives the game away.

Lee:

Correct the autoscaling policies to account for sidecar concurrency.

Lee:

Audit request, concurrency, and scaling limits across the whole service mesh.

Lee:

They went looking for the limits they didn't know that they had.

Lee:

That's the work that was needed There's a second thread in the August 17th

Lee:

incident that deserves its own attention.

Lee:

A latent bug in client's retry logic amplified traffic into the

Lee:

shared gateway authentication path.

Lee:

So a capacity problem in one data center's load balancers became an authentication

Lee:

failure across the entire product.

Lee:

Sign-in is upstream of everything, which is why the blast radius covered

Lee:

everything, issues, pull requests, the APIs and actions, everything all at once.

Lee:

Part of GitHub's remediation was blocking the retry triggering

Lee:

requests to that endpoint.

Lee:

In other words, to recover from the outage, they first had to stop their

Lee:

own clients from hammering them.

Lee:

Retry logic tends to get written once early in a product life cycle

Lee:

by whoever was creating the client.

Lee:

Then nobody touches it for years, and it sits there quietly working the same

Lee:

way, whether it's effective or not.

Lee:

GitHub's follow-up is to review and fix retry and backoff limits in its clients

Lee:

to prevent amplification cascades.

Lee:

It's worth stealing that sentence for your own backlog One more interesting

Lee:

thing from the 26th incident.

Lee:

This one is short.

Lee:

They had protective throttles, but the throttles were set too high, so they

Lee:

engaged after the damage was already done.

Lee:

Engineers tuned them by hand during the incident, then raised them back

Lee:

gradually while watching telemetry.

Lee:

The circuit breaker was there.

Lee:

It was configured to trip after the fire was already burning.

Lee:

Their fix is to make it automatic rather than manual.

Lee:

A throttle a human has to set during an incident is not a safety mechanism.

Lee:

It's a second job for somebody who already has one.

Lee:

So two things for you to do.

Lee:

First, go find as many of your real hard limits as you can.

Lee:

I don't mean your capacity plan, which covers the resources you decided to buy.

Lee:

I mean the limits sitting inside the layers that you didn't choose Sidecar

Lee:

concurrency, connection tables, flow tables, file descriptors, thread pools,

Lee:

database connections, queue depths.

Lee:

For each one of those, ask yourself two questions.

Lee:

Do you know what the limit is?

Lee:

And does anything tell you before the limit is reached?

Lee:

Most teams can't answer the first question for most of the list, and that

Lee:

by itself is a finding worth taking to your next architecture review.

Lee:

Second, go read your retry code.

Lee:

When a dependency starts failing, does the client back off?

Lee:

And is there any cap on total retry volume across all of your clients at once?

Lee:

If a retry storm is possible, then every hard limit on that first list stops being

Lee:

a slowdown and turns into an outage.

Lee:

That's the connection between the two lists, and it's why GitHub's

Lee:

bad day was seven and a half hours instead of 40 minutes.

Lee:

A link to GitHub's August availability report is in the show notes.

Lee:

It covers all five of these incidents, and it's more specific than most

Lee:

companies are willing to talk about their own capacity limits.

Lee:

Hats off to them.

Lee:

By publishing the information, they are holding themselves accountable, and

Lee:

they're helping the rest of the industry.

Lee:

Take a look at it.

Lee:

Read the whole month rather than just the 17th incident.

Lee:

The pattern is the point

Lee:

Thank you for joining us on Software Architecture Insights.

Lee:

If you found this episode interesting, please tell your friends and colleagues.

Lee:

You can listen to Software Architecture Insights on all

Lee:

of the major podcast platforms.

Lee:

And if you want more from me, take a look at some of my many articles

Lee:

at softwarearchitectureinsights.com.

Lee:

And while you're there, join the 2000 people who have subscribed to my

Lee:

newsletter, so you always get my latest content as soon as it's available.

Lee:

Thank you for listening to Software Architecture Insights.

Chapters

Video

More from YouTube

More Episodes
14. The Limits Nobody Graphed
00:09:30
13. When Everything Is Critical, Nothing Is
00:16:01
12. The Role of AI in Modern Software Development with Burke Holland
00:30:54
11. Understanding AI Security Risks with Preston Wood
00:25:43
10. AI Hype vs Application Reality: How Architects Can Keep Their Products on Track in 2025
00:13:42
9. Navigating Modern Data Challenges with Optical Storage: Greg Kittilson, VP Engineering of Folio Photonics
00:44:26
8. Why should I care about AI?
00:08:40
7. Navigating Cloud Infrastructure using AI with Marcin Wyszynski, Spacelift
00:30:31
6. Navigating AI Development with InWorld's Kylan Gibbs
00:39:37
5. Get Rid of Your Users - The Role of Transactional vs Experiential Applications
00:11:58
4. Why File Uploads Are Hard: Lessons from Uploadcare's Founder Igor Debatur
00:24:10
3. Five Best Practices for Mastering Configuration in Cloud Native Applications
00:09:19
2. From Finance to Healthcare: Navigating the Shift with Michi Kono
00:30:14
1. The New Reality of Software Development: AI's Impact on Code Quality
00:11:06
trailer Welcome to Software Architecture Insights - Starting this Fall
00:02:18