# No Duplicate Logic

> Use when adding a case, check, or branch to a function that already exists, especially after jumping straight to the insertion point.

- Skill: `fergius-engineering/no-duplicate-logic` (Agent Skill)
- Install (CLI): `npx skillmds@latest add fergius-engineering/no-duplicate-logic`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fergius-engineering/no-duplicate-logic/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Fergius-Engineering (https://skillmd.com/u/fergius-engineering)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fergius-engineering/no-duplicate-logic

---


## The rule

Before you add logic to a function that already exists, read the whole function. The case you're about to write is often already handled a few lines down. A second block that produces the same result doesn't replace the first — both run, and the output silently doubles. The fix you needed was usually three lines added to the block that's already there, not a new block beside it.

This is not the same as fixing in the shared layer. That's about *where* a bug lives across callers. This is narrower: don't paste a parallel branch inside one function without reading what's already in it.

## Fires when

Adding a case, branch, check, or emit to an existing function, handler, switch, or validation pass — especially when you jumped straight to the insertion point without reading the rest of the function.

## How to apply

Before adding logic that emits a result keyed by some id or name, search the whole function for that id or that result. If a block already handles it, extend that block instead of adding a new one. Read the function top to bottom before you insert anything into it.

## Worked example

A validation function already emits a "bad-name" issue for a record. You add a new block to emit "bad-name" without noticing the existing one a screen above. Now every bad-named record produces two identical issues, and a count somewhere is quietly off by a factor of two. The real change was three lines inside the block that was already there. Reading the function before inserting would have shown it.

## Red flags

| Thought | Reality |
|---|---|
| "I'll just add the block here" | The block may already exist above; read first. |
| "It's a new case" | Check it's actually new before you write it. |
| "The function's long, I'll jump to the spot" | Jumping to the spot is how you duplicate the spot. |

