# Asynchronous Communication

Record: `arch:asynchronous-communication`
Kind: principle
Layer: [Execution Core](https://banes-lab.com/records/layer/execution-core.md)
Severity: contextual
Scope: service, system
Canonical: https://banes-lab.com/ontology#arch-asynchronous-communication

## Repair

- Refactored by: Introduce Queue/Event, Add Callback/Projection
- Detected by: long blocking chains
- Violated by: synchronous call chain for non-immediate work
- Measured by: sync dependency depth
- Enforced by: [architecture review](https://banes-lab.com/records/arch/architecture-review.md)

## requires

- [Message Contract](https://banes-lab.com/records/lex/message-contract.md)
- [Retry Safety](https://banes-lab.com/records/lex/retry-safety.md)

## reinforces

- [Resilience](https://banes-lab.com/records/arch/resilience.md)
- [Low Coupling](https://banes-lab.com/records/arch/low-coupling.md)

## enables

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

## conflicts-with

- [Blocking Synchronous Chains](https://banes-lab.com/records/lex/blocking-synchronous-chains.md)
- [Synchronous Chain Trap](https://banes-lab.com/records/arch/synchronous-chain-trap.md)

## tensions-with

- [Immediate Consistency](https://banes-lab.com/records/lex/immediate-consistency.md)

## tensions

- [Asynchronous Communication Immediate Consistency](https://banes-lab.com/records/tension/asynchronous-communication-immediate-consistency.md)

## referenced-by

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