software-engineering

Applies SOLID principles, library adoption guidance, and minimal component API design to code.

1|1|Updated Feb 25, 2026
One-click install
npx skills add https://github.com/williamthorsen/codeassembly --skill software-engineering-williamthorsen
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: software-engineering
Source: https://github.com/williamthorsen/codeassembly/tree/main/packages/agents/content/skills/software-engineering
Command: npx skills add https://github.com/williamthorsen/codeassembly --skill software-engineering-williamthorsen

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? It prevents common design mistakes such as over-coupled components, hand-rolled utilities that duplicate existing libraries, and unclear architectural trade-offs by providing concrete software engineering principles. ## Core Features & Use Cases - General Principles: Enforces single-responsibility, dependency injection, composition over inheritance, and SOLID design in everyday code. - Library Adoption Guidance: Directs research into existing lightweight libraries like cli-table3, chalk, and semver before writing custom implementations. - Component API Design: Shows how to define minimal TypeScript interfaces for component props instead of passing entire database entity types. - Use Case: When building a React component that displays user data, define a UserDisplayData interface with only name and email rather than coupling the component to the full database schema. ## Quick Start Review my component design and apply software engineering principles to reduce coupling and improve the API.

Frequently Asked Questions about software-engineering

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

FAQPage Schema
How do I design minimal component props in TypeScript?

Define an interface containing only the fields the component actually uses, such as name and email, instead of passing entire database entity types. This improves encapsulation, testability, and reusability while reducing coupling to schema changes.

When should I use a library instead of writing custom code?

Research existing libraries before hand-rolling complex logic. Use established options like semver for version parsing, chalk for terminal colors, and cli-table3 for table formatting rather than writing custom implementations.

Should I use chalk or manual ANSI escape codes for terminal colors?

Use chalk for terminal colors, for example chalk.red(), instead of manual ANSI escape codes. It is an established lightweight library that avoids error-prone raw escape sequences.

When is it acceptable to include extra fields in a component interface?

Add fields you know will be needed soon, such as an id for future actions, or fields required for debugging and error handling. Balance minimalism against practical near-term needs.

How should I rank design options when evaluating architectures?

Rank options on correctness factors like behavior, API quality, architectural soundness, testability, and maintainability first. Treat convenience factors like effort, blast radius, and consistency with existing code as secondary.