← Blog
INGENIERÍA4 min de lectura

Operation Clean House: 460 líneas menos en Dekimu

20 Abr 2026Dekimu

Todo código se pudre si solo le añades cosas. Hoy hicimos una pasada de limpieza disciplinada sobre Dekimu — siete tracks, once commits, unas 460 líneas de duplicación colapsadas sin tocar una sola funcionalidad.

Operation Clean House es el nombre interno que le damos a un tipo específico de trabajo: no es refactorizar por refactorizar, no es perseguir un patrón nuevo, es quitar cosas que ya no cargan su propio peso. Código muerto. Copia y pega que debería haber sido una función. Tipos definidos dos veces. Escapes débiles con `any` que esconden la forma real. Handlers de error que capturan y se tragan todo.

Siete tracks, en orden

Código muerto primero, porque nada más importa si la línea ya es inalcanzable. Luego AI slop — el JSDoc que solo repite el nombre, los fantasmas de "// eliminado X", el try/catch defensivo alrededor de código puro. Después deduplicación, consolidación de tipos, dependencias circulares, fortalecimiento de tipos y, por último, manejo de errores. Cada track tiene sus propias reglas sobre qué cuenta como hallazgo y qué se descarta.

La mayor ganancia de esta ronda fueron las landings EN/ES. Se habían mantenido sincronizadas a mano sobre dos árboles de componentes paralelos durante meses. Extrajimos un único `LandingPage` parametrizado por `lang`, con un mapa `COPY` que contiene cada string localizado. Los dos archivos de ruta se redujeron a wrappers mínimos que solo existen para conservar sus exports de metadata. El mismo patrón se aplicó al índice del blog y a la vista del post.

Solo alta confianza

La regla que nos imponemos: solo se aplican hallazgos de confianza alta. Los de confianza media se reportan en el audit trail y se dejan para otra pasada. Los bajos se descartan sin más. Una limpieza que introduce un bug es peor que una que se pierde una oportunidad.

Esa regla es la que lo sostiene todo. Es lo que nos permite correr una de estas sin un ciclo de QA detrás. Cada commit es pequeño, cada commit es reversible, cada commit tiene una única razón. Si algo se rompe, `git bisect` termina en menos de un minuto.

La medida de una buena pasada de limpieza no es cuánto código quitaste. Es lo rápido que otra persona podría auditar cada línea que tocaste.

Lo que aplazamos

Dos CVEs de Next.js requieren un salto 14 → 15 con cambios rompedores en middleware y server actions. Ninguno es explotable contra Dekimu hoy — no usamos `next/image` sobre entrada no confiable ni tenemos rewrites públicos encadenados a orígenes internos. Están apuntados en el registro de decisiones y esperan.

La limpieza compone. Un codebase lo bastante pequeño como para leerlo en una tarde solo se queda así si lo podas con regularidad. Once commits hoy — probablemente menos la próxima vez, porque los patrones que vale la pena extraer ya están extraídos. Ese es el punto.