software-design-philosophy

Reviews module designs and APIs for complexity using deep module and information hiding principles.

Updated Jun 27, 2026
One-click install
npx skills add https://github.com/rachmadideni/ai-staff-assistant --skill software-design-philosophy-rachmadideni
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: software-design-philosophy
Source: https://github.com/rachmadideni/ai-staff-assistant/tree/main/.agents/skills/software-design-philosophy
Command: npx skills add https://github.com/rachmadideni/ai-staff-assistant --skill software-design-philosophy-rachmadideni

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Software systems accumulate complexity through hundreds of small design decisions, making code hard to understand, modify, and review. This Skill provides a structured framework for diagnosing complexity, evaluating module depth, detecting information leakage, and scoring designs on a 0-10 scale with concrete improvement steps. ## Core Features & Use Cases - Complexity Diagnosis: Identify change amplification, cognitive load, and unknown unknowns, then trace them to their causes in dependencies and obscurity. - Module Design Review: Evaluate whether modules are deep or shallow, detect classitis, pass-through methods, and temporal decomposition, and recommend merges or restructuring. - Design Documentation Guidance: Apply comment-driven design with the four comment types (interface, data structure, implementation, cross-module) to capture design intent. - Use Case: When reviewing a pull request that adds three new classes (RequestParser, RequestValidator, RequestProcessor), use this Skill to recognize classitis, score the design, and recommend merging them into one deep RequestHandler module. ## Quick Start Review this module interface and tell me whether the abstraction is pulling its weight, with a complexity score and specific improvements.

Frequently Asked Questions about software-design-philosophy

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I tell if a module is too shallow?▼

A module is shallow when its interface is nearly as complex as its implementation, meaning it adds cognitive load without hiding meaningful complexity. Compare the number of methods and parameters against the functionality hidden behind them; thin wrappers and pass-through methods are classic shallow signals.

What is information leakage in software design?▼

Information leakage occurs when one design decision, such as a data format or protocol, is reflected in multiple modules. It creates hidden dependencies so a single change ripples across the codebase. The fix is to merge modules that share knowledge or extract the shared knowledge into one owning module.

When should I split a class into smaller classes?▼

Split only when the new class hides a distinct, significant design decision behind a simpler interface. Splitting by execution order or to satisfy small-class metrics creates classitis, where many shallow classes add interface overhead without depth. Depth matters more than size.

Are configuration parameters bad for API design?▼

Configuration parameters push decisions onto callers, multiplying complexity across every user of the module. Prefer sensible defaults, auto-detection, or eliminating the parameter entirely. Keep parameters only when callers genuinely need different values and the module cannot determine the right one.

How much time should teams spend on design versus features?▼

The strategic programming approach recommends investing roughly 10-20% of development time in design improvement as part of every change, not as separate refactoring phases. Small continuous investments compound, while tactical shortcuts accumulate into debt that slows the whole team.

Is self-documenting code enough without comments?▼

Self-documenting code covers low-level implementation details but cannot express abstractions, design rationale, constraints, or cross-module relationships. Interface comments that describe what a module promises remain essential; write them before the implementation to validate the design.