system-design

Design reusable software systems with deep modules and information hiding.

38|3|Updated Mar 22, 2024
One-click install
npx skills add https://github.com/anthonyshew/dotfiles --skill system-design-anthonyshew
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: system-design
Source: https://github.com/anthonyshew/dotfiles/tree/main/opencode/.config/opencode/skill/system-design
Command: npx skills add https://github.com/anthonyshew/dotfiles --skill system-design-anthonyshew

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Solves the problem of designing reusable software systems.

Core Features & Use Cases

  • Deep modules: craft small surfaces with rich implementations behind them to keep interfaces simple.
  • Information hiding: encapsulate knowledge to minimize cross-module coupling.
  • Design discipline: balance strategic planning with practical trade-offs for APIs, modules, and CLIs.

Quick Start

Describe a high-level module design for a new service, listing interfaces and hidden implementation details.

Frequently Asked Questions about system-design

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

FAQPage Schema
What is a deep module in software architecture?▼

A deep module in software architecture features a small interface surface backed by a rich implementation, ensuring simple interactions while hiding complex logic to minimize overall system complexity.

How do I design a modular API with minimal complexity?▼

Design a modular API with minimal complexity by enforcing deep interfaces and disciplined information hiding, which encapsulates implementation details and reduces cross-module coupling for robust software.

When should I apply information hiding to reduce cross-module coupling?▼

Apply information hiding to reduce cross-module coupling whenever you design reusable libraries or CLIs, encapsulating internal knowledge so that changes in implementation do not ripple through dependent modules.

Can I use these system design principles for CLI and library development?▼

Yes, you can use these system design principles for CLI and library development, as the approach guides teams through deep module boundaries and strategic trade-offs across APIs, modules, and command-line interfaces.

What is the best way to minimize complexity when designing reusable software systems?▼

The best way to minimize complexity when designing reusable software systems is to balance strategic planning with practical trade-offs, focusing on deep modules and reduced surface area based on John Ousterhout's principles.

Why does deep module design reduce software complexity?▼

Deep module design reduces software complexity by hiding intricate implementation details behind small, simple interfaces, preventing internal knowledge from leaking across module boundaries and lowering cross-module coupling.