El patrón detrás de cada desastre hecho con IA

La IA escribe el código.
Nadie escribe la arquitectura.

No importa qué herramienta lo escribió: el código generado prompt a prompt se acumula sin estructura hasta que, cerca del mes seis, la velocidad se vuelve negativa. La retrospectiva de un developer tras seis meses de vibe coding terminó con el 40% del codebase reescrito y la deuda técnica arriba 340%. Las herramientas automatizaron el coding — no la ingeniería de software. useDeploy pone la ingeniería: arquitectura como paredes enforzadas, contratos como gates de CI, y una fundación sobre la que los agentes pueden construir sin poder disolverla.

La curva de deuda que recorre todo codebase hecho con IA

El patrón es agnóstico de herramienta porque la causa lo es. Un modelo de lenguaje genera código localmente plausible — cada función razonable por sí sola — sin ningún diseño global que conecte una generación con la siguiente. La estructura es exactamente lo que promptear no puede acumular. La deuda que esto crea no se anuncia: "la deuda técnica no se paga, se le sigue sumando, y en algún momento del futuro alguien la va a venir a cobrar" (news.ycombinator.com). La fecha de cobro llega rápido — la retrospectiva muy compartida de un developer tras seis meses de vibe coding terminó con el 40% del codebase reescrito mientras la deuda técnica crecía 340% — y cuando llega, las herramientas no pueden ayudar: pasado cierto tamaño, la IA que lo construyó ya no puede refactorizarlo de forma confiable, porque el codebase superó la context window efectiva del modelo (morphllm.com). Un thread de Hacker News comprimió toda la situación en una línea: "automatizamos el coding, pero no la ingeniería de software" (news.ycombinator.com). La ingeniería es el input que falta. Tiene que venir de algún lado donde el modelo no está.

Los síntomas universales

La velocidad se vuelve negativa

Features que tomaban una hora en el mes uno toman una semana en el mes seis — el arco ampliamente reportado donde los equipos terminan más lentos que antes de adoptar tooling de IA.

Amplificación de cambios

Cada feature toca todo, porque nada se aisló jamás. El costo de un cambio sigue el tamaño del codebase, no el tamaño del cambio.

Duplicación como default

Sin estructura visible que reusar, cada generación vuelve a resolver problemas resueltos — apenas distinto — hasta que no hay dos code paths que acuerden en nada.

Lógica sin dirección

Preguntá dónde se decide el pricing y la respuesta honesta es "en todos lados". Sin un hogar canónico, cada cacería de bugs es una búsqueda por el codebase entero.

El refactor que no puede pasar

El humano nunca leyó todo el código; al agente ya no le entra en el contexto. No queda nadie en el loop que pueda reestructurar el sistema con seguridad — así que nadie lo hace.

Paredes, gates y una dirección para todo

Cada modo de falla de esta página tiene la misma raíz: lógica sin dirección y ediciones sin gate. Un bounded context resuelve lo primero — las reglas de pricing viven en la capa domain de billing, y ESLint rompe el build si esa capa estira la mano hacia Express o Prisma. Los gates de CI resuelven lo segundo: lint de fronteras, el check de contrato api-types-fresh, 450+ tests y una suite end-to-end de Playwright corren en cada PR, así que la edición de un agente o respeta la estructura o no mergea nunca. Paredes más gates es todo el truco — y ninguno de los dos es una convención.

modules/billing — un bounded context
 1  modules/billing/
 2  ├── domain/            # pricing rules, invariants
 3  │     · no express, no @prisma/client —
 4  │       ESLint fails the build on contact
 5  ├── application/       # use cases + ports
 6  ├── infrastructure/    # Prisma repos, providers
 7  └── interfaces/http/   # routes + Zod schemas
 8  
 9  gates on every PR:
10    ✓ boundary lint    ✓ api-types-fresh
11    ✓ 450+ tests       ✓ Playwright E2E

Lo que useDeploy shippea contra cada modo de falla

Contra el drift: paredes en el linter

El flat-config de ESLint enforza el layering DDD — código de domain que importa express, @prisma/client o infraestructura falla CI. La arquitectura deja de ser una sugerencia.

Contra la podredumbre de payloads: contratos en CI

Schemas Zod compartidos en @app/contracts, un cliente openapi-fetch tipado y el gate api-types-fresh que bloquea merges cuando los payloads de server y cliente divergen.

