# Reimplements a helper the project already has, under the same or another name

*Code that already exists*: one of the ways AI coding agents bloat software, from lessloc's [pattern catalog](https://lessloc.org/patterns/index.md). lessloc gives every session the rule: take what is already in the codebase before new code.

## What makes reimplementing a helper the project already has a bad practice?

The standards that call it a bad practice: DRY (Hunt & Thomas, *The Pragmatic Programmer*); Fowler, *Refactoring*: Duplicated Code; [CWE-1041](https://cwe.mitre.org/data/definitions/1041.html) Use of Redundant Code; Sonar S4144.

## What does lessloc do about reimplementing a helper the project already has?

lessloc gives every session the rule: take what is already in the codebase before new code. Hints name existing code before the task and inside each subagent's prompt. lessloc catches it as [`copy`](https://lessloc.org/guide/reference.md#tier-1), [`near-copy`](https://lessloc.org/guide/reference.md#tier-2) and [`similar-name`](https://lessloc.org/guide/reference.md#tier-2).

- `copy` (tier 1): A block of `dupLines` code lines that also exists elsewhere, or a function with the same body as another under other names.
- `near-copy` (tier 2): A new function that is mostly the same code as an existing one.
- `similar-name` (tier 2): A new function whose name looks like an existing one's.

## Related patterns

The other patterns in [Code that already exists](https://lessloc.org/patterns/index.md#code-that-already-exists):

- [Copying a rule another function owns](https://lessloc.org/patterns/copied-rule.md): lessloc catches it as `repeated-literal`.
- [Keeping old and new versions side by side](https://lessloc.org/patterns/side-by-side.md): lessloc gives every session the rule: one implementation per rule.
- [Rebuilding what the standard library or framework has](https://lessloc.org/patterns/rebuilt-library.md): lessloc gives every session a rule against it and catches it as `simpler` and `reinvented`.
- [Copy-pasted test cases instead of one parametrized test](https://lessloc.org/patterns/copied-tests.md): lessloc catches it as `copied-tests`.
- [A second library for a job an installed one already does](https://lessloc.org/patterns/second-library.md): `new-dependency` names the library that is already installed.
- [The same data shape in several layers (DTO, model, entity)](https://lessloc.org/patterns/duplicate-shapes.md): `copy` catches identical type bodies.
- [The same CSS declarations under another selector](https://lessloc.org/patterns/css-copy.md): lessloc catches it as `style-copy`.
