software-design-philosophy
Manage software complexity through deep modules, information hiding, and strategic programming.
Skill by wondelai
Chalk Labs
Need help deploying software-design-philosophy?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/wondelai-software-design-philosophy
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, backend, writing, finance
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/software-design-philosophy
What's inside
- Skill name
software-design-philosophy- Description
- Manage software complexity through deep modules, information hiding, and strategic programming. Use when the user mentions "module design", "API too complex", "shallow class", "complexity budget", "strategic vs tactical", "deep module", "information leakage", "pass-through method", "this code is over-engineered", or "simplify this design". Also trigger when reviewing an interface for simplicity, evaluating whether an abstraction is pulling its weight, deciding whether a comment is worth writing, or choosing between general-purpose and special-purpose approaches. Covers deep vs shallow modules, red flags for complexity, and comments as design documentation. For code quality, see clean-code. For architecture boundaries, see clean-architecture.
- License
- MIT
- Metadata
- author: wondelai · version: 1.4.0
- Instructions
- 192 lines in SKILL.md · view on GitHub
Files (7)
- SKILL.md
- comments-as-design.md · references/
- complexity-symptoms.md · references/
- deep-modules.md · references/
- general-vs-special.md · references/
- information-hiding.md · references/
- strategic-programming.md · references/
SKILL.md (first lines)
# A Philosophy of Software Design Framework
A practical framework for managing the fundamental challenge of software engineering: complexity. Apply these principles when designing modules, reviewing APIs, refactoring code, or advising on architecture decisions.
## Core Principle
**The greatest limitation in writing software is our ability to understand the systems we are creating.** Complexity is the enemy: it makes systems hard to understand, hard to modify, and a source of bugs. Evaluate every design decision by asking "Does this increase or decrease the overall complexity of the system?" — the goal is not zero complexity, but minimizing unnecessary complexity and concentrating the necessary kind where it can be managed.
## Scoring
**Goal: 10/10.** When reviewing or creating a design, score it by counting how many of the eight Quick Diagnostic rows it satisfies (≈1.25 points each), then sanity-check against the bands:
- **9-10** — deep modules with interfaces far simpler than implementations; no information leakage (an implementation can change without touching callers); interface comments capture design intent; design improvement is routine. All eight diagnostics pass.
- **6-8** — mostly deep, but one or two leaks, shallow classes, or undocumented abstractions. 5-6 diagnostics pass.
- **3-5** — classitis or temporal decomposition, recurring leakage, comments that only restate code. 2-4 diagnostics pass.
- **≤2** — tactical-tornado code: shallow modules, pervasive leakage, no design intent recorded. 0-1 diagnostics pass.
Always state the current score, the diagnostic rows that failed, and the specific change each one needs to reach 10/10.
## The Software Design Framework
Six principles for managing complexity and producing systems that are easy to understand and modify:
### 1. Complexity and Its Causes
**Core concept:** Complexity is anything about a system's structure that makes it hard to understand and modify. It shows three symptoms — change amplification, cognitive load, and unknown unknowns — and has two causes: dependencies and obscurity.
**Key insights:**
- Change amplification: a simple change requires edits in many places
- Cognitive load: a developer must hold too much in mind to make a change
- Unknown unknowns: it isn't obvious what must change or what information is relevant — the worst symptom
- Complexity is incremental — it accumulates from hundreds of small decisions ("death by a thousand cuts"), so every decision matters
**Code applications:**
| Context | Pattern | Example |
|---------|---------|---------|
| Change amplification | Centralize shared knowledge | Extract color constants instead of hardcoding `#ff0000` in 20 files |
| Cognitive load | Reduce what developers must know | `open(path)` instead of requiring buffer size, encoding, lock mode |
| Unknown unknowns | Make dependencies explicit | Type systems and interfaces surface what a change affects |
| Obscurity | Name things precisely | `numBytesReceived` not `n`; `retryDelayMs` not `delay` |
See [references/complexity-symptoms.md](references/complexity-symptoms.md) when you need to name *which* symptom a codebase has before fixing it — per-symptom recognition tests, the dependency taxonomy (syntactic/semantic/temporal/hidden), the C = Σ(cp·tp) cost formula, and a 10-row red-flag table.
### 2. Deep vs Shallow Modules
**Core concept:** The best modules are deep: powerful functionality behind a simple interface. Shallow modules have complex interfaces relative to the functionality they provide — they add complexity rather than hiding it.
**Why it works:** The interface is the *cost* a module imposes on the rest of the system; the implementation is the benefit. So a method that is harder to learn than to re-implement yourself is net-negative — depth, not line count, decides whether a module earns its place.
**Key insights:**
- Depth = functionality provided / interface complexity imposed (Unix file I/O is deep; thin Java I/O wrappers are shallow)
- "Classitis": the disease of creating too many small, shallow classes — each interface adds cognitive load
- Small methods are not inherently good; depth matters more than size
- The best abstractions hide significant complexity behind a few simple concepts
**Code applications:**
| Context | Pattern | Example |
|---------|---------|---------|
| Deep module | Hide complexity behind simple API | `file.read(path)` hides disk blocks, caching, buffering, encoding |
| Classitis cure | Merge related shallow classes | `RequestParser` + `RequestValidator` + `RequestProcessor` → one `RequestHandler` |
| Interface simplicity | Fewer parameters, fewer methods | `config.get(key)` with sensible defaults, not 15 constructor parameters |
See [references/deep-modules.md](references/deep-modules.md) when judging whether an abstraction pulls its weight — before/after code for the depth ratio, the classitis cure worked out, and case studies (Unix I/O, GC, TCP/IP).
### 3. Information Hiding and Leakage
**Core concept:** Each module should encapsulate knowledge not needed by other modules. Information leakage — one design decision reflected in multiple modules — is one of the most important red flags in software design.
**Why it works:** A decision that lives in one module can change there and nowhere else; the same decision leaked into N modules turns one edit into N edits that no compiler will remind you to make. Hiding is what converts change amplification back into a local change.
**Key insights:**
- Temporal decomposition causes leakage: splitting code by *when* things happen forces shared knowledge across phases — organize by knowledge instead
- Back-door leakage through data formats, protocols, or shared assumptions is the subtlest form
- Decorators frequently leak — they expose the decorated interface
- If two modules share knowledge, merge them or create a new module that encapsulates it
**Code applications:**
| Context | Pattern | Example |
|---------|---------|---------|
| Format leakage | Centralize serialization | One module owns JSON encoding/decoding, not `json.dumps` everywhere |
| Temporal decomposition | Organize by knowledge, not time | Combine "read config" and "apply config" into one config module |
| Protocol leakage | Abstract transport details | `MessageBus.send(event)` hides HTTP vs. gRPC vs. queue |
See [references/information-hiding.md](references/information-hiding.md) when a change forces you to edit two modules in lockstep — the four leakage forms with code (interface, back-door, temporal, decorator), five reduction strategies, the HTTP-handling case study, and a detection table.
### 4. General-Purpose vs Special-Purpose Modules
**Core concept:** Design modules that are "somewhat general-purpose": an interface general enough to support multiple uses, with an implementation that handles current needs. Ask: "What is the simplest interface that will cover all my current needs?"
**Why it works:** Counterintuitively, the general interface is usually the *simpler* one — special-case methods multiply as requirements grow, while one general method absorbs them. The trap is the other direction: generality the current needs don't demand is speculative complexity, paid now for a use case that may never arrive.
**Key insights:**
- "Somewhat general-purpose" is the sweet spot between too specific and too generic
- Push complexity downward: lower-level modules should handle hard cases so upper levels stay simple
- Configuration parameters often represent a failure to decide — each parameter is complexity pushed onto the caller
- When in doubt, implement the simpler, more general-purpose approach first
**Code applications:**
| Context | Pattern | Example |
|---------|---------|---------|
| API generality | Design for the concept, not one use case | `text.insert(position, string)` instead of `text.addBulletPoint()` |
| Reduce configuration | Determine behavior automatically | Auto-detect file encoding instead of an `encoding` parameter |
| Avoid over-specialization | One general method over many specific ones | `store(key, value, options)` instead of `storeUser()`, `storeProduct()`, `storeOrder()` |
See [references/general-vs-special.md](references/general-vs-special.md) when choosing how general an interface should be — the "simplest interface for all current needs" test, the configuration-parameter antipattern, and push-complexity-downward worked through.
### 5. Comments as Design Documentation
**Core concept:** Comments should describe what is not obvious from the code: design intent, abstraction rationale, invariants, and assumptions. "Good code is self-documenting" is a myth for anything beyond low-level implementation detail.
**Why it works:** Code can only ever record *what* it does — never why this approach over the alternatives, or what it silently assumes. That rationale is the most perishable information in a system: it lives only in the author's head and is gone the moment they move on, so a comment is the single chance to capture it.
**Key insights:**
- Four types: interface comments (most important — they define the abstraction), data structure member comments, implementation comments, cross-module comments
- Write comments first (comment-driven design) to clarify thinking before codeFrom wondelai/skills, MIT.
More from wondelai/skills
- 0.618score
conversion-optimization
wondelai
Guided journey from a leaking conversion flow - landing page, signup, checkout, or in-app onboarding - to a measured, tested funnel.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
mom-test
wondelai
Talk to customers without leading them using Mom Test rules: discuss their life not your idea, ask about specifics in the past, and talk less.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
37signals-way
wondelai
Build lean, opinionated products using the 37signals philosophy from "Getting Real", "Rework", and "Shape Up".
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
blue-ocean-strategy
wondelai
Create uncontested market space using value innovation instead of competing head-to-head.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
clean-architecture
wondelai
Structure software around the Dependency Rule: source code dependencies point inward from frameworks to use cases to entities.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
clean-code
wondelai
Write readable, maintainable code through disciplined naming, small functions, and clean error handling.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
cold-start-problem
wondelai
Start and scale networked products using Andrew Chen's "The Cold Start Problem" framework for network effects.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
contagious
wondelai
Engineer word-of-mouth and virality using the STEPPS framework (Social Currency, Triggers, Emotion, Public, Practical Value, Stories).
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
continuous-discovery
wondelai
Build a weekly cadence of customer touchpoints using Opportunity Solution Trees, assumption mapping, and interview snapshots.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
create-app
wondelai
Guided journey from a raw app idea to a validated, cleanly architected first version that ships on a sustainable cadence.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
create-business
wondelai
Guided journey from raw idea to a validated, positioned, priced business with a chosen beachhead.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
architecture-optimization
wondelai
Guided journey from a working codebase grown slow and tangled to one measurably fast, cleanly bounded, and readable.
SkillBFreshness: B★ 2.5KClaude Code +9
Signals
- Stars
- 2,503
- Forks
- 250
- Open issues
- 6
- Last commit (this folder)
- Aug 9, 2026 (2 months ago)
- Last release
- Aug 29, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- Version
- 1.4.0
- License
- MIT
- Repository
- github.com/wondelai/skills
- Website
- skills.wondel.ai
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
Same skill elsewhere
Copies of this SKILL.md published by others; search shows only one of them.
- 0.323score
software-design-philosophy
wondelai
Manage software complexity through deep modules, information hiding, and strategic programming.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.323score
software-design-philosophy
wondelai
Manage software complexity through deep modules, information hiding, and strategic programming.
SkillBFreshness: B★ 2.5KClaude Code +9
More from wondelai
- 0.618score
37signals-way
wondelai
Build lean, opinionated products using the 37signals philosophy from "Getting Real", "Rework", and "Shape Up".
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
blue-ocean-strategy
wondelai
Create uncontested market space using value innovation instead of competing head-to-head.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
mom-test
wondelai
Talk to customers without leading them using Mom Test rules: discuss their life not your idea, ask about specifics in the past, and talk less.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
architecture-optimization
wondelai
Guided journey from a working codebase grown slow and tangled to one measurably fast, cleanly bounded, and readable.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
conversion-optimization
wondelai
Guided journey from a leaking conversion flow - landing page, signup, checkout, or in-app onboarding - to a measured, tested funnel.
SkillBFreshness: B★ 2.5KClaude Code +9 - 0.618score
clean-architecture
wondelai
Structure software around the Dependency Rule: source code dependencies point inward from frameworks to use cases to entities.
SkillBFreshness: B★ 2.5KClaude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get software-design-philosophy running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
software-design-philosophy skill. Agent Mart. https://agentmart.dev/skills/wondelai-software-design-philosophy (last updated 2026-10-24)