Con la llegada de Agentes y herramientas como Claude Code, Open Code o Codex, (y muchas otras que funcionan en web), es un hecho que incluso personas que no saben programar pueden generar código y construir aplicaciones funcionales (vibe corders), pero, aquí es donde los desarrolladores con experiencia podemos destacar, ya que nosotros no solo sabemos que pedirle a la IA, también sabemos cómo pedírselo.
No es lo mismo decirla a la IA: “Hazme una app bonita para llevar el control de mis clientes, que pueda guardar sus datos personales y poder verlos en una lista”.
A decirle:
Vamos a construir un CRM, quiero que el backend lo realices en Laravel 13, vamos a crear una API para la conexión con el front-end, vamos a crear los siguientes Modelos: Cliente, Empresa, etc. genera las migraciones. El controller debe llamarse ApiController y estar ubicado dentro de app/http/Controllers.
Para front-end vamos a usar Vue JS, quiero que la APP sea PWA, para el diseño utiliza Tailwind, y el CRM debe tener estas funciones:
- Función 1 (ingrese aquí descripción de la función o feature)
- Función 2 (ingrese aquí descripción de la función o feature)
- Función 3 (ingrese aquí descripción de la función o feature)
- etc.
Evidentemente estoy colocando una descripción corta, este segundo prompt se puede extender de forma infinita, y podemos añadir detalles muy específicos de la arquitectura y cada uno de los features.
El resultado del segundo Prompt será mejor por 2 razones:
1. Le estamos diciendo a la IA que tecnologías usar y le estamos dando las pautas, reglas y especificaciones de lo que debe hacer.
2. Estamos generando un proyecto controlado, utilizando tecnologías que dominamos, vamos a conocer como está construido, lo que significa que será escalable 100% de forma sencilla.
Además, al “guiar” a la IA estamos evitando que ella tome decisiones que ignoremos, que genere funciones que no necesitamos y que después sea más difícil escalar, añadir nuevas funcionalidades o corregir errores.
Pues de una manera simple y resumida eso son los Spec, darle a la IA las pautas, reglas de desarrollo, reglas de negocio, límites, guardarraíles, tecnologías, especificaciones, detalles, resultados esperados y criterios de aceptación.
Con esto obtenemos mejores resultados, gastamos menos tokens, y te conviertes en el arquitecto de lo que estás creando, tu guías a la IA no la IA a ti.
¿Como podemos implementar esto en nuestros proyectos?
Los Spec son de mucha utilidad sobre todo en proyectos nuevos (que apenas se van a construir) o al agregar nuevos features, y aunque sí, eso retrasa un poco el desarrollo, como ya mencionamos varias veces, permite obtener un producto de mejor calidad, escalable y mantenible.
Integrar los Spec en tus proyectos es sencillo, basta con generar un folder llamado “specs” (puedes usar otro nombre si lo deseas), y dentro colocar de forma organizada (en documentos MD) todos los detalles sobre el proyecto, features, guardarraíles, etc.
Lo normal es colocar un archivo donde especifiques de forma general de que va el proyecto, las tecnologías a utilizar, si deseas versiones específicas lo puedes indicar, puedes agregar reglas, etc.
Puedes generar un folder para los features, y crear un archivo para cada feature.
Un archivo para tareas (tasks.md), etc.
Aquí un ejemplo muy simple de cómo pueden llegar a verse los Spec en un proyecto.
Imagina que quieres crear una API para guardar productos favoritos en un ecommerce, con Spec-driven development.
Generamos el archivo specs -> features -> favorite-products.md
Y el contenido puede ser algo como esto:
```
Feature: Productos favoritos
Objetivo:
Permitir que un usuario autenticado pueda guardar productos como favoritos.
Reglas:
- Solo usuarios autenticados pueden guardar favoritos.
- Un usuario no puede guardar el mismo producto dos veces.
- Si el producto no existe, devolver 404.
- Si el favorito ya existe, devolver 409 o respuesta idempotente.
- El usuario solo puede ver sus propios favoritos.
Endpoints:
- POST /api/favorites
- GET /api/favorites
- DELETE /api/favorites/{product_id}
Base de datos:
Tabla: user_favorites
Columnas:
- id
- user_id
- product_id
- created_at
- updated_at
Criterios de aceptación:
- Puedo agregar un producto válido a favoritos.
- No puedo duplicar favoritos.
- No puedo ver favoritos de otro usuario.
- Puedo eliminar un favorito existente.
```
Luego ya solo le pides a tu agente favorito que lo implemente.
Trabajar con specs requiere pensar más antes de empezar a desarrollar, pero justo eso hace la diferencia, recuerda que ahora con la IA los desarrolladores debemos ser más arquitectos y orquestadores si queremos destacar.
Así que, este es el mejor momento para aprender arquitectura de software y diseño técnico, te ayudará a generar mejores specs y mejor software.