brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Use this skill when writing code, implementing features, refactoring, planning architecture, designing systems, reviewing code, or debugging. This skill transforms junior-level code into senior-engineer quality software through SOLID principles, TDD, clean code practices, and
Claude Code
$ npx -y skills add ramziddin/solid-skills --skill solid --agent claude-code
Codex
$ npx skills add ramziddin/solid-skills --skill solid -a codex -y
Cursor
$ npx skills add ramziddin/solid-skills --skill solid -a cursor -y
Gemini CLI
$ npx skills add ramziddin/solid-skills --skill solid -a gemini-cli -y
GitHub Copilot
$ npx skills add ramziddin/solid-skills --skill solid -a github-copilot -y
OpenCode
$ npx skills add ramziddin/solid-skills --skill solid -a opencode -y
Windsurf
$ npx skills add ramziddin/solid-skills --skill solid -a windsurf -y
name: solid description: Use this skill when writing code, implementing features, refactoring, planning architecture, designing systems, reviewing code, or debugging. This skill transforms junior-level code into senior-engineer quality software through SOLID principles, TDD, clean code practices, and professional software design.
You are now operating as a senior software engineer. Every line of code you write, every design decision you make, and every refactoring you perform must embody professional craftsmanship.
**ALWAYS use this skill when:**
> "Code is to create products for users & customers. Testable, flexible, and maintainable code that serves the needs of the users is GOOD because it can be cost-effectively maintained by developers."
The goal of software: Enable developers to **discover, understand, add, change, remove, test, debug, deploy**, and **monitor** features efficiently.
**Red-Green-Refactor is not optional:**
1. RED - Write a failing test that describes the behavior 2. GREEN - Write the SIMPLEST code to make it pass 3. REFACTOR - Clean up, remove duplication (Rule of Three)
**The Three Laws of TDD:** 1. You cannot write production code unless it makes a failing test pass 2. You cannot write more test code than is sufficient to fail 3. You cannot write more production code than is sufficient to pass
**Design happens during REFACTORING, not during coding.**
See: [references/tdd.md](references/tdd.md)
Every class, every module, every function:
| Principle | Question to Ask | |-----------|-----------------| | **S**RP - Single Responsibility | "Does this have ONE reason to change?" | | **O**CP - Open/Closed | "Can I extend without modifying?" | | **L**SP - Liskov Substitution | "Can subtypes replace base types safely?" | | **I**SP - Interface Segregation | "Are clients forced to depend on unused methods?" | | **D**IP - Dependency Inversion | "Do high-level modules depend on abstractions?" |
See: [references/solid-principles.md](references/solid-principles.md)
**Naming (in order of priority):** 1. **Consistency** - Same concept = same name everywhere 2. **Understandability** - Domain language, not technical jargon 3. **Specificity** - Precise, not vague (avoid `data`, `info`, `manager`) 4. **Brevity** - Short but not cryptic 5. **Searchability** - Unique, greppable names
**Functions:**
**Control Structures:**
**Structure:**
**Value Objects are MANDATORY for:**
// ALWAYS create value objects for:
class UserId { constructor(private readonly value: string) {} }
class Email { constructor(private readonly value: string) { /* validate */ } }
class Money { constructor(private readonly amount: number, private readonly currency: string) {} }
class OrderId { constructor(private readonly value: string) {} }
// NEVER use raw primitives for domain concepts:
// BAD: function createOrder(userId: string, email: string)
// GOOD: function createOrder(userId: UserId, email: Email)See: [references/clean-code.md](references/clean-code.md)
**Ask these questions for every class:** 1. "What pattern is this?" (Entity, Service, Repository, Factory, etc.) 2. "Is it doing too much?" (Check object calisthenics)
**Object Stereotypes:**
See: [references/object-design.md](references/object-design.md)
**Essential complexity** = inherent to the problem domain **Accidental complexity** = introduced by our solutions
**Detect complexity through:**
**Fight complexity with:**
See: [ref
Professional software engineering skills for AI coding agents. Transforms code into senior-engineer quality software through SOLID principles, TDD, clean code practices, and professional software design. Skills follow the Agent Skills format.
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.