Coupling
Degree of dependence between modules/components. Tight coupling = change in one module requires change in many others. Loose coupling = changes are localized. Goal: low coupling, high cohesion.
Classic SE principle from Larry Constantine (1968). Types: data coupling (passes data), stamp coupling (shares structure), control coupling (control flow), content coupling (direct memory access — worst). Loose coupling is achieved via: interfaces, dependency injection, event-driven, message passing. Hyrum's Law: all observable behaviors of your system will become dependencies — you have more coupling than you think.