> [!abstract] The degree of interdependence between software modules. Aim for low coupling and high [[Cohesion]].
## Types of Coupling
- **Technology coupling** - what language/framework are you using?
- **Location coupling** - where is the service you need to talk to?
- **Semantic/data format coupling** - JSON vs XML, camelCase vs snake_case, null handling
- **Runtime coupling** - needing another service to be active when you run
- **Temporal coupling** - needing things to happen in a specific order
## [[Cohesion]]
The counterpart to coupling. Things that change together should live together.
## Managing Coupling
> The appropriate level of coupling you want to aim for is related to the amount of control you have over the endpoints.
> -- Gregor Hohpe, [[Enterprise Integration Patterns]]
- Tight coupling within your own team's services may be acceptable (you control release cycles, SLAs, schemas)
- Reduce coupling when integrating with systems outside your control (other teams, third-party APIs)
- [[Event Driven Architecture]] reduces runtime and location coupling
## Sources
[[x_Sources/Videos/Video - Build An Event Driven System - NDC Oslo 2024|Build An Event Driven System - James Eastham (NDC Oslo 2024)]]