# Fan-out/Fan-in

> A design pattern that splits work into independent parts processed in parallel, then merges their results.

Record: `architecture:fan-out-fan-in`
Kind: pattern
Layer: [Execution Core](https://banes-lab.com/records/layer/execution-core.md)
Severity: contextual
Scope: data processing, parallelism, pipeline
Aliases: Upward Reduction
Canonical: https://banes-lab.com/ontology#architecture-fan-out-fan-in

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Windowing](https://banes-lab.com/records/architecture/windowing.md) and before [Batch-vs-Stream](https://banes-lab.com/records/architecture/batch-vs-stream.md).

## Repair

- Refactored by: Fan Out Work, Fan In Results
- Detected by: serial loop over parallelizable work
- Violated by: independent items processed strictly one at a time
- Measured by: parallelism utilization
- Enforced by: pipeline design review

## Requires

- [Independent Work Units](https://banes-lab.com/records/lexicon/independent-work-units.md)

## Reinforces

- [Parallelism](https://banes-lab.com/records/architecture/parallelism.md)
- [Throughput](https://banes-lab.com/records/architecture/throughput.md)

## Enables

- [Parallel Branch Processing](https://banes-lab.com/records/lexicon/parallel-branch-processing.md)
- [Result Aggregation](https://banes-lab.com/records/lexicon/result-aggregation.md)

## In tension with

- [Coordination Overhead](https://banes-lab.com/records/lexicon/coordination-overhead.md)
- [Serial Item Processing](https://banes-lab.com/records/lexicon/serial-item-processing.md)

## Tensions

- [Fan-out/Fan-in / Coordination Overhead](https://banes-lab.com/records/tension/coordination-overhead-fan-out-fan-in.md)
- [Fan-out/Fan-in / Serial Item Processing](https://banes-lab.com/records/tension/fan-out-fan-in-serial-item-processing.md)

## Severity

- [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)

## Category

- [Streaming / Pipeline / Dataflow Processing](https://banes-lab.com/records/architecture-category/streaming-pipeline-dataflow-processing.md)

## Linked from

- [Above one tier, reduction](https://banes-lab.com/software-architecture/scale/above-one-tier-reduction.md)
- [Scalability / Performance / Optimization](https://banes-lab.com/ontology/principles/architecture-category-scalability-performance-optimization.md)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [Quality Attributes](https://banes-lab.com/ontology/lexicon/lexicon-category-quality-attributes.md)
- [Streaming / Pipeline / Dataflow Processing](https://banes-lab.com/ontology/lexicon/lexicon-category-streaming-pipeline-dataflow-processing.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
