DEV Community

Ajay Agrawal
Ajay Agrawal

Posted on

GitHub Isn't Built the Way Most Developers Think

I always assumed GitHub was just Git running on really powerful servers.

It sounded reasonable.

Bigger machines. Better networking. More storage.

The deeper I dug into GitHub's engineering, the more I realized that assumption was completely wrong.

GitHub is not "Git at scale."

It's an enormous distributed platform that happens to use Git as one of its core building blocks.

That distinction changed how I think about system design.


The First Misconception

Most developers, including me, naturally think GitHub revolves around Git.

But think about everything you use on GitHub every day.

  • Pull Requests
  • Issues
  • Actions
  • Discussions
  • Projects
  • Notifications
  • Code Search
  • Copilot

None of those are Git.

Git stores commits, trees, blobs, and history.

Everything else is infrastructure built around it.

Once I realized that, GitHub's architecture started making a lot more sense.


Git Is Amazing.

Just Not at Everything.

This was probably the hardest idea for me to digest.

Git is one of the greatest developer tools ever created.

But Git was never designed to be:

  • a search engine
  • a notification system
  • a permissions database
  • a collaboration platform
  • an analytics engine

Trying to make Git do all of those things would be like trying to use PostgreSQL as a CDN.

Wrong tool.

Wrong problem.

Instead of forcing Git to solve problems it wasn't built for, GitHub built specialized systems around it.

That feels obvious in hindsight.

But it wasn't obvious to me before I started reading more about how GitHub actually works.


One Line That Stuck With Me

While listening to the GitHub Engineering Podcast, one idea kept coming up.

Here's to the link to the podcast I am talking about: https://youtu.be/LeUUxLRdvho

System design isn't about choosing databases.

That sounds almost too simple.

But the more I thought about it, the more accurate it became.

Most tutorials compare technologies.

PostgreSQL vs MongoDB.

Kafka vs RabbitMQ.

Redis vs Memcached.

Those are useful discussions.

But companies operating at GitHub's scale are usually solving completely different problems.

Problems like:

  • How do deployments happen without downtime?
  • How do you migrate billions of records safely?
  • How do you recover from failures?
  • How do thousands of engineers ship code every day without stepping on each other?

Those aren't framework questions.

They're engineering questions.


The Part Nobody Likes Talking About

Everyone loves talking about microservices.

Very few people enjoy talking about operational discipline.

Yet that's where most of the engineering effort seems to go.

Reliability.

Monitoring.

Replication.

Observability.

Incident response.

Deployment tooling.

Database migrations.

None of those topics generate thousands of likes on social media.

Yet they're the reason platforms like GitHub stay online.

Sometimes the least exciting engineering work creates the biggest impact.


GitHub Still Has a Monolith

This surprised me the most.

Whenever people talk about scaling, the conversation usually ends with:

Break everything into microservices.

GitHub took a different path.

A large part of GitHub still runs on a Ruby on Rails monolith.

Yes.

Rails.

At the scale of millions of developers.

Instead of rewriting everything, GitHub invested heavily in making the existing system faster, safer, and easier to deploy.

Sometimes improving an architecture is a better investment than replacing it.

I think that's a lesson a lot of teams overlook.


Scale Changes Everything

A database query can feel instant.

Until millions of people execute it at the same time.

A Git clone feels fast.

Until hundreds of thousands happen every hour.

A cache looks efficient.

Until cache invalidation becomes harder than the original problem.

The algorithms don't suddenly become worse.

The numbers simply become absurd.

That's when architecture starts mattering more than individual code.


The Biggest Mindset Shift

One idea changed the way I look at system design.

Instead of asking:

Can this system scale?

I've started asking:

How does this system fail?

Every distributed system will fail eventually.

Machines fail.

Networks fail.

Deployments fail.

Humans definitely fail.

Good engineering isn't about pretending failures won't happen.

It's about making recovery predictable.

That feels like a much healthier way to think about building software.


Final Thoughts

I started reading about GitHub because I wanted to understand how one of the largest developer platforms operates.

I expected to learn about distributed systems.

I ended up learning something more valuable.

Great engineering isn't always about using the newest technology.

It's often about understanding the limits of existing technology and designing around those limits.

That mindset is something I'm trying to carry into every project I build.


References

If you're interested in learning more, these are worth exploring.


If you've read something about GitHub's architecture that completely changed your perspective, I'd love to hear about it.

I'm always looking for more rabbit holes to explore.

Top comments (0)