Contra la regresión: una suite con dientes

450+ tests más un gate end-to-end de Playwright. Cada merge demuestra que el sistema sigue andando; nada shippea a puro vibe.

Contra los side effects inline: el outbox

Un event bus con outbox durable saca emails, webhooks y syncs de los request handlers — durables, con retries, observables.

Contra el desparramo: bounded contexts

iam, tenancy, billing, storage, ai y webhooks como módulos separados con cuatro capas cada uno. Cada pieza de lógica recibe exactamente una dirección.

Contra la pérdida de contexto: arquitectura escrita

Un CLAUDE.md operativo y docs en /docs hacen que cada sesión de agente arranque desde las reglas reales del sistema — no desde los defaults estadísticos del modelo.

La salida, sin importar qué herramienta te trajo acá

El playbook es el mismo venga el desastre de un app builder, un agente de editor o una CLI. Primero, dejá de acumular: cada prompt contra la base vieja suma intereses a la deuda. Segundo, inventariá comportamiento, no código — listá lo que la app hace por los usuarios, porque esa lista es lo que estás preservando; el código nunca fue el activo. Tercero, levantá la fundación: useDeploy shippea las capas commodity — auth, orgs, billing, storage, plomería de AI, webhooks — como módulos testeados, así el port arranca desde "solo features". Cuarto, mové la lógica de producto de a un dominio, manejada por el agente que ya uses; el lint de fronteras, el gate de contrato y la suite de tests verifican cada paso — exactamente la verificación que el build original nunca tuvo. Quedate con tu herramienta favorita para el front; seguí prompteando; conservá la velocidad. Lo que cambia es la división del trabajo: el agente construye lo que vos estás construyendo, y la fundación decide cómo se construye.

Preguntas frecuentes

¿El código generado por IA es inherentemente malo?+
Línea por línea, suele estar bien — plausible, idiomático, localmente correcto. Lo que falta es estructura global: ningún patrón consistente conecta una generación con la siguiente, y como lo puso un comentarista de Hacker News, cuando la consistencia aparece "es de pura casualidad y no se repite". El gap no es habilidad para codear; es ingeniería.
¿No puedo promptear a la IA para que refactorice su propio desorden?+
Ese es el doom loop: para cuando el desorden amerita un refactor, el codebase ya superó la context window efectiva del modelo (morphllm.com) — el agente ya no puede ver suficiente del sistema para reestructurarlo con seguridad. Refactorizar exige una vista global; generar nunca la necesitó. Esa asimetría es la razón por la que la deuda se cobra en vez de saldarse.
¿Por qué una base estructurada en vez de pagarle a alguien que limpie?+
Los talleres de limpieza suelen cotizar sus rescates en miles de dólares — y sin enforcement estructural, la misma deuda se vuelve a acumular el día que volvés a promptear. Una base con paredes arregla la causa: el agente sigue construyendo, y las fronteras, los gates de contrato y la suite de tests evitan que la estructura se vuelva a disolver.
¿Con qué herramientas de IA anda esto?+
Con todas, porque las paredes son agnósticas de herramienta. Las fronteras de ESLint, el gate de contrato api-types-fresh y la suite de tests corren en CI sin importar quién — o qué — escribió el diff. El repo además shippea un CLAUDE.md operativo más docs de arquitectura en /docs, así los agentes arrancan cada sesión desde las reglas y no desde sus defaults.

Una licencia. Dos formas de tenerla.

CORE

Founder

$99pago único

Un snapshot congelado de UseDeploy. Tuyo para siempre, sin updates.

  • Descarga del zip con versión frozen
  • Código completo, uso comercial, proyectos ilimitados
  • Los 800+ tests · todas las páginas de docs
  • Refund a 14 días
RECOMMENDED

LATEST + UPDATES

Lifetime

$199$249pago único

Siempre el último UseDeploy. Re-descargá cada release, gratis.

  • Zip de la última versión — re-descargable para siempre
  • Cada release futuro sin cargo extra
  • Soporte Discord priority
  • Los 800+ tests · todas las páginas de docs
  • Refund a 14 días

Automatizá el coding. Conservá la ingeniería.

useDeploy es la fundación que los agentes se saltean: módulos DDD, fronteras enforzadas por lint, contratos tipados, 450+ tests y un gate E2E — para que el mes seis se parezca al mes uno.