Interactive idea refinement using Socratic method to develop fully-formed designs
日本語の概要は準備中です。原文の説明を表示しています。
Name code by what it does in the domain, not how it's implemented or its history
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Names documenting implementation or history create confusion. "NewUserAPI" doesn't tell what it does. "ZodValidator" exposes internals.
Core principle: Names tell what code does in the domain, not how it's built or what it replaced.
Violating the letter of this rule is violating the spirit of naming.
Use for:
Use ESPECIALLY when:
Names expose WHAT, not HOW.
<Bad> ```typescript class ZodValidator { } // Exposes Zod library class MCPToolWrapper { } // Exposes MCP protocol class JSONConfigParser { } // Exposes JSON format ``` </Bad> <Good> ```typescript class Validator { } // What it does class RemoteTool { } // What it represents class ConfigReader { } // What it does ``` </Good>Code exists in present. Don't reference past or transitions.
<Bad> ```typescript class NewAPI { } // When does it stop being "new"? class LegacyHandler { } // Calls it legacy but it's running class ImprovedParser { } // Improved from what? class UnifiedService { } // What was unified? class EnhancedValidator { } // Enhanced how? ``` </Bad> <Good> ```typescript class API { } // What it is now class Handler { } // What it does now class Parser { } // What it does now class Service { } // What it is now class Validator { } // What it does now ``` </Good>Patterns are implementation details. Most don't help understanding.
<Bad> ```typescript class ToolFactory { } // "Factory" adds nothing class ServiceBuilder { } // "Builder" adds nothing class ManagerSingleton { } // "Singleton" adds nothing ``` </Bad> <Good> ```typescript class Tool { } // Clear without pattern class Service { } // Clear without pattern class Registry { } // Clear without pattern// OK when pattern IS the purpose class EventEmitter { } // Observer pattern IS what it does class CommandQueue { } // Queue pattern IS what it does
</Good>
### Names Tell Domain Stories
Good names form sentences about business logic.
<Good>
```typescript
// Reads like domain language
user.authenticate()
order.calculateTotal()
payment.process()
// Not
user.executeAuthenticationStrategy()
order.runTotalCalculationAlgorithm()
payment.invokeProcessingWorkflow()
</Good>
| Bad Pattern | Why Bad | Good Alternative |
|---|---|---|
ZodValidator | Exposes implementation | Validator |
MCPToolWrapper | Exposes protocol | RemoteTool |
NewUserAPI | Temporal reference | UserAPI |
ImprovedParser | References history | Parser |
ToolFactory | Pattern name noise | Tool or createTool() |
AbstractToolInterface | Redundant qualifiers | Tool |
executeToolWithValidation() | Implementation in name | execute() |
Rule: Never document old behavior or the change in names.
<Bad> ```typescript // During refactoring class NewAuthService { } // References the change class ImprovedValidator { } // References improvement class UnifiedAPIClient { } // References unification ``` </Bad> <Good> ```typescript // During refactoring class AuthService { } // What it is class Validator { } // What it does class APIClient { } // What it is ``` </Good>If you catch yourself writing:
STOP. Find a name describing actual purpose in the domain.
| Excuse | Reality |
|---|---|
| "Need to distinguish from old version" | Old version shouldn't exist or should be in different namespace. |
| "New developers need to know it's improved" | Code quality shows in behavior, not names. |
| "Factory pattern is important here" | If pattern is core purpose, fine. Usually it's not. |
| "Everyone knows what Zod is" | Today they do. Names should outlive dependencies. |
| "It IS a wrapper around MCP" | That's implementation. What does it DO in your domain? |
Before committing names:
class ImprovedZodConfigValidator { } // ❌ Temporal + implementation
const newAPIClientWithRetry = new Client(); // ❌ Temporal + implementation
function executeEnhancedToolFactory() { } // ❌ Temporal + pattern noise
// Using them
const validator = new ImprovedZodConfigValidator();
validator.validateWithNewSchema();
class ConfigValidator { } // ✅ Domain purpose
const apiClient = new Client(); // ✅ What it is
function createTool() { } // ✅ What it does
// Using them - reads like domain language
const validator = new ConfigValidator();
validator.validate();
For tactical variable naming: See skills/naming-variables for comprehensive variable naming techniques (optimal length, scope rules, conventions for booleans/collections/qualifiers, naming as diagnostic tool)
For comment guidelines: See skills/writing-evergreen-comments for keeping comments evergreen (no temporal context in comments either)
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Interactive idea refinement using Socratic method to develop fully-formed designs
日本語の概要は準備中です。原文の説明を表示しています。
Receive and act on code review feedback with technical rigor, not performative agreement or blind implementation
日本語の概要は準備中です。原文の説明を表示しています。
Comment WHY code exists and non-obvious decisions, not WHAT code does (mechanics)
日本語の概要は準備中です。原文の説明を表示しています。
Replace arbitrary timeouts with condition polling for reliable async tests
日本語の概要は準備中です。原文の説明を表示しています。
TDD for process documentation - test with subagents before writing, iterate until bulletproof
日本語の概要は準備中です。原文の説明を表示しています。
Validate at every layer data passes through to make bugs impossible
日本語の概要は準備中です。原文の説明を表示しています。