Anik Sikder
Technical Writing/system-design/polling-when-simple-starts-sending-millions-of-requests
article.sh

$ open article

system-design

Polling Explained: When 'Simple' Starts Sending Millions of Requests

5 min readJuly 24, 2026
Polling Mailbox Communication Pattern Visualization

Imagine you're building a SaaS platform.

Nothing fancy.

Just a notification bell in the top-right corner.

When someone receives a new message, completes a task, or gets assigned work, the bell should update.

Seems simple, right?

A developer might propose:

code
Every 5 seconds:

GET /notifications

Done.

Feature shipped.

Customers happy.

Everyone goes home.

For a while.


The Architecture Looks Innocent

With 10 users online, the system behaves exactly as expected.

code
10 Users
   ↓
GET /notifications
Every 5 seconds

Nobody notices a problem.

The database barely feels the load.

The servers are mostly idle.

The feature appears successful.

This is where many architectural mistakes begin.

Not because the solution is wrong.

But because it works.


Success Changes the Equation

Six months later, your product gains traction.

Now you have:

code
5,000 active users

The code hasn't changed.

The infrastructure hasn't changed.

The polling interval is still:

code
Every 5 seconds

But the system is now processing:

code
5,000 × 12 requests/minute

= 60,000 requests per minute

That's:

code
3.6 million requests per hour

For a notification system.

Not file uploads.

Not payments.

Not business-critical operations.

Just checking whether something changed.


The Hidden Question

Here's the question experienced engineers ask:

How many of those requests actually matter?

Let's assume only 5% of users receive a notification during a given minute.

That means 95% of requests exist only to discover:

code
{
  "notifications": []
}

The system is spending CPU, memory, network bandwidth, and database resources simply confirming that nothing happened.

From a business perspective, that's interesting.

Because the company isn't paying for useful work.

It's paying for uncertainty.


Why Companies Still Choose Polling

At this point, many articles declare:

"Polling is bad."

That's the wrong conclusion.

Companies don't buy architectures.

Companies buy outcomes.

Polling remains popular because it optimizes for something businesses care deeply about:

Speed of Delivery

A startup founder rarely asks:

"Is this the most elegant distributed systems solution?"

They ask:

"Can we launch this feature next week?"

Polling is attractive because:

  • Easy to implement

  • Easy to debug

  • Easy to maintain

  • Works through almost every network and firewall

  • Requires minimal infrastructure

In other words:

code
Higher operational cost
↓
Lower development cost

And early-stage companies often prefer that tradeoff.


The Real Architectural Tradeoff

Junior developers often think:

code
Polling vs WebSockets

Senior engineers think:

code
Development Cost
vs
Infrastructure Cost
vs
User Experience
vs
Future Scale

Those are completely different conversations.

Every architecture decision is a business decision wearing a technical disguise.


When Polling Becomes Expensive

Imagine your SaaS platform grows to:

code
100,000 active users

Still polling every 5 seconds.

Now the system receives:

code
20,000 requests every second

Suddenly:

  • More application servers

  • Larger database clusters

  • Higher cloud bills

  • More monitoring

  • More operational complexity

The notification feature itself hasn't become more valuable.

The architecture simply became more expensive.

This is one of the easiest ways successful products accidentally create technical debt.

Not through bad code.

Through successful growth.


The Most Important Lesson

Polling is not a communication pattern.

Polling is an optimization choice.

You're optimizing for:

code
Simplicity Today

while accepting:

code
Higher Costs Tomorrow

Sometimes that's exactly the right decision.

Sometimes it's not.

The best engineers aren't the ones who know the newest technologies.

They're the ones who understand the tradeoffs.

And Polling is one of the simplest examples of that principle.


Frequently Asked Questions

What is polling in software architecture?

Polling is a communication pattern where clients repeatedly send requests to check whether new information is available.


Why is polling considered inefficient?

Because many requests return no useful data while still consuming CPU, memory, bandwidth, and infrastructure resources.


Is polling bad?

No.

Polling is often the simplest and most practical solution for many systems, especially during early growth stages.


How does polling differ from WebSockets?

Polling repeatedly asks for updates.

WebSockets allow servers to push updates immediately when changes occur.


When should I use polling?

Polling works well when:

  • Real-time updates aren't critical
  • User volume is moderate
  • Simplicity matters
  • Development speed is important

Key Takeaways

  • Polling is a client-driven communication pattern.
  • The client repeatedly asks for updates.
  • Most requests often return no new information.
  • Infrastructure cost grows with scale.
  • Polling prioritizes simplicity over efficiency.
  • It remains a valid architectural choice.
  • Architecture decisions are tradeoffs, not absolutes.
  • Understanding polling helps you understand scalability itself.

If you found this article useful, share it with fellow backend engineers, system architects, platform engineers, and distributed systems enthusiasts exploring communication patterns at scale.


About the Author

Anik Sikder is a Software Engineer specializing in Backend Systems, SaaS Architecture, Cloud Infrastructure, Python, Django, FastAPI, distributed systems, and scalable software engineering.

He writes about system design, networking, distributed systems, cloud computing, software architecture, and modern engineering practices.

$ tags

pollingdistributed-systemssoftware-architectureweb-architecturescalabilitysystem-designbackend-engineeringcommunication-patternsrealtime-systems

$ ls related_articles

status: end_of_file