Skip to content
Back to skills

Coupling Analysis

ASecurity

Measure and manage coupling with afferent/efferent metrics, change amplification, and one-way dependency rules. Use when a codebase is hard to change safely or you are deciding where to draw module boundaries.

  • 7 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 5, 2026
ai-agentsgoreact

Security analysis

A100/100

Scanned September 5, 2026

npx -y skills add Amey-Thakur/AI-SKILLS --skill coupling-analysis --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Coupling Analysis?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Coupling Analysis
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/amey-thakur-coupling-analysis/badge)](https://www.skillsdirectory.com/skills/amey-thakur-coupling-analysis)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: coupling-analysis
description: Measure and manage coupling with afferent/efferent metrics, change amplification, and one-way dependency rules. Use when a codebase is hard to change safely or you are deciding where to draw module boundaries.
---

# Coupling analysis

How hard a system is to change safely is mostly a function of its
coupling: how much one part must know about another, and how far a
change ripples. Good architecture is not about eliminating coupling
(impossible) but directing it: toward stable things, in one direction,
across as few boundaries as possible.

## Method

1. **Measure the two directions.** Afferent coupling (how
   many things depend on this module: its responsibility)
   and efferent coupling (how many things this module
   depends on: its fragility). A module with high afferent
   coupling must be stable (many depend on it); a module
   with high efferent coupling is hard to change (it breaks
   when any dependency does). Tools compute these; the
   numbers name your risky modules.
2. **Point dependencies toward stability.** Stable, abstract
   things (interfaces, core domain: see
   domain-driven-design) are depended upon; volatile,
   concrete things (UI, external integrations) depend
   outward and are depended on by nothing (the
   dependency-inversion instinct: see layered-architecture,
   hexagonal-architecture). A stable module depending on a
   volatile one is inverted and will churn.
3. **Enforce one-way dependencies.** Cycles are the enemy:
   two modules depending on each other cannot be understood,
   tested, or deployed independently (see
   circular-dependencies). Pick a direction per boundary,
   enforce it with tooling (architecture-fitness tests,
   package/visibility rules: see module-boundaries), and
   when a cycle appears, it names a missing shared concept
   to extract downward.
4. **Watch change amplification as the real symptom.** The
   practical measure of bad coupling: how many files/modules
   a typical change touches. One logical change requiring
   edits across five modules means those modules are
   coupled around that change axis: co-locate what changes
   together (high cohesion), separate what changes
   independently (the microservices-boundaries and
   monolith-first module test).
5. **Prefer loose coupling mechanisms deliberately.**
   Depend on interfaces not implementations (see
   go-project-layout's consumer-side interfaces), pass data
   not behavior across boundaries, use events for genuinely
   independent reactions (see event-driven-architecture),
   and keep shared data structures minimal (a fat shared
   type couples everyone who touches it). Each loosening
   trades directness for changeability: apply where change
   is likely, not everywhere (see premature-abstraction).
6. **Distinguish coupling kinds by cost.** Data coupling
   (passing parameters: fine) up through control coupling,
   shared-state coupling, to content coupling (reaching
   into another module's internals: the worst). The audit
   question is not "is there coupling" but "is it the cheap
   kind, pointed the right way, across a boundary that
   earns it" (see cognitive-load: coupling is also what
   makes code hard to hold in your head).

## Boundaries

- Zero coupling is zero system; the goal is appropriate
  coupling, not none. Over-decoupling (indirection
  everywhere, events for synchronous needs) creates its
  own unreadability (see premature-abstraction,
  cognitive-load).
- Metrics guide but do not decide: a high-afferent module
  that is genuinely stable and well-designed is healthy;
  the numbers flag candidates for judgment, not verdicts.
- Coupling analysis informs where to draw boundaries
  (modules, services); it is the measurement behind
  microservices-boundaries and monolith-first, applied
  before and after those decisions.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…