Fan-out architecture is an event distribution pattern where a single event is dispatched to multiple downstream destinations independently. In integrations, it means your application emits one event and a central router, gateway, or event bus fans that event out to every subscriber that should receive it.
If you are asking what is fan-out in integrations, the short answer is: one input event, many independent downstream deliveries. Each subscriber gets its own delivery path, retry behavior, and failure isolation.
The term comes from digital logic, where a single gate output drives multiple inputs. In software, the concept is the same: one signal in, many signals out. A fan out architecture is useful any time one business event needs to reach multiple systems without coupling them together.
Short definition:
- One event enters a central routing layer.
- The routing layer creates separate deliveries for each subscriber.
- Each destination succeeds, fails, and retries independently.
If you have ever needed a single product event like a signup or a cancellation to reach your CRM, your email platform, your analytics tool, and a webhook — all at once — you are looking at a fan-out problem.
Why fan-out architecture matters for SaaS integrations
Most SaaS products start with one integration. A signup event creates a contact in HubSpot. A cancellation triggers a Slack notification. That is a point-to-point integration, and it works fine when you only have one destination.
The problem appears when you add a second destination. Then a third. Then a customer asks you to connect their own HubSpot account while another customer needs Salesforce.
Without fan-out, each new destination means another code path in your application. Your signup handler grows from one API call to three. Each destination has its own authentication, its own field mapping, its own failure modes. A transient failure in Mailchimp should not block the delivery to Salesforce, but now you need to think about isolation between destinations.
Fan-out architecture solves this by separating the event producer from the event consumers. Your application emits one event. The fan-out layer handles distribution to every subscriber independently.
How a fan-out event moves through a central gateway
A fan-out pattern means one event triggers multiple downstream deliveries from a central gateway, router, or broker.
The core mechanic is straightforward:
- An event is produced. Your application emits a structured event — something happened that downstream systems care about.
- A central gateway receives it. A router, message broker, or event bus accepts the event.
- The event is duplicated and dispatched. The gateway creates a separate delivery for each registered subscriber or destination.
- Each delivery is independent. If one destination fails, the others are unaffected. Retries, timeouts, and dead letter handling happen per-destination.
Here is a minimal example of the pattern in pseudocode:
emit("user.signup", { email, plan })
→ Destination 1: HubSpot → create contact ✓ delivered
→ Destination 2: Mailchimp → add to list ✓ delivered
→ Destination 3: Slack → send notification ✗ failed → retry
→ Destination 4: Webhook → POST to endpoint ✓ delivered
The key property is that Slack's failure does not affect the other three deliveries. Each destination has its own lifecycle.
That is the core idea behind any architecture that fans out events to multiple subscribers: the producer emits once, and the routing layer handles the rest.
Simple fan-out vs leveled fan-out architecture
There are two main structural patterns for fan-out, and they solve different problems.
Simple fan-out
In simple fan-out, the central router receives an event and immediately dispatches it to all subscribers in a single hop. Every destination receives the event directly from the same source.
┌→ HubSpot
Event → Router ───┼→ Mailchimp
├→ Slack
└→ Webhook
This is the most common pattern for SaaS integrations. It is easy to reason about, easy to monitor, and the failure domain is clear: each delivery is independent, and the router is the single coordination point.
Simple fan-out works well when the number of destinations is moderate (single digits to low hundreds) and the routing logic is flat — every subscriber gets the same event, possibly with per-destination field mapping.
Leveled fan-out (hierarchical fan-out)
Leveled fan-out adds intermediate layers between the source and the final destinations. Instead of one router dispatching to all subscribers directly, the first layer fans out to a set of intermediate processors, and each of those fans out again to their own set of downstream subscribers.
This is what people usually mean by leveled fan out architecture: the same one-to-many pattern, but spread across multiple routing layers.
┌→ HubSpot
Event → Router ──┬→ CRM Router ──┤
│ └→ Salesforce
│
│ ┌→ Mailchimp
├→ Email Router ──┤
│ └→ ActiveCampaign
│
└→ Slack
This pattern appears when the subscriber count is very large (thousands or more), when different categories of destinations need different processing logic, or when you need to distribute load across multiple routing nodes to avoid bottlenecking a single dispatcher.
A clear example of leveled fan-out is a top-level event router sending events to domain-specific routers such as CRM, email, and analytics pipelines, with each of those intermediate routers then fanning out again to their own destinations. By contrast, AWS SNS-to-SQS is usually a simple fan-out example: one topic distributes to multiple queues in a single layer.
When to use which
| Pattern | Best for | Tradeoff |
|---|---|---|
| Simple fan-out | Moderate subscriber counts, flat routing rules, SaaS integration layers | Simpler to build and monitor; single router can become a bottleneck at very high scale |
| Leveled fan-out | Very high subscriber counts, category-based processing, distributed systems | More complex to operate; harder to trace end-to-end delivery; introduces intermediate failure points |
For most SaaS integration use cases — where you are routing product events to a handful of destinations per workspace — simple fan-out is the right choice. Leveled fan-out becomes relevant when you are building infrastructure at the scale of a cloud messaging service or a high-throughput event streaming platform.
Fan-out pattern and other event bus patterns
People often compare the fan-out pattern with other event bus patterns because the terms overlap in practice.
Fan-out is a delivery mechanic. An event bus is a coordination pattern. They frequently appear together, but they are not the same thing.
An event bus is a centralized channel where producers publish events and consumers subscribe to them. The bus handles routing rules, filtering, and subscriber management. Fan-out describes what happens at the delivery step: taking one event and sending it to many subscribers.
In practice, an event bus uses fan-out as its distribution mechanism. When an event bus receives an event and determines which subscribers should get it, the actual delivery to those subscribers is a fan-out operation.
Other patterns that involve fan-out or overlap with it:
Pub/sub (publish-subscribe) is the messaging model where producers and consumers are decoupled through topics or channels. Fan-out is how the pub/sub broker delivers a published message to all subscribers of that topic. Every pub/sub system uses fan-out internally; not every fan-out system is a full pub/sub implementation.
Event sourcing stores every state change as an immutable event. Fan-out can distribute those events to read models or projections, but event sourcing is fundamentally about storage and state reconstruction, not distribution.
CQRS (Command Query Responsibility Segregation) separates read and write models. Events are often fanned out from the write side to update read-side projections, but CQRS is an application architecture pattern, not a messaging pattern.
The key distinction is scope. Fan-out is about "one event goes to many places." The other patterns define what events mean, how they are stored, or how producers and consumers are organized. Fan-out is the plumbing that several of these higher-level patterns rely on.
Reliability problems in fan-out
Fan-out introduces specific failure modes that do not exist in point-to-point integrations.
Partial delivery
When you fan out to five destinations and three succeed, you have a partial delivery. The event was not lost, but it also was not fully delivered. Handling this correctly requires per-destination delivery tracking rather than a single success/fail status for the event.
Retry isolation
A slow or failing destination should not slow down delivery to other destinations. This means retries need to happen per-destination, not per-event. If your retry mechanism blocks the entire fan-out while waiting for one destination to recover, you have created a coupling that defeats the purpose of fan-out.
Duplicate delivery
Retries can cause the same event to arrive at a destination more than once. Idempotency handling — usually through event IDs that the destination can use for deduplication — is important in any fan-out system that retries on failure.
Ordering
Fan-out does not inherently guarantee that events arrive at each destination in the same order they were produced. If ordering matters for a specific destination, the fan-out layer or the consumer needs to handle reordering explicitly. For many SaaS integration use cases, strict ordering is not required — a contact update arriving before a contact creation is an edge case that can be handled with upsert logic.
Dead letter handling
When retries are exhausted and a delivery still has not succeeded, the event needs to go somewhere. A dead letter queue (or equivalent) preserves failed deliveries for investigation and replay. Without one, failed events in a fan-out system simply disappear.
Building fan-out vs using a fan-out layer
You can implement fan-out yourself using a message queue like SQS, a pub/sub system like Redis or Kafka, or even a simple database-backed job queue. The pattern is not complicated in concept.
The implementation cost is in the reliability layer around it: per-destination retries with exponential backoff and jitter, dead letter queues, delivery deduplication, per-destination rate limiting, delivery logging, and failure alerting. For a deeper look at what production retry logic actually involves, see Webhook Retry Logic Done Right: Exponential Backoff, Jitter, and When to Give Up.
This is the build-versus-buy decision that every SaaS team eventually faces with their integration layer. If you are routing events to one destination, point-to-point delivery is fine. Once you need fan-out to multiple destinations — especially with per-customer isolation — the operational cost of building and maintaining that layer yourself starts to compound. For a practical walkthrough of the fan-out routing pattern applied to SaaS integrations, see From One Event to Many Integrations: A Practical Guide to Fan-Out Architecture.
FAQ: fan-out architecture
What is fan-out architecture?
Fan-out architecture uses a central router, gateway, or broker to send one event to many downstream subscribers or destinations.
What is fan-out in integrations?
In integrations, fan-out means a product event such as user.signup is emitted once and then delivered independently to tools like HubSpot, Salesforce, webhooks, or internal queues.
Does a fan-out event trigger downstream events?
Usually it triggers downstream deliveries first. In some systems, those consumers then emit their own downstream events, but the defining idea is still one input event causing many parallel downstream actions.
Is fan-out the same as pub/sub or an event bus?
No. Pub/sub and event buses are broader messaging patterns. Fan-out is the distribution step that sends one event to many subscribers.
When do you need leveled fan-out architecture?
Use leveled fan-out when subscriber counts, routing categories, or throughput are large enough that a single dispatcher becomes a bottleneck or operational risk.
Key takeaways
Fan-out architecture solves a specific problem: distributing a single event to multiple downstream destinations with independent delivery, failure isolation, and retry behavior.
For most SaaS teams, the relevant pattern is simple fan-out — one event, multiple destinations, independent delivery per destination. Leveled fan-out matters at much higher scale or when you need category-based routing through intermediate processors.
The hard part of fan-out is not the distribution itself. It is the reliability layer: retries, deduplication, dead letters, partial delivery tracking, and per-destination isolation. That is where most of the engineering time goes, and where most of the operational risk lives.
If your product emits events that need to reach more than one destination, you are looking at a fan-out problem whether you call it that or not. The question is whether you build the routing and reliability layer yourself or use one that already exists.
Want fan-out routing without building the delivery layer? Meshes handles event fan-out, retries, deduplication, and delivery tracking so your team ships integrations instead of integration infrastructure. Start free.