A design quality describing how tightly two software elements depend on each other. In Szydło's framing, coupling between two objects can be analyzed along four dimensions: how something is done, where it is done, who does it, and what is done. Five levels, from tightest to loosest: local method (same object — knows how/where/who/what), local instance (new'd inside — doesn't know how), external instance (reference injected — doesn't know how/where), configurable instance (interface/dependency injection — doesn't know how/where/who), notification (event handled generically — doesn't know how/where/who/what). Coupling is not inherently good or bad; high coupling is desirable inside DDD aggregates to protect invariants, loose coupling is desirable between microservices.