IA & Machine LearningIntermedio

Intent-Driven Development

Desarrollo con agentes de IA en el que la intención (objetivo, restricciones y criterios de aceptación) se escribe explícita para que el agente acierte.

Pronunciación

/ɪnˈtent ˈdrɪvən dɪˈveləpmənt/
"in-TENT DRI-ven di-VE-lop-ment"
Escuchar en:Forvo

Qué es

Intent-Driven Development (IDD) es un enfoque emergente para desarrollar software con agentes de AI donde:

  1. El desarrollador hace explícita la intención: qué se quiere lograr, restricciones y criterios de aceptación
  2. Esa intención se trata como un artefacto de primera clase (no un prompt suelto) y se acompaña del contexto necesario
  3. La AI genera el código contra esa intención
  4. El desarrollador revisa, verifica y refina el resultado

Nota: es un término reciente y sin definición estándar. Lo usan, por ejemplo, intent-driven.dev (“hacer explícita tu intención y estructurar el contexto a su alrededor, para que los agentes produzcan lo que realmente quisiste decir”) y consultoras como Keyhole Software. Está muy relacionado con el spec-driven development.

De código a intención

┌─────────────────────────────────────────────────────────┐
│          EVOLUCIÓN DEL DESARROLLO                       │
├─────────────────────────────────────────────────────────┤
│                                                          │
│   1940s-50s: Código máquina y ensamblador               │
│   → MOV AX, 5                                           │
│                                                          │
│   Desde fines de los 50: Lenguajes de alto nivel        │
│   → int x = 5;                                          │
│                                                          │
│   2000s: Frameworks                                     │
│   → const user = await User.findById(id);               │
│                                                          │
│   2020s: Copilot/Autocompletado                         │
│   → Escribe inicio, AI completa                         │
│                                                          │
│   Mediados de 2020s: Intent-Driven Development          │
│   → "Crea endpoint para obtener usuario por ID          │
│      con validación y manejo de errores"                │
│   → AI genera todo el código                            │
│                                                          │
└─────────────────────────────────────────────────────────┘

Cómo funciona

Flujo tradicional

Requisito → Diseño → Código línea por línea → Test → Deploy
    ↓
Desarrollador escribe CADA línea de código

Flujo Intent-Driven

Intención → AI genera código → Desarrollador revisa → Refinamiento → Deploy
    ↓
Desarrollador describe QUÉ quiere, no CÓMO hacerlo

Ejemplos prácticos

Ejemplo 1: Crear un endpoint

INTENCIÓN:
"Necesito un endpoint GET /api/users/:id que:
- Valide que el ID sea un UUID válido
- Busque el usuario en la base de datos
- Retorne 404 si no existe
- Retorne el usuario sin el campo password"

AI GENERA:
// app/api/users/[id]/route.ts (Next.js App Router)
import { z } from "zod";
import { db } from "@/lib/db";

const paramsSchema = z.object({
  id: z.string().uuid("ID must be a valid UUID"),
});

export async function GET(
  req: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  const parsed = paramsSchema.safeParse(await params);
  if (!parsed.success) {
    return Response.json({ error: "Invalid ID" }, { status: 400 });
  }
  const { id } = parsed.data;

  const user = await db.user.findUnique({
    where: { id },
    select: {
      id: true,
      email: true,
      name: true,
      createdAt: true,
      // password excluded
    },
  });

  if (!user) {
    return Response.json({ error: `User ${id} not found` }, { status: 404 });
  }

  return Response.json(user);
}

Ejemplo 2: Refactoring

INTENCIÓN:
"Refactoriza este componente para usar React Query
en lugar de useEffect + useState para el fetch"

AI analiza el código actual y genera la versión refactorizada
manteniendo el mismo comportamiento pero con mejor manejo de estado.

Niveles de abstracción

Nivel Ejemplo de intención Complejidad
Micro “Agrega validación de email” Baja
Función “Crea función de autenticación JWT” Media
Feature “Implementa sistema de notificaciones” Alta
Arquitectura “Migra a microservicios” Muy alta

Mejores prácticas

1. Sé específico en la intención

❌ "Haz un login"

✅ "Crea un flujo de login con:
   - Formulario con email y password
   - Validación client-side con Zod
   - Llamada a /api/auth/login
   - Manejo de errores con toast
   - Redirección a /dashboard en éxito"

2. Proporciona contexto

❌ "Agrega un botón"

✅ "Agrega un botón de 'Guardar cambios' al formulario
   de perfil que:
   - Use el componente Button existente
   - Esté deshabilitado mientras no hay cambios
   - Muestre loading mientras guarda"

3. Itera en refinamientos

Intención inicial → Código generado →
  "Ahora agrega tests" →
  "Mejora el manejo de errores" →
  Código final

Herramientas que soportan IDD

Herramienta Fortaleza
Claude Code Contexto de repositorio completo
Cursor Integración IDE profunda
GitHub Copilot Integración con GitHub

El rol del desarrollador cambia

ANTES:                          DESPUÉS:
├── Escribir código             ├── Definir intenciones claras
├── Debuggear syntax            ├── Revisar código generado
├── Buscar documentación        ├── Validar lógica de negocio
└── Copiar/pegar de Stack       └── Guiar refinamientos
    Overflow

Limitaciones actuales

  • Contexto limitado - AI no siempre entiende todo el proyecto
  • Alucinaciones - Puede generar código incorrecto
  • Seguridad - Requiere revisión humana siempre
  • Casos edge - Puede ignorar escenarios límite

Términos relacionados


Recuerda: Intent-Driven Development no reemplaza al desarrollador—cambia su rol de “escribir código” a “dirigir y validar”. El conocimiento técnico sigue siendo esencial para revisar lo que genera la AI.