> [!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)]]