| name | systems-design |
| description | Design or refine software architecture. |
Use @../refactor/SKILL.md.
Decompose
-
Model the system as a sequence of stages from input to output.
-
Split stages where data changes meaning, ownership, or crosses an effect boundary.
-
Define explicit input and output types for each stage.
Separate
-
Make each stage either a transform or an effect.
-
Place persistent state behind stage boundaries: files, queues, or databases.
Specify
-
Define stage boundaries as contracts with substitutable implementations.
-
Use the most specific concrete implementation within each stage.
-
Keep transform stages referentially transparent.
-
Test effect stages through substitutable boundary implementations.