Your API takes 100 ms. Your User Waits 3 Seconds. Why?

by Taruna Verma
5 min read

🚨 Your API is fast. Your system is still slow. This is one of the biggest mistakes I see when thinking about system performance.

A developer checks: β†’ API response: 120ms β†’ Database query: 20ms β†’ Cache hit: 5ms

Everything looks great. But the user still waits 3 seconds. Why?

Because request latency β‰  system latency. A real production request can look like this:

Client ↓ Load Balancer ↓ API Service ↓ Database ↓ Cache ↓ Message Queue ↓ 3rd-party API ↓ Notification Service

Your application might spend only 120ms processing the request. But waiting for: β€’ Payment gateway β€’ Inventory service β€’ External APIs β€’ Database locks β€’ Queue processing β€’ Network calls β€’ Downstream microservices …can turn a β€œfast API” into a slow product.

What should a senior engineer ask? Not: ❌ β€œHow do I make this endpoint faster?” Instead: βœ… β€œWhere is the user actually waiting?”

Then decide what belongs in the synchronous request path. For example:

Order creation: ❌ Create order ❌ Update inventory ❌ Send email ❌ Generate invoice ❌ Notify warehouse ❌ Call analytics service ❌ Send notification

Doing everything synchronously creates unnecessary latency. A better design: Create Order ↓ Return response ↓ Publish event ↓ Queue workers handle: β†’ Inventory update β†’ Invoice generation β†’ Email β†’ Notifications β†’ Analytics

Now the user waits only for what is actually required to complete the transaction. This is where system design becomes less about β€œadding more servers”... …and more about removing unnecessary work from the critical path.

After years of backend development, one lesson keeps coming back: The fastest operation is often the one you don't make the user wait for. What would you move out of the synchronous request path?