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.