Dry Principle Skill
-
Follow the DRY (Don't Repeat Yourself) Principle and Avoid Duplicating Code or Logic.
-
Avoid writing the same code more than once. Instead, reuse your code using functions, classes, modules, libraries, or other abstractions.
-
Modify code in one place if you need to change or update it.
Iron Laws
-
NEVER extract to a shared abstraction until you have at least 3 concrete instances of the same logic — premature extraction creates wrong abstractions that are harder to remove than the original duplication.
-
ALWAYS maintain a single source of truth for configuration values — the same constant or config value defined in two places will diverge and cause bugs.
-
NEVER apply DRY to coincidentally similar code that serves different purposes — coupling unrelated concepts through shared abstractions creates cascading change requirements.
-
ALWAYS prefer readability over DRY when the abstraction requires indirection that obscures what the code does — a small amount of duplication is often better than an obscure helper.
-
NEVER use copy-paste as a first resort for new similar functionality — always check whether an existing abstraction can be extended or parameterized first.
Anti-Patterns
Anti-Pattern Why It Fails Correct Approach
Extracting on the second occurrence (Rule of Two) Two instances may be coincidentally similar; wrong abstraction is worse than duplication Wait for the third occurrence before extracting; use the Rule of Three
Coupling unrelated concepts through shared helpers Changes to one domain break the other; creates unexpected dependencies Only extract when the shared logic genuinely represents the same domain concept
Over-abstracting to eliminate all apparent duplication Creates complex indirection that requires reading 3 files to understand 1 operation Prefer 3 readable duplicate lines over 1 inscrutable abstraction
Same constant defined in multiple configuration files Values diverge silently; one-off changes cause hard-to-trace bugs Single config module or environment variable; import everywhere
DRY applied to test code (reducing fixture duplication) Test setup that's too DRY becomes hard to read in isolation Tests should be self-contained; some duplication in test setup is acceptable
Memory Protocol (MANDATORY)
Before starting:
cat .claude/context/memory/learnings.md
After completing: Record any new patterns or exceptions discovered.
ASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.