Cómo usar especificaciones en desarrollo con IA para evitar problemas

desarrollo-con-ia-y-spec

¿Quieres acelerar el desarrollo con IA o quieres estrellarte más rápido?

Tiempo estimado de lectura: 6 min

  • La spec corta y accesible es imprescindible cuando usas IA para generar código.
  • Sin spec aparecen tres síntomas: incoherencia de estilo, pérdida de contexto y acoplamiento brutal.
  • Implementa una SPEC.md en la raíz, define contratos y divide el trabajo en prompts modulares.
  • Convierte al desarrollador senior en guardián de la spec para revisar PRs generados por IA.

Poca gente habla de esto en las charlas brillantes de conferencias: darle a una IA permiso para escribir código sin una spec es como dejar a un pintor con un bote de pintura en la cocina de tu casa. Va a pintar rápido. Va a ser espectacular durante cinco minutos. Y luego tendrás harina pegada en la pared, cables pelados y una silla rota.

Esto no es exageración. Es un patrón. Lo veo en proyectos pequeños y en réplicas gigantes: la velocidad instantánea convierte decisiones críticas de arquitectura en improvisación. Y la improvisación, por definición, no escala.

Resumen rápido (lectores con prisa)

  • Qué es: Una spec es un archivo vivo y accesible que define objetivos, límites, reglas y contratos que la IA debe respetar.
  • Cuándo usarla: Siempre que el código toque dominio, datos, seguridad o infraestructura crítica.
  • Por qué importa: Evita decisiones locales de la IA que llevan a incoherencia, pérdida de contexto y acoplamiento.
  • Cómo funciona: Sirve al agente como brújula: convierte prompts vagos en contratos concretos y verificables.

¿Por qué la spec es el arma secreta (y olvidada) al programar con IA?

La spec no es burocracia. No es un PDF que acumula polvo. Es el plano que limita la creatividad sin matarla. Es la instrucción que obliga a la IA a optimizar por coherencia, no por conveniencia momentánea. En términos sencillos: la spec transforma “hacer que funcione” en “hacer que funcione y siga funcionando”.

Modelos probabilísticos y decisiones

Poca gente entiende algo crucial: los modelos de lenguaje son motores probabilísticos. Responden con la solución más probable según su entrenamiento y tu prompt. No saben ni les importa tu SLA, tu GDPR ni el culto interno a las serverless functions que montaste el año pasado. Si no les pones una spec, toman decisiones por ti. Y esas decisiones rara vez son las correctas para tu sistema.

Descubrí algo curioso: cuando un equipo usa IA sin spec, aparecen siempre tres síntomas en el código.

1) Incoherencia estilística que mata el mantenimiento.

Un archivo usa Fetch, otro Axios, otro una función casera que alguien copió de StackOverflow. Ninguna regla es compartida. El README promete TypeScript y encuentras middleware en JavaScript puro. La IA actúa por contexto inmediato, no por coherencia global.

2) Pérdida de contexto.

Las ventanas de los modelos tienen límite. Lo que no está fijado en una spec, desaparece del escenario cuando la conversación se estira. Resultado: soluciones que olvidan requisitos críticos (idempotencia, manejo de errores, validaciones).

3) Acoplamiento brutal.

Funciones monolíticas que mezclan acceso a datos, lógica de negocio y presentación. Todo junto. Porque la IA optimizó para el prompt: “haz que funcione ya”, no para testabilidad o escalabilidad.

Esto tiene nombre: alucinación arquitectónica

No es que la IA invente una ruta inexistente; inventa la forma en que tu sistema debería operar. Propone abstracciones que no encajan. Implementa patrones que rompen tus contratos. Y lo peor: lo hace con convicción. Te entrega un PR impecable y peligroso.

