Software Engineering Library
This skill routes software engineering design work to deeper book-derived references without loading them on every turn.
For the everyday default, none loads on every turn and code-quality, pragmatic-programmer and unified-software-engineering load on code files; open a reference here only when the task needs that specific book's depth (start with one, add a second only when it changes a decision).
Triggers
architecture reviewdomain modeling bounded contextrefactoring code smells legacy code low test coverage old file characterization testsexternal API calls queues retries timeouts circuit breaker bulkheadtransactions event ordering data consistency schema evolution module interface shape
When Each Reference Applies
- Use
references/clean-architecture.mdwhen dependency direction, layer ownership, or boundary placement drives the decision. - Use
references/philosophy-of-software-design.mdwhen module depth, interface shape, or complexity hiding drives the decision. - Use
references/domain-driven-design.mdwhen the work models a domain, splits bounded contexts, or translates across contexts. - Use
references/enterprise-patterns.mdwhen persistence, repositories, unit-of-work, transactions, or application service orchestration are central. - Use
references/refactoring.mdwhen changing internal structure, addressing code smells, or preserving behavior while improving shape. - Use
references/working-with-legacy-code.mdwhen the code is hard to test, poorly covered, or needs seams and characterization tests before change. - Use
references/data-intensive-applications.mdwhen state, storage, schema evolution, consistency, ordering, or delivery semantics are central. - Use
references/release-it.mdwhen production resilience, timeouts, circuit breakers, bulkheads, retries, and operational failure modes are central.
Task To Reference Router
| Task | Reference |
|---|---|
| Architecture / layer boundaries | references/clean-architecture.md, references/philosophy-of-software-design.md |
| Domain modeling / bounded contexts | references/domain-driven-design.md |
| Persistence / repository / unit-of-work | references/enterprise-patterns.md |
| Refactoring / code smells | references/refactoring.md |
| Legacy code / seams / characterization tests | references/working-with-legacy-code.md |
| Data systems / consistency / schema evolution | references/data-intensive-applications.md |
| Production resilience / timeouts / bulkheads | references/release-it.md |
Process
- Classify the task using the routing table.
- If another skill discovers a risk condition, route from that evidence to the matching reference.
- Open the smallest matching reference set.
- Apply the reference to the current decision.
- Add a second reference only when it changes the decision.
- Keep the final answer tied to files, user impact, and validation evidence.
Verification
- The selected reference matches the task type in the routing table.
- No more than two references were opened unless the task spans more than two book domains.
- The final recommendation names the reference that changed the decision.
- The baseline rules remain the default for routine code quality decisions.
Anti-Patterns
- Opening every reference before classifying the task.
- Using this skill for build-vs-buy or wheel detection instead of
programming-advisor. - Using this skill for single-file maintainability scoring instead of
code-qualities-assessment. - Using this skill for Commonality Variability Analysis instead of
cva-analysis.
Extension Points
- Add a new reference only when it represents a distinct book-depth decision surface.
- Keep the skill body as the router. Put long material in
references/. - Update the description when a new reference changes the trigger surface.