This distills John Ousterhout's "A Philosophy of Software Design" into actionable guidance for code reviews and architecture decisions. It's built around managing complexity through deep modules (simple interfaces hiding rich implementations), information hiding, and pulling complexity down into modules rather than pushing it to callers. The most immediately useful parts are the red flags: pass-through methods, information leakage, and shallow modules that do too little behind complex interfaces. Invoke it when debating how to split modules, whether to add configuration parameters, or how to handle errors. The "define errors out of existence" section alone will change how you think about exception handling.

skills.sh installs
256
GitHub stars
356
last updated
Aug 21, 2026

Install

$ npx -y skills add luoling8192/software-design-philosophy-skill --skill software-design-philosophy --agent claude-code

Installs into .claude/skills of the current project.

Files

A Philosophy of Software Design — Distilled Guide

Source: John Ousterhout, A Philosophy of Software Design Central thesis: The core challenge of software design is managing complexity.


I. Complexity: Know the Enemy

Definition

Complexity is anything related to the structure of a software system that makes it hard to understand and modify. Complexity is not the same as system size — a small system can be complex, and a large well-designed system can be manageable.

Three Symptoms of Complexity

  1. Change Amplification: A seemingly simple change requires code modifications in many different places.
  2. Cognitive Load: Developers must absorb a large amount of information to complete a task safely. Note: fewer lines of code ≠ simpler — sometimes more code is actually simpler because it reduces cognitive load.
  3. Unknown Unknowns: It's unclear which code must be modified or what information is needed to complete a task. This is the most dangerous symptom.

Two Root Causes

Sponsors

Details

Repository
github.com/luoling8192/software-design-philosophy-skill
Categories
Backend & APIs, Git & Pull Requests, Documentation, Code Review & Quality, Debugging, Design & UI/UX
First seen
Jun 3, 2026
1jorgealves avatardocumentation-generatorjorgealves/agent_skillsAnalyzes source code to automatically generate technical documentation and architecture diagrams. Use to maintain up-to-date API references and onboarding mater255skills.sh installs
2dpearson2699 avatarcodable-patternsdpearson2699/swift-ios-skillsEncode and decode Swift types to and from JSON, property lists, and other external representations using Codable, JSONEncoder, and JSONDecoder. Use when impleme252skills.sh installs
3glebis avatarzoomglebis/claude-skillsCreate and manage Zoom meetings and access cloud recordings via the Zoom API. Use for queries like "create a Zoom meeting", "list my Zoom meetings", "show my Zo251skills.sh installs
4pproenca avatarrails-application-ui-blockspproenca/dot-skillsCompose new Rails backend pages and refactor existing Rails UI to use premium blocks from templates/application-ui. Use when requests mention ERB views, Rails p251skills.sh installs
5huggingface avatarhugging-face-clihuggingface/skillsExecute Hugging Face Hub operations using the `hf` CLI. Use when the user needs to download models/datasets/spaces, upload files to Hub repositories, create rep249skills.sh installs
6tanweai avatarpua-debuggingtanweai/puaForces exhaustive problem-solving using corporate PUA rhetoric and structured debugging methodology. MUST trigger when: (1) any task has failed 2+ times or you'249skills.sh installs