Si trabajas con Next.js y pides “sistema de autenticación” sin más, la IA te va a devolver lo que suele devolver: la solución más popular en sus datos. ¿Que tu empresa requiere tokens rotativos y encriptación extra? La IA lo ignora. ¿Que solo se debe usar server components para ciertas páginas? La IA lo ignora. No lo hace con malicia. Lo hace por probabilidad estadística.

Entonces, ¿qué es una spec moderna para desarrollo con IA?

No es el viejo documento de 50 páginas que nadie lee. Es el System Prompt del repositorio. Es un archivo vivo, legible por humanos y por agentes. Contiene las respuestas a las preguntas que la IA no puede inferir del código: objetivos, límites, reglas y modelos de datos.

Una spec efectiva incluye:

  • Objetivo funcional claro: qué problema resuelve este módulo y qué no debe hacer.
  • Stack y versiones permitidas: qué frameworks, librerías y versiones están aprobadas.
  • Reglas de arquitectura: patrones obligatorios (ej. “usar Server Components en Next.js salvo casos X”) y prácticas prohibidas.
  • Contratos de datos: interfaces TypeScript, esquemas de BD, formatos de API.
  • Políticas de seguridad y privacidad: qué información no puede exponerse, cómo manejar secretos.
  • Estrategia de testing y criterios de aceptación.

Piensa en la spec como la brújula del proyecto. La IA es el marinero con experiencia, pero sin brújula se va con la corriente.

Cómo empezar ahora mismo (sí, ahora): 5 pasos prácticos para evitar el caos

1) Crea un SPEC.md en la raíz del repo.

No lo escondas en Google Docs. Ponlo en el repo para que cualquier agente lo consuma. Que sea corto, directo y accionable. Primera frase: “Si esto cambia, consulta al team lead”. Segunda frase: “No uses X, usa Y”. Las reglas deben ser bullet points fáciles de aplicar.

2) Define los contratos antes de pedir ejecución.

Antes de pedir a la IA que escriba la lógica, define las interfaces. Si pides que implemente una función, dale la firma TypeScript y los tests. Esto convierte la tarea en un contrato a cumplir, no en una sugerencia.

3) Usa archivos de reglas a nivel proyecto.

Si tu herramienta lo permite, añade reglas que la IA lea automáticamente (.cursorrules, spec.json, etc.). Es la diferencia entre decir “por favor” y obligar. Hazlo parte del flujo de CI.

4) Divide el trabajo en prompts modulares.

No le pidas a la IA “haz todo”. Pide un plan paso a paso. Revisa el plan. Apruébalo. Luego pide que ejecute cada paso. Así preservas control y contexto, además de poder auditar decisiones.

5) Convierte al desarrollador senior en guardián del criterio.

El trabajo del senior no es escribir menos código; es decidir qué se debe escribir. Revisar PRs seguirá siendo necesario, pero con otro foco: ¿esto respeta la spec? ¿Esto escala? Si la respuesta es no, no merges.

Historias reales: el junior, el senior y la IA

Imagínate esto.

El junior llega, emocionado. “Voy a acelerar. Uso Copilot y saco features.” En 48 horas hay un demo impresionante. El producto parece volar. La dirección está feliz.

Luego viene la integración con otros servicios. El equipo descubre tokens rotos, errores raros en producción y tests que fallan en horarios impredecibles. El senior se sienta, mira el repo y ve 12 formas distintas de autenticación. Decide reescribir. Dos semanas perdidas en refactor. El demo se apaga.

Cambia el final: el senior escribió la spec antes de empezar. El junior pidió permisos y la IA generó código que ya respetaba validaciones, logs y pruebas. Todo encajó. El demo no solo funcionó; aguantó.

Metáfora rápida: la spec es el embudo

La spec es el embudo que convierte la creatividad desenfrenada de la IA en soluciones útiles. Sin el embudo, la creatividad sale por todos lados y cubre el proyecto como aceite en el motor. Con el embudo, la creatividad llega donde debe y no inunda lo que no corresponde.

No todo necesita spec rígida (también hay límites)

