# Choreography

> A mechanism that coordinates a cross-service flow through events, with each service reacting to the previous one's event.

Record: `architecture:choreography`
Kind: mechanism
Layer: [Execution Core](https://banes-lab.com/records/layer/execution-core.md)
Severity: contextual
Scope: distributed system, coordination, event
Canonical: https://banes-lab.com/ontology#architecture-choreography

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Consensus](https://banes-lab.com/records/architecture/consensus.md) and before [Determinism](https://banes-lab.com/records/architecture/determinism.md).

## Repair

- Refactored by: Coordinate via Choreographed Events
- Detected by: a central coordinator coupled to all participants
- Violated by: one orchestrator commanding every step of a cross-service flow
- Measured by: orchestrator fan-out coupling
- Enforced by: [architecture review](https://banes-lab.com/records/architecture/architecture-review.md)

## Requires

- [Event-Driven Architecture](https://banes-lab.com/records/architecture/event-driven-architecture.md)

## Reinforces

- [Decentralization](https://banes-lab.com/records/architecture/decentralization.md)
- [Autonomy](https://banes-lab.com/records/architecture/autonomy.md)

## Enables

- [Central-Orchestrator-Free Coordination](https://banes-lab.com/records/lexicon/central-orchestrator-free-coordination.md)

## Conflicts with

- [Central Orchestrator Bottleneck](https://banes-lab.com/records/lexicon/central-orchestrator-bottleneck.md)

## In tension with

- [Traceability](https://banes-lab.com/records/architecture/traceability.md)

## Tensions

- [Choreography / Traceability](https://banes-lab.com/records/tension/choreography-traceability.md)

## Severity

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

## Category

- [Control / Coordination / Centralization](https://banes-lab.com/records/architecture-category/control-coordination-centralization.md)

## Linked from

- [Composing a collaboration](https://banes-lab.com/pag/orchestration/composing-a-workflow.md)
- [Every record has a kind](https://banes-lab.com/software-architecture/principles/every-record-has-a-kind.md)
- [Above one tier, reduction](https://banes-lab.com/software-architecture/scale/above-one-tier-reduction.md)
- [Control / Coordination / Centralization](https://banes-lab.com/ontology/principles/architecture-category-control-coordination-centralization.md)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.md)
- [Event / Messaging / Asynchronous Architecture](https://banes-lab.com/ontology/principles/architecture-category-event-messaging-asynchronous-architecture.md)
- [Observability / Auditability / Traceability](https://banes-lab.com/ontology/principles/architecture-category-observability-auditability-traceability.md)
- [Control / Coordination / Centralization](https://banes-lab.com/ontology/lexicon/lexicon-category-control-coordination-centralization.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
