aposd-reviewing-module-design
Evaluate module design using APOSD principles with 40-item checklist. Detect complexity symptoms (change amplification, cognitive load, unknown unknowns), shallow modules, information leakage, pass-through methods, and structural anti-patterns. Produce categorized design review (Critical/Moderate/Observations/Positive). Use when reviewing code, assessing interfaces, during PR review, or evaluating 'is this too complex?' Triggers on: code review, design review, module complexity, interface assessment, PR review, structural analysis.
Best use case
aposd-reviewing-module-design is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Evaluate module design using APOSD principles with 40-item checklist. Detect complexity symptoms (change amplification, cognitive load, unknown unknowns), shallow modules, information leakage, pass-through methods, and structural anti-patterns. Produce categorized design review (Critical/Moderate/Observations/Positive). Use when reviewing code, assessing interfaces, during PR review, or evaluating 'is this too complex?' Triggers on: code review, design review, module complexity, interface assessment, PR review, structural analysis.
Teams using aposd-reviewing-module-design should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/aposd-reviewing-module-design/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How aposd-reviewing-module-design Compares
| Feature / Agent | aposd-reviewing-module-design | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Evaluate module design using APOSD principles with 40-item checklist. Detect complexity symptoms (change amplification, cognitive load, unknown unknowns), shallow modules, information leakage, pass-through methods, and structural anti-patterns. Produce categorized design review (Critical/Moderate/Observations/Positive). Use when reviewing code, assessing interfaces, during PR review, or evaluating 'is this too complex?' Triggers on: code review, design review, module complexity, interface assessment, PR review, structural analysis.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# Skill: aposd-reviewing-module-design ## STOP - Systematic Review Required **Run the checklist.** The checklist exists because intuition misses structural problems. **Unknown unknowns are highest severity.** If it's unclear what code/info is needed for changes, flag immediately. --- ## Evaluation Checklist Use this systematic checklist when reviewing code: ### 1. Complexity Symptoms (Ch2) | Symptom | Question | If Yes | |---------|----------|--------| | **Change Amplification** | Does a simple change require modifications in many places? | Flag dependency problem | | **Cognitive Load** | Must developer know too much to work here? | Flag obscurity or leaky abstraction | | **Unknown Unknowns** | Is it unclear what code/info is needed for changes? | **Highest severity** - flag immediately | ### 2. Module Depth (Ch4) | Check | Deep (Good) | Shallow (Bad) | |-------|-------------|---------------| | Interface vs implementation | Interface much simpler | Interface rivals implementation | | Method count | Few, powerful methods | Many, limited methods | | Hidden information | High | Low | | Common case | Simple to use | Complex to use | **Red flag:** If understanding the interface isn't much simpler than understanding the implementation, the module is shallow. ### 3. Information Hiding (Ch5) | Red Flag | Detection | Severity | |----------|-----------|----------| | **Information Leakage** | Same knowledge in multiple modules | High | | **Temporal Decomposition** | Structure mirrors execution order rather than knowledge | Medium | | **Back-Door Leakage** | Shared knowledge not visible in interfaces but both depend on it | High | | **Overexposure** | Common use forces learning rare features | Medium | ### 4. Layer Abstraction (Ch7) | Red Flag | Detection | Severity | |----------|-----------|----------| | **Pass-Through Method** | Method only passes arguments to another with same API | High | | **Adjacent Similar Abstractions** | Following operation through layers, abstractions don't change | High | | **Shallow Decorator** | Large boilerplate, small functionality gain | Medium | **Test:** Follow a single operation through layers. Does the abstraction change with each method call? If not, there's a layer problem. ### 5. Together/Apart (Ch9) | Red Flag | Detection | Severity | |----------|-----------|----------| | **Conjoined Methods** | Can't understand one method without another's implementation | High | | **Special-General Mixture** | General mechanism contains use-case specific code | High | | **Code Repetition** | Same code appears in multiple places | Medium | | **Shallow Split** | Method split resulted in interface ≈ implementation | Medium | --- ## Red Flags Quick Reference | Red Flag | Source | One-Line Detection | |----------|--------|-------------------| | Shallow Module | Ch4 | Interface as complex as implementation | | Classitis | Ch4 | Many small classes, little functionality each | | Information Leakage | Ch5 | Same knowledge in multiple modules | | Temporal Decomposition | Ch5 | Structure follows execution order | | Pass-Through Method | Ch7 | Method just delegates to another with same API | | Conjoined Methods | Ch9 | Methods only understandable together | | Special-General Mixture | Ch9 | General mechanism has use-case code | | Code Repetition | Ch9 | Same code appears multiple places | | Shallow Split | Ch9 | Method split resulted in interface ≈ implementation | --- ## Together/Apart Decision Procedure When evaluating whether code should be combined or separated: ``` 1. Do pieces share information? YES → Should probably be together 2. Would combining simplify the interface? YES → Should probably be together 3. Is there repeated code? YES → Extract shared method (if long snippet, simple signature) 4. Does module mix general-purpose with special-purpose? YES → Should be separated ``` **Key principle:** Depth > Length. Never sacrifice depth for length. --- ## Depth vs Length Rule | Situation | Correct Action | |-----------|---------------| | Long method with clean abstraction | Keep together | | Short method requiring another's impl to understand | Combine them | | Method split creating conjoined pair | Undo the split | | Long method with extractable subtask | Extract subtask only | **Test for valid split:** Can the pieces be understood independently AND reused separately? --- ## Evaluation Output Format When reporting findings, use: ``` ## Design Review: [Component Name] ### Critical Issues (Must Address) - [Red flag]: [Specific location] - [Why it's a problem] ### Moderate Issues (Should Address) - [Red flag]: [Specific location] - [Why it's a problem] ### Observations (Consider) - [Pattern noticed] - [Potential concern] ### Positive Patterns - [What's working well] ``` --- ## Before Flagging a Problem Before reporting any red flag, validate: 1. **Steel-man check:** What's the best argument this design choice is intentional? 2. **Intentional shallowness:** Is this an adapter, facade, or decorator where thinness is the point? 3. **Testing seam:** Is this "leakage" actually a legitimate dependency injection point? 4. **Abstraction quality:** Can callers use this interface correctly without knowing implementation details? --- ## Cross-Module Analysis Ask before concluding: - **Are there related modules that should be reviewed together?** Classitis often hides across file boundaries. - **Would combining these modules simplify the overall interface?** If yes, flag as potential shallow split. - **Must callers use these modules in sequence?** If yes, possible temporal decomposition. ### Pattern Consistency Check | Question | If Yes | |----------|--------| | Is there an existing pattern for this type of problem? | Compare approaches | | Does this introduce a second way to do the same thing? | Flag unless justified | | Would a maintainer be surprised by the difference? | Requires explicit documentation | **Balance:** Evaluate patterns on merit, but don't create gratuitous inconsistency. The goal is maintainability, not conformance. --- ## When Principles Conflict | Conflict | Resolution | |----------|------------| | Depth vs Cohesion | Prefer cohesion. A focused shallow module beats a bloated deep one. | | Information Hiding vs Testability | Testing seams (injectable dependencies) are acceptable "leakage" | | Simple Interface vs Configurability | Real systems need configuration; penalize only unnecessary complexity | --- ## Common Evaluation Mistakes | Mistake | Reality | |---------|---------| | "It's long, so it's complex" | Length ≠ complexity. Depth matters more. | | "Small classes are better" | Small classes are often shallow. Deep > small. | | "More methods = better API" | Fewer powerful methods beat many limited ones. | | "Separation is always good" | Subdivision has complexity costs. Sometimes combine. | | "Code reuse requires extraction" | Only extract if snippet is long AND signature is simple. | | "This is clearly good/bad" | Always run the systematic checklist. | | "Standard pattern = automatically good" | Patterns can be misapplied. Require specific evidence. | --- ## Anti-Rationalization Table | Rationalization | Counter | |-----------------|---------| | "I can see this is fine without the checklist" | **Stop.** The checklist exists because intuition misses structural problems. Run it anyway. | | "This is too small to review systematically" | **Stop.** Small modules become core dependencies. Small doesn't mean safe. | | "I know this codebase well" | **Stop.** Familiarity breeds blindness. Fresh eyes (the checklist) catch what you've normalized. | | "The author is senior/experienced" | **Stop.** Experience doesn't prevent complexity. Apply same rigor regardless of author. | | "It passes all the tests" | **Stop.** Tests check behavior, not design. Passing tests ≠ good architecture. | | "I don't want to be nitpicky" | **Stop.** Red flags aren't nits. Complexity symptoms are real problems. Flag them. | | "They'll push back on this feedback" | **Stop.** Your job is accurate evaluation, not social comfort. Present evidence. | | "This matches what we already have" | **Stop.** Consistency with bad patterns spreads problems. Evaluate independently. | --- ## Quick Reference ``` SYSTEMATIC REVIEW CHECKLIST: 1. SYMPTOMS - Change amplification? Cognitive load? Unknown unknowns? 2. DEPTH - Interface simpler than implementation? 3. HIDING - Same knowledge in multiple modules? 4. LAYERS - Pass-through methods? Abstraction changes per layer? 5. STRUCTURE - Conjoined methods? Special-general mixture? BEFORE FLAGGING: - Steel-man check: Could this be intentional? - Validate: Can caller use without knowing implementation? OUTPUT: - Critical (must fix) - Moderate (should fix) - Observations (consider) - Positive patterns ``` --- ## Chain | After | Next | |-------|------| | Issues found | Fix or flag for /code-foundations:whiteboarding | | No issues | Done |
Related Skills
aposd-verifying-correctness
Verify code correctness before claiming done or committing. Run 6-dimension checklist: requirements coverage, concurrency safety, error handling, resource management, boundary conditions, and security. Output PASS/FAIL per dimension with final DONE/NOT DONE verdict. Use after implementation as pre-commit gate. Triggers on: is it done, ready to commit, verify correctness, did I miss anything, pre-commit check.
aposd-simplifying-complexity
Simplify complex code through the Error Reduction Hierarchy: Define out > Mask > Aggregate > Crash. Use when code is too complex, has scattered error handling, configuration explosion, or callers doing module work. Produce technique analysis table with gate checks before simplified code. Triggers on: too complex, simplify, scattered errors, configuration proliferation, verbose error handling. Complements cc-defensive-programming with design-level error elimination.
aposd-optimizing-critical-paths
Optimize performance through mandatory measure-first workflow with 3 stages: MEASURE (gate) -> FUNDAMENTAL FIX -> CRITICAL PATH REDESIGN. Use when code is too slow, laggy, hangs, doesn't scale, has timeouts, OOM errors, or high CPU/memory. Emphasize that simpler code usually runs faster. Triggers on: performance issues, optimization needed, takes forever, profiling. Produces profiling-backed optimization with verified improvement.
aposd-maintaining-design-quality
Enforce strategic programming discipline when modifying existing code. Guide through STOP-ASK-DECIDE-VERIFY workflow with urgency tier assessment (trivial/minor/standard/emergency). Include when NOT to refactor (Chesterton's Fence, performance-critical, no tests) and block tactical shortcuts via anti-rationalization tables. Use when fixing bugs, extending features, or tempted to make quick fixes. Triggers on: modify code, fix bug, extend feature, quick fix, tactical change.
aposd-improving-code-clarity
Enforce comments-first workflow for new code and improve naming/documentation for existing code. Use when writing new classes, methods, or functions; when code is 'confusing' or 'hard to understand'; when naming precision is poor; or when variable documentation lacks units, bounds, or ownership. Triggers on: new code, comments-first, naming review, documentation review, not obvious, hard to understand. Produces well-documented code with precise naming, or identifies design problems when comments/names are hard to write.
aposd-designing-deep-modules
Enforce Design-It-Twice workflow: generate 2-3 radically different approaches, compare them, then implement. Use when designing modules, APIs, or classes before implementation. Triggers on: design, create class, add module, implement feature, new service, API design, before implementing. Produces structured design document with approaches, comparison table, choice rationale, and depth check.
api-design
API tasarımı, GraphQL schema, OpenAPI spec, versioning. ⚠️ Tasarım aşaması için kullan. Uygulama/security için → backend-api.
api-designer
REST and GraphQL API architect for designing robust, scalable APIs. Use when designing new APIs or improving existing ones.
api-design-skill
REST/GraphQL API design patterns - resource naming, HTTP methods, error handling, pagination, versioning. Use when: design API, REST endpoints, GraphQL schema, error responses, pagination, rate limiting, API documentation.
api-design-principles
Master REST and GraphQL API design principles to build intuitive, scalable, and maintainable APIs that delight developers. Use when designing new APIs, reviewing API specifications, or establishing API design standards.
api-design-patterns
Design robust APIs with RESTful patterns, GraphQL schemas, versioning strategies, and error handling conventions. Supports OpenAPI/Swagger documentation and SDK generation patterns. Triggers on API design, schema definition, endpoint architecture, or developer experience requests.
anysystem-design
LLM Agent Skill for AnySystem Design React component library