Sí, hay casos donde pedirle a la IA que improvise está bien. Refactorizaciones locales, generación de mocks, o prototipos exploratorios. No necesitas una spec para cada línea de código. Pero necesitas reglas cuando el código toca el dominio, los datos, la seguridad o la infraestructura crítica.

Regla práctica: cuando lo que cambias rompe contratos (APIs, bases de datos, auth, flujos críticos), necesitas una spec. Punto.

Qué poner en la spec para que la IA realmente la entienda

  • Comandos claros: “No usar X”, “Usar Y con versión Z”.
  • Ejemplos: un snippet de código que es correcto y uno que no.
  • Criterios de aceptación: tests que deben pasar. Un checklist.
  • Casos borde: qué hacer con fallos del servicio, timeouts, reintentos.
  • Política de secretos: dónde y cómo almacenar tokens.
  • Responsabilidades: quién aprueba cambios que tocan módulos críticos.

CTA simple y directo: haz esto ahora

Abre tu repo. Crea SPEC.md. Escribe cinco cosas:

  • Objetivo del módulo en una frase.
  • Tres reglas de arquitectura innegociables.
  • Las interfaces de los datos (TypeScript).
  • Un test de aceptación.
  • Dónde poner secretos.

Hazlo en los próximos 60 minutos. No lo dejes para el sprint. Si quieres, respóndeme este mensaje con “Quiero la plantilla” y te mando un SPEC.md listo para pegar en tu repo.

Urgencia real: la deuda técnica no espera

Cada PR que aceptas sin spec es una apuesta a que nadie tocará eso en seis meses. No confíes en esa apuesta. En seis meses, otro equipo, otro deadline o un pico inesperado de usuarios lo romperán. La deuda técnica es acumulativa y compite con tu tiempo de desarrollo futuro. Actuar ahora te evita horas de rehacer.

Cierre que no cierra (a propósito)

Si sigues creyendo que la IA es la varita mágica que arregla todo, tienes dos opciones: aprender a gobernarla o pagar el precio después. La spec es la forma más barata y efectiva de gobernarla.

Esto no acaba aquí. Si quieres, te doy:

  • Una plantilla de SPEC.md.
  • Ejemplos de .cursorrules para Cursor.
  • Un checklist de revisión para PRs generados por IA.

Dime cuál quieres y te lo mando. Ahora decide: acelerar desordenadamente o correr con una brújula. Tus commits lo recordarán.

Si te interesa llevar estas prácticas a flujos automáticos y agentes dentro de proyectos reales, revisa recursos y experimentos prácticos en Dominicode Labs. Es una continuación natural para quien quiera convertir una spec en reglas consumibles por agentes.

FAQ

¿Qué es exactamente una SPEC.md y dónde debe vivir?

Es un archivo en la raíz del repositorio que documenta objetivos, reglas, contratos y criterios de aceptación. Debe estar en el repo para que agentes y desarrolladores lo consuman fácilmente.

¿Cuánto detalle necesita una spec?

Suficiente para responder las preguntas que la IA no puede inferir: objetivos, límites, interfaces, versiones y criterios de prueba. Debe ser breve y accionable, no un tratado.

¿La spec reemplaza la revisión de código?

No. Reduce el foco de la revisión: ahora el senior verifica cumplimiento de la spec, escalabilidad y contratos, en lugar de escribir todo el código.

¿Qué pasa si olvidamos actualizar la spec?

La spec caduca y pierde valor. Debe ser un archivo vivo; incluye una línea de responsabilidad (quién aprueba cambios) para mantenerla vigente.

¿Cómo integro la spec en el CI?

Añade validaciones automáticas que verifiquen contratos (types, esquemas), reglas de lint y que los tests de aceptación definidos en la spec pasen antes del merge.

¿Necesito una spec para prototipos?

No siempre. Para prototipos exploratorios puedes prescindir de una spec rígida. Pero para cualquier cambio que afecte datos, seguridad o APIs, sí debes tener una spec.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *