agentleFS
Carlososuna11Carlososuna11/claude-skills/skills/reuse-existing-patterns/SKILL.md

reuse-existing-patterns

Skill0 starsChanged 5 months agoMITView on GitHub

Usar antes de añadir un archivo, abstracción, validator, guard, servicio, helper, componente, constante, tipo o test nuevo al repo. También al diseñar la solución a un problema cuando el repo lleva tiempo en producción y probablemente ya tenga el mecanismo que estás por inventar.

The file

Files
SKILL.md

Reuse Existing Patterns

Overview

Crear paralelos cuando ya existe un patrón establecido es la causa número uno de los comentarios de revisión del tipo "esto ya existe, usa el patrón actual" — y obliga a rehacer trabajo. Más allá del review, los repos con N formas distintas de hacer lo mismo se vuelven costosos de mantener y difíciles de onboardear.

Principio: buscar primero, crear después. El reflejo correcto al empezar cualquier cambio es buscar 30 segundos si el mecanismo ya existe.

Anunciar al inicio: "Aplicando reuse-existing-patterns antes de crear <lo-que-sea>."

Por qué importa más allá del review

  • Consistencia interna: si el repo tiene tres formas de validar lo mismo, el próximo dev (humano o agente) no sabe cuál usar.
  • Costo de mantenimiento: si la regla cambia, hay que tocar N lugares en vez de uno. Bugs se duplican.
  • Curva de onboarding: leer un repo con múltiples patrones equivalentes cuesta más que uno con uno solo bien definido.

Step 1: Identificar qué vas a crear

Antes de codear, nombrar explícitamente la categoría de lo que vas a crear. La búsqueda cambia por categoría:

Vas a crear...Categoría
Reglas para validar un inputValidator / schema
Lógica antes de ejecutar un endpointGuard / interceptor / middleware
Lógica de negocio compartidaService / repository / use-case
Endpoint admin u operativoTool controller
Formateo de dinero/fechas/númerosHelper / util
Renderizado de algo en UIComponente
Test nuevoTest (mirar convención)
Valor constante o configuraciónConstant / config / enum
Forma de datosType / interface / DTO
Algo de orquestación entre módulosModule / facade / mediator

Sin esa categoría explícita, la búsqueda termina siendo difusa y encuentra cualquier cosa.

Step 2: Buscar antes de crear

Qué buscar según categoría

CategoríaDónde mirar primero
Validator / schemavalidators/, archivos *.validator.*, schemas Zod/Joi/Pydantic/class-validator
Guard / interceptor / middlewareCarpetas equivalentes (guards/, interceptors/, middleware/, decorators/)
Service / repositoryPatrones de inyección (@Injectable, factories, providers, módulos del framework)
Tool controllerControllers en tools/, admin/, ops/
Helper / utilArchivos en utils/, helpers/, lib/ por nombre similar
Componente UIcomponents/ por funcionalidad similar, no solo por nombre exacto
TestConvención del repo: __tests__/, *.spec.*, *.test.* colocados como vecinos vs. en carpeta dedicada
Constant / config / enumArchivos consolidados de constants, enums, config
Type / interface / DTOTipos compartidos en types/, dto/, models/, interfaces/
Module / facadeIndex files, barrels, README del módulo

Cómo buscar — comandos universales

# Por concepto en el código
grep -rni "<concepto>" src/ | head -20
rg -i "<concepto>" src/ | head -20      # si tienes ripgrep

# Por exportaciones de símbolos similares
grep -rn "export.*<concepto>" src/ | head -20

# Por estructura de carpetas
fd -t d "<nombre>" src/                  # si tienes fd
find src -type d -iname "*<nombre>*"

# Si el repo usa barrel files / index re-exports
grep -rn "<concepto>" src/**/index.* 2>/dev/null

Adaptar a la herramienta disponible (rg si está, fd, o grep/ find estándar). El comando importa menos que el reflejo de buscar antes de crear.

Ampliar la búsqueda si el primer pase no encontró nada

  • Sinónimos: si buscaste "auth" sin éxito, probar "guard", "permission", "token", "credential".
  • Singular y plural.
  • En inglés y en el idioma del repo (algunos repos tienen mezcla).
  • En tests: a veces el helper que buscas vive en tests/helpers/.
  • En docs/README: a veces hay un mapa del módulo que apunta al pattern oficial.

Step 3: Decidir — usar el existente o crear paralelo

Usar el existente si:

  • Cumple el caso de uso con cambios menores (parámetro opcional, nueva variante).
  • El equipo lo invoca consistentemente en código reciente (git log --since=3.months <archivo> no muestra movimiento de huida).
  • Está documentado o tiene tests.

Crear paralelo solo si:

  • El patrón existente está explícitamente deprecado y el equipo migró a uno nuevo. Verificar en CHANGELOG, ADRs, o preguntar al maintainer.
  • El caso de uso es genuinamente distinto y forzar el patrón actual lo deformaría. Esto debe documentarse en el body del PR para que el revisor no lo marque como duplicado.
  • El patrón existente tiene un bug conocido y la migración es parte del scope del cambio actual.

Cuando creas paralelo, dejarlo escrito en el PR:

"No reuso validators/AmountValidator porque <razón>. El nuevo MultiCurrencyAmountValidator cubre <X> sin tocar el caso que resuelve el original."

Quick Reference

SituaciónAcción
Voy a crear archivo nuevoStep 1 (categoría) → Step 2 (buscar) → Step 3 (decidir)
Primer pase de búsqueda no encontróAmpliar (sinónimos, idiomas, tests, docs)
Encontré algo parecido pero no exactoStep 3: ¿basta con cambio menor?
Encontré exactamente lo que iba a hacerUsar el existente, no crear paralelo
Existente está deprecadoVerificar en CHANGELOG/ADR y crear con justificación
No estoy seguro si crear paraleloPreguntar al maintainer antes de codear

Common Mistakes

  • Saltar Step 1 (categoría) y buscar directo. La búsqueda sin categoría es difusa y termina en cualquier resultado.
  • Buscar solo por el nombre exacto que tenías en mente. Probar sinónimos, plural/singular, inglés/idioma del repo.
  • Asumir "no hay nada parecido" sin haber buscado en tests/docs. Mucho código de soporte vive ahí.
  • Crear paralelo "por las dudas" sin documentar por qué en el PR. El revisor lo marca como duplicado.
  • Tomar el primer match como definitivo sin chequear si está deprecado.

Red Flags

Nunca:

  • Crear archivo, helper, validator, componente o constante nueva sin haber buscado primero si ya existe.
  • Crear paralelo sin documentar la razón en el PR.
  • Tomar el primer match sin verificar si está activo o deprecado.

Siempre:

  • Nombrar la categoría antes de buscar.
  • Probar sinónimos y singular/plural cuando el primer pase falla.
  • Documentar en el PR la razón si decides crear paralelo.
  • Prueba final antes de codear: "si hubiera buscado treinta segundos antes de empezar, ¿lo habría encontrado?". Si sí, había que buscar.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.