AlgoMaster Logo

Synchronous vs Asynchronous Communication

High Priority6 min readUpdated July 4, 2026
AI Mock Interview

Practice this topic in a realistic system design interview

Listen to this chapter
Unlock Audio

When a user clicks Place Order, several things have to happen: validating the cart, checking prices, creating the order, reserving inventory, capturing payment, sending a confirmation email, and updating analytics.

Some of those actions must complete before the user gets a response. Others can happen later.

That is the core difference between synchronous and asynchronous communication.

In synchronous communication, the caller sends a request and waits for the answer.

In asynchronous communication, the sender records work for later and continues without waiting for the final result.

Loading simulation...

Neither style is better in every case. Most real systems use both. The design skill is knowing which parts of a workflow need an immediate answer and which parts can safely happen in the background.

This chapter covers synchronous and asynchronous communication, their trade-offs, and how to choose between them.

1. Synchronous Communication

Synchronous communication is the familiar request-response model.

The caller asks for something, waits, and then continues after it receives a response or error.

WaitingContinueRequestProcess requestResponse or errorCallerServiceCallerService
5 / 5
algomaster.io

Common examples include HTTP APIs, gRPC calls, GraphQL queries, database queries, and RPC between internal services. Synchronous calls are a good fit when the caller truly needs the answer before it can continue.

2. Synchronous Example

A mobile app showing an account balance needs an immediate answer.

GET /accounts/123/balancegetBalance(123)SELECT balance1500.00balance = 1500.00200 OKMobile AppAPI GatewayAccount ServiceDatabase
6 / 6
algomaster.io

If the account service or database is unavailable, the app cannot honestly show the current balance. A synchronous call is appropriate because the user is waiting for that specific result.

3. Synchronous Trade-offs

Advantages

  • Simple request-response model
  • Immediate success or failure signal
  • Easier to reason about for user-facing reads
  • Natural fit for validation and authorization
  • Mature tooling for tracing, timeouts, and debugging

Disadvantages

  • The caller can fail if the service it calls is down
  • Slow services make the user wait longer
  • Long call chains are fragile
  • One failure can spread without timeouts and circuit breakers
  • Services depend on each other while the request is running

Synchronous communication is easy to understand, but it gets risky when one user request has to call many services in a row.

4. The Availability Problem

Suppose a request must call three services, and each service is available 99.9% of the time.

If all three must succeed for the request to succeed, the combined availability is roughly:

This simplified math assumes the services fail independently and there is no fallback. The lesson is still useful: every required synchronous call can make the user-facing path less available.

Good synchronous systems use timeouts, careful retries, circuit breakers, caching, graceful fallback behavior, and short call chains.

5. Asynchronous Communication

Asynchronous communication separates the sender from the final processing.

The sender writes a message, event, or job to a middle layer such as a queue, topic, stream, or reliable table. A receiver processes it later.

ContinuePublish messageStoredDeliver message laterProcessACKSenderBrokerReceiverSenderBrokerReceiver
6 / 6
algomaster.io

The sender usually knows that the message was accepted. It does not immediately know whether every follow-up action succeeded.

That difference matters.

6. Asynchronous Example

After an order is created, several follow-up actions can happen in the background.

The user can receive an order ID once the order is safely saved. Email, analytics, and search indexing can happen later. If email is slow, checkout does not need to fail.

Payment and inventory are more subtle. Some businesses require those to complete before confirming the order. Others create a PENDING order and confirm it after payment and inventory succeed. The communication style must match the product promise.

7. Asynchronous Trade-offs

Advantages

  • Sender and receiver do not need to be available at the same time
  • Queues and streams can absorb traffic spikes
  • Slow consumers do not directly slow the user-facing request
  • Work can be retried after temporary failures
  • Multiple consumers can react to the same event
  • Consumers can scale independently

Disadvantages

  • The final outcome is not known immediately
  • Different parts of the system may agree only after a short delay
  • Debugging requires tracing across messages and services
  • Duplicate delivery is common and must be handled
  • Ordering is limited and must be designed for
  • Brokers and queues must be monitored and operated

