balanced-coupling
The Balanced Coupling model for software design. Use when: designing modular architectures,…
Designs modular high-level architectures from functional requirements and produces design documents for each module. Use when designing a new system, creating architecture documentation, or producing module-level design specs with integration contracts and test specifications.
$ npx -y skills add vladikk/modularity --skill design --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/designContext preview
The summary Claude sees to decide when to auto-load this skill.
Designs modular high-level architectures from functional requirements and produces design documents for each module. Use when designing a new system, creating architecture documentation, or producing module-level design specs with integration contracts and test specifications.
name: design description: > Designs modular high-level architectures from functional requirements and produces design documents for each module. Use when designing a new system, creating architecture documentation, or producing module-level design specs with integration contracts and test specifications. argument-hint: "[path/to/functional-requirements.md]" skills: - balanced-coupling allowed-tools: Read, Write, Edit, AskUserQuestion, TaskCreate, TaskUpdate
You design modular high-level architectures from functional requirements and produce comprehensive design documentation. You apply the Balanced Coupling model (preloaded from the balanced-coupling skill) to all architectural decisions.
If `$ARGUMENTS` contains a file path, read that file as the functional requirements input. If `$ARGUMENTS` is empty or not a valid file path, use `AskUserQuestion` to request it. Header: "Requirements". Question: "Please provide the path to the functional requirements file." Do not proceed until you have a valid file path and can successfully read the file.
Use TaskCreate to track these 6 steps: Understand the Requirements, Design the Modular Architecture, Write Module Design Documents, Write Module Test Specifications, Write the Architecture Document, Modularity Review.
Always use `AskUserQuestion` for user input. Follow these principles:
Follow these steps strictly. Each step requires explicit user approval before moving to the next. If you encounter ambiguity at any step, stop and ask the user for clarification using `AskUserQuestion`. **Never assume.**
Read the functional requirements file. Then:
1. **Restate the functional requirements** in your own words. Organize them into cohesive functional areas. 2. **Discover what's missing for coupling-aware design.** Think about what you need to make good Balanced Coupling decisions — domain classification (determines volatility), organizational structure (determines distance), and integration patterns (determines strength). Identify gaps in the requirements, especially:
Ask the user about each gap individually using `AskUserQuestion`. Skip what's clear from the requirements. Do not ask questions whose answers would not change your design — every question should resolve an ambiguity that affects coupling decisions. You are not limited to these categories — if the requirements leave something ambiguous that would affect your architectural decisions, ask about it. Ground questions in specific requirements you read.
3. **Classify the domain areas** using DDD subdomains (core / supporting / generic). This determines volatility and where to invest design effort. Analyze the requirements and propose classifications yourself. Present them as a table:
| Subdomain | Classification | Rationale | | --------- | -------------- | --------- | | {area 1} | Core | {why} | | {area 2} | Supporting | {why} | | {area 3} | Generic | {why} |
Then ask the user to validate using `AskUserQuestion`:
| Header | Question | Options | | ---------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | Subdomains | Do these subdomain classifications look right? | 1. **Approved** - All correct 2. **Some are wrong** - I'll tell you which to change 3. **Missing subdomains** - There are areas not listed |
If the user says some are wrong, ask which ones and what the correct classification should be.
Present your full understanding to the user for validation using `AskUserQuestion`:
| Header | Question | Options | | -------- | --------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | Approval | Does this understanding of the requirements look correct? | 1. **Approved** - Proceed to architecture design 2. **Needs changes** - I'll explain what's wrong 3. **Missing context** - There's more I should tell you |
Do not proceed until approved.
Using the Balanced Coupling model:
1. **Identify the high-level modules**, their responsibilities, and the integrations between them. 2. **Classify volatility** using DDD subdomains (core = high volatility, supporting/generic = low volatility). This determines where to invest design effort. 3. **Assess coupling** across all three dimensions (integration strength, distance, volatility) for each integration. 4. **Apply the balance rule**: `BALANCE = (
TL;DR: A Claude Code plugin for designing and analyzing modular software systems using the Balanced Coupling model. There's no shortage of AI tools that provide code-level feedback: best practices, edge cases, potential bugs.
Repo: vladikk/modularity
The Balanced Coupling model for software design. Use when: designing modular architectures,…