Asynchronous communication trades immediate certainty for buffering, retries, and independent processing.

8. Temporary Disagreement

With async workflows, different parts of the system can temporarily disagree. This is often called eventual consistency: the system may not agree everywhere right now, but it should settle into the correct state after the background work finishes.

User sees PENDING orderPlace orderSave order as PENDINGPublish OrderCreatedOrder receivedDeliver OrderCreatedReserve inventoryPublish InventoryReservedDeliver InventoryReservedMark order CONFIRMEDUserOrder ServiceBrokerInventory Service
10 / 10
algomaster.io

For a short time, the order exists before inventory has been reserved. That is not automatically wrong, but the state must be clear. Names like PENDING, PROCESSING, CONFIRMED, and FAILED matter because users and support teams need to understand what is happening.

9. When to Use Synchronous Communication

Use synchronous communication when:

  • The caller needs an immediate answer.
  • The operation is part of the user-facing decision.
  • The service being called is fast and reliable enough.
  • The workflow cannot proceed without the result.
  • The system needs simple control flow more than buffering.

Typical examples are checking login and authorization, fetching an account balance, reading a product page, validating a coupon during checkout, checking whether a username is available, or returning search results.

For synchronous calls, set timeouts. Without a timeout, one slow service can leave the whole request stuck.

10. When to Use Asynchronous Communication

Use asynchronous communication when:

  • Work can happen after the user gets a response.
  • Multiple services need to react to the same event.
  • The workload is slow or bursty.
  • Failures should be retried later.
  • The sender should not depend on the receiver being online right now.
  • Consumers need to scale independently.

Typical examples are sending emails or push notifications, updating search indexes, processing videos or images, generating reports, shipping analytics events, replicating data to a warehouse, and running webhook delivery retries.

Async is not a way to avoid thinking about correctness. It means correctness is handled with clear states, retries, safe-to-repeat processing, monitoring, and repair tools.

11. Common Patterns

Most real systems mix both styles. Some calls need an answer right now. Other work can run later, and the caller can pick up the result when it is ready.

Request-Response

The caller waits for a response.

Use for reads, validation, and operations where the caller needs the result now.

Work Queue

The sender submits a task. One worker processes it.

Use for background jobs such as image processing, report generation, or webhook delivery.

Publish-Subscribe

The publisher sends an event. Multiple subscriptions receive it.

Use when several independent services need to react to the same event.

Request-Async Response

The client submits a long-running job and receives the result later.

Submit job (job_id=abc)AcceptedDeliver jobProcessStore result for abcPoll or receive callbackClientRequest QueueWorkerResult StoreClientRequest QueueWorkerResult Store
6 / 6
algomaster.io

Use for exports, media processing, ML jobs, and other workflows where the result matters but does not need to be immediate.

12. Hybrid Architecture

Most systems combine both styles.

The synchronous path should do only the work required to give the user a correct response. The asynchronous path handles follow-up work that can wait.

The outbox is shown because it avoids a common bug: saving the order but failing to publish the event.

13. Design Checklist

Before choosing sync or async, ask:

  • Does the caller need the result immediately?
  • What should the user see while background work is pending?
  • What happens if the receiver is down?
  • How long can the work be delayed?
  • Can the operation be retried safely?
  • Can consumers safely process the same message more than once?
  • What ordering guarantees are required?
  • How will failures become visible to users or operators?
  • Who owns the queue, topic, backlog, and DLQ?

The communication style affects far more than the code. It changes the user experience, failure behavior, and the work needed to run the system.

Summary

Synchronous communication gives immediate answers and simple control flow, but the caller has to wait for the services it calls. Asynchronous communication adds buffering and retries, but the result arrives later and the system must handle temporary disagreement, retries, duplicates, ordering, and monitoring.

Use synchronous calls when the caller genuinely needs the answer now, and asynchronous messaging when work can happen later, receivers need to scale independently, or multiple services must react to the same event.

Most good architectures use both: a small synchronous user-facing path, followed by asynchronous background work for everything that does not need to block the response.

Quiz

Sync vs Async Communication Quiz

10 quizzes