1. Objetivos de la semana
Aprender a especificar software antes de construirlo
Una de las habilidades más importantes para trabajar con IA no es saber escribir mejores prompts. Es saber definir correctamente el problema.
Un agente puede escribir miles de líneas de código muchísimo más rápido que una persona. El problema es: ¿Está construyendo lo que realmente necesitábamos?
Requisitos
Convertir necesidades de negocio en requisitos.
User Stories
Describir funcionalidades desde el punto de vista del usuario.
Aceptación
Definir cuándo una funcionalidad está correctamente terminada.
Edge Cases
Pensar qué ocurre cuando las cosas no salen como esperamos.
Specifications
Crear documentos que la IA pueda utilizar como fuente de verdad.
Validación
Evaluar si una implementación realmente cumple el requisito.
2. El gran problema: "quiero una aplicación"
Una petición demasiado vaga
Quiero una aplicación para gestionar empleados.
Un agente puede construir algo. Pero... ¿Qué significa "gestionar"?
- ¿Crear empleados?
- ¿Eliminar?
- ¿Editar?
- ¿Buscar?
- ¿Filtrar?
- ¿Asignarlos a proyectos?
- ¿Controlar vacaciones?
- ¿Controlar disponibilidad?
- ¿Qué roles existen?
- ¿Quién puede hacer cada cosa?
El mismo requisito mejor definido
Como responsable de recursos humanos,
quiero poder crear un empleado indicando:
- nombre;
- apellidos;
- email;
- categoría;
- fecha de incorporación;
para poder mantener actualizado
el inventario de empleados.
Ahora tenemos mucha más información. Pero todavía falta.
La pregunta clave
¿Qué significa exactamente que esta funcionalidad está terminada?
3. Requirements Engineering
Requirements Engineering es el proceso de descubrir, documentar, analizar, validar y gestionar las necesidades que debe satisfacer un sistema.
Tipos de requisitos
| Tipo | Ejemplo |
|---|---|
| Funcional | El usuario puede crear un proyecto. |
| No funcional | La página debe cargar en menos de 2 segundos. |
| Seguridad | Solo usuarios autorizados pueden eliminar proyectos. |
| Datos | El email debe ser único. |
| Integración | La aplicación debe enviar un email al crear una cuenta. |
| UX | El usuario debe recibir confirmación después de guardar. |
Ejemplo completo
Necesidad
"Quiero que los usuarios puedan recuperar su contraseña."
Requisitos funcionales
- El usuario puede solicitar recuperación.
- El sistema envía un enlace.
- El enlace tiene caducidad.
- El usuario puede establecer una nueva contraseña.
Requisitos de seguridad
- No revelar si un email existe.
- El token debe ser temporal.
- El token debe invalidarse después de utilizarlo.
Requisitos UX
- Mostrar confirmación.
- Mostrar errores comprensibles.
Ejercicio
Convierte:
"Quiero que el usuario pueda gestionar tareas."
en al menos 8 requisitos concretos.
Mostrar una posible respuesta
- Crear tarea.
- Editar tarea.
- Eliminar tarea.
- Marcar como completada.
- Cambiar prioridad.
- Asignar fecha.
- Filtrar tareas.
- Buscar tareas.
Existen muchas respuestas válidas. El objetivo es aprender a descomponer.
4. User Stories
Una User Story describe una necesidad desde el punto de vista del usuario.
Formato clásico
Como [TIPO DE USUARIO]
quiero [ACCIÓN / OBJETIVO]
para [BENEFICIO / MOTIVACIÓN].
Ejemplo
Como gestor de proyectos,
quiero asignar una tarea a un empleado,
para saber quién es responsable de realizarla.
Mal ejemplo
Crear tabla task_assignment.
Esto describe una implementación técnica, no una necesidad del usuario.
Buen ejemplo
Como gestor de proyectos,
quiero asignar una tarea a un empleado,
para que quede claro quién es responsable.
User Story demasiado grande
Como usuario quiero gestionar toda mi cuenta,
mis proyectos, mis tareas, mis documentos,
mis preferencias y mis notificaciones.
Esto probablemente debería dividirse.
Descomposición
US-01
Crear proyecto
US-02
Editar proyecto
US-03
Eliminar proyecto
US-04
Crear tarea
US-05
Asignar tarea
US-06
Completar tarea
US-07
Configurar notificaciones
Regla práctica
Una buena User Story debería poder explicarse en una conversación corta. Si necesita una reunión de dos horas para entenderla, probablemente todavía es demasiado grande o ambigua.
5. Acceptance Criteria
Los criterios de aceptación son una de las herramientas más importantes cuando desarrollamos con IA.
Ejemplo
USER STORY
Como usuario,
quiero crear una tarea,
para organizar mi trabajo.
CRITERIOS DE ACEPTACIÓN
AC-01
El usuario puede introducir un título.
AC-02
El título es obligatorio.
AC-03
El título debe tener entre 1 y 200 caracteres.
AC-04
Al guardar correctamente,
la tarea aparece en la lista.
AC-05
Si falta el título,
se muestra un mensaje de error.
AC-06
La tarea se guarda en la base de datos.
¿Por qué son tan importantes para la IA?
Porque permiten transformar una conversación subjetiva en condiciones verificables.
REQUISITO
↓
CRITERIO
↓
TEST
↓
RESULTADO
PASS / FAIL
Ejemplo de criterio ambiguo
La aplicación debe ser rápida.
Mejor
El endpoint GET /api/tasks debe responder
en menos de 500 ms en condiciones normales
con 1000 tareas.
Otro ejemplo
Mal:
El formulario debe ser fácil de usar.
Mejor:
El usuario debe poder crear una tarea
sin abandonar la página actual.
Ejercicio
Transforma:
"El login debe ser seguro."
en al menos 5 criterios comprobables.
Mostrar solución orientativa
- La contraseña nunca se almacena en texto plano.
- El endpoint requiere credenciales válidas.
- Después de varios intentos fallidos se aplica protección contra abuso.
- Las sesiones expiran.
- Los mensajes de error no revelan información innecesaria.
6. Edge Cases
Los casos normales son fáciles. Los problemas reales aparecen en las excepciones.
Ejemplo: crear usuario
Camino feliz:
Usuario introduce email válido
↓
Sistema valida
↓
Usuario creado
¿Qué puede salir mal?
- Email vacío.
- Email inválido.
- Email duplicado.
- Email con espacios.
- Email extremadamente largo.
- Password vacía.
- Password demasiado corta.
- Password comprometida.
- Error de base de datos.
- Usuario ya existente.
Matriz de casos
| Situación | Resultado esperado |
|---|---|
| Email válido | Crear usuario |
| Email vacío | Error de validación |
| Email inválido | Error de validación |
| Email existente | Error controlado |
| Error DB | Error controlado + log |
Prompt para descubrir Edge Cases
Analiza esta funcionalidad:
[DESCRIPCIÓN]
Actúa como QA Senior.
Identifica:
1. Happy paths.
2. Validation errors.
3. Boundary conditions.
4. Security issues.
5. Concurrency problems.
6. Data consistency problems.
7. Integration failures.
8. UX failures.
No escribas código.
Devuelve una tabla con:
Caso
Entrada
Resultado esperado
Prioridad
7. Specification-Driven Development
A partir de ahora empezaremos a trabajar con una idea fundamental: La especificación es la fuente de verdad.
Estructura recomendada
docs/
│
├── product.md
│
├── requirements/
│ ├── US-001-login.md
│ ├── US-002-register.md
│ └── US-003-create-task.md
│
├── architecture/
│ └── architecture.md
│
├── api/
│ └── api.md
│
└── testing/
└── test-plan.md
Plantilla de Specification
# US-003 — Crear tarea
## Objetivo
Permitir al usuario crear una tarea.
## Actor
Usuario autenticado.
## Precondiciones
El usuario debe estar autenticado.
## User Story
Como usuario,
quiero crear una tarea,
para organizar mi trabajo.
## Functional Requirements
FR-01
El título es obligatorio.
FR-02
La descripción es opcional.
FR-03
La prioridad puede ser:
LOW, MEDIUM, HIGH.
## Acceptance Criteria
AC-01
...
AC-02
...
## Edge Cases
EC-01
Título vacío.
EC-02
Título demasiado largo.
EC-03
Error de base de datos.
## Security
...
## Tests
...
## Out of Scope
...
¿Por qué "Out of Scope"?
Porque decirle a la IA qué NO debe hacer es tan importante como decirle qué debe hacer.
IN SCOPE
Crear tarea.
OUT OF SCOPE
- Reorganizar arquitectura.
- Cambiar framework.
- Crear sistema de notificaciones.
- Crear aplicación móvil.
- Cambiar autenticación.
8. Cómo trabajar con IA para crear especificaciones
Prompt 1 — Analista de negocio
Actúa como Business Analyst Senior.
Tengo esta necesidad:
"Quiero que los gestores puedan
asignar empleados a proyectos."
No escribas código.
Necesito:
1. Actores.
2. Objetivo.
3. User Stories.
4. Requisitos funcionales.
5. Requisitos no funcionales.
6. Reglas de negocio.
7. Edge Cases.
8. Criterios de aceptación.
9. Preguntas que faltan por resolver.
No inventes decisiones.
Cuando falte información,
indícalo explícitamente.
Prompt 2 — Product Manager
Actúa como Product Manager.
Revisa estos requisitos:
[PEGAR REQUISITOS]
Busca:
- ambigüedad;
- duplicaciones;
- contradicciones;
- requisitos innecesarios;
- funcionalidades demasiado grandes;
- funcionalidades que faltan.
Devuelve una lista priorizada.
No escribas código.
Prompt 3 — QA
Actúa como QA Lead.
A partir de esta specification:
[PEGAR SPEC]
Genera:
- casos positivos;
- casos negativos;
- edge cases;
- casos de seguridad;
- casos de integración;
- casos de regresión.
Cada caso debe incluir:
ID
Descripción
Precondiciones
Entrada
Resultado esperado
Prioridad
Prompt 4 — Software Architect
Actúa como Software Architect.
A partir de esta especificación:
[PEGAR SPEC]
Analiza si los requisitos son técnicamente
implementables.
Identifica:
- componentes;
- servicios;
- entidades;
- APIs;
- dependencias;
- riesgos.
No implementes.
Si una decisión requiere información
que no tenemos, pregunta antes de asumir.
La IA como equipo virtual
IDEA
↓
BUSINESS ANALYST
↓
PRODUCT MANAGER
↓
ARCHITECT
↓
DEVELOPER
↓
QA
↓
CODE REVIEW
↓
RELEASE
No significa que necesitemos diferentes agentes obligatoriamente. Significa que debemos adoptar diferentes perspectivas.
9. Workflow completo
1. Idea
"Quiero una aplicación para gestionar vacaciones."
2. Descubrimiento
Preguntamos qué problema queremos resolver.
3. Requisitos
Convertimos necesidades en requisitos.
4. User Stories
Dividimos funcionalidades.
5. Acceptance Criteria
Definimos cuándo está terminado.
6. Edge Cases
Analizamos excepciones.
7. Specification
Creamos documento de fuente de verdad.
8. Architecture
Decidimos cómo implementarlo.
9. Agent
La IA implementa.
10. QA
Validamos contra la specification.
10. Proyecto práctico de la semana
Diseñar una aplicación de gestión de vacaciones
No vamos a centrarnos todavía en programarla. Esta semana vamos a construir la documentación que permitirá a un agente implementarla posteriormente.
Contexto
Una empresa necesita una aplicación donde sus empleados puedan solicitar vacaciones y los responsables puedan aprobarlas o rechazarlas.
Requisito inicial
"Queremos una aplicación para gestionar vacaciones."
Trabajo del alumno
Fase 1 — Descubrimiento
Crear:docs/product.md
Debe responder:
- ¿Quién utiliza la aplicación?
- ¿Qué problema resuelve?
- ¿Qué procesos existen?
- ¿Qué información necesitamos?
- ¿Qué funcionalidades son imprescindibles?
Fase 2 — User Stories
Crear al menos:US-001
Solicitar vacaciones
US-002
Consultar vacaciones
US-003
Aprobar vacaciones
US-004
Rechazar vacaciones
US-005
Cancelar solicitud
Fase 3 — Acceptance Criteria
Cada User Story debe tener al menos: 5 criterios de aceptación.Fase 4 — Edge Cases
Identificar al menos: 15 casos excepcionales.Fase 5 — Reglas de negocio
Por ejemplo:RULE-001
Un empleado no puede solicitar
dos periodos que se solapen.
RULE-002
Solo un responsable autorizado
puede aprobar solicitudes.
RULE-003
Una solicitud aprobada no puede
ser modificada directamente.
Fase 6 — Specification
Crear:docs/requirements/
con las especificaciones completas.
Fase 7 — Revisión con IA
Utilizar tres perspectivas:BUSINESS ANALYST
↓
PRODUCT MANAGER
↓
QA LEAD
Cada uno deberá encontrar problemas diferentes.
11. Ejercicios prácticos
Ejercicio 1 — Detectar ambigüedad
El sistema debe permitir
gestionar empleados rápidamente.
Identifica al menos 5 problemas.
Respuesta
- "gestionar" no está definido.
- "rápidamente" no es medible.
- No sabemos quién realiza la acción.
- No sabemos qué datos se gestionan.
- No sabemos qué operaciones existen.
Ejercicio 2 — User Story
Convierte:
"El usuario necesita recuperar su contraseña."
Respuesta
Como usuario,
quiero poder recuperar mi contraseña,
para recuperar el acceso a mi cuenta
si la he olvidado.
Ejercicio 3 — Acceptance Criteria
Escribe criterios para:
Como usuario quiero eliminar una tarea.
Respuesta orientativa
- La tarea debe existir.
- El usuario debe ser propietario o tener permiso.
- El sistema debe pedir confirmación.
- Después de eliminarla no aparece en la lista.
- La operación queda persistida.
- Si ocurre un error se muestra un mensaje.
Ejercicio 4 — Edge Cases
Para "eliminar tarea", identifica 10 casos problemáticos.
Respuesta
- Tarea inexistente.
- Tarea ya eliminada.
- Usuario sin permisos.
- Error DB.
- Conexión perdida.
- Dos usuarios eliminando simultáneamente.
- Tarea con dependencias.
- Tarea bloqueada.
- Petición duplicada.
- Usuario desconectado durante la operación.
Ejercicio 5 — Out of Scope
El requisito es:
"Permitir crear proyectos."
Escribe 5 cosas que deberían quedar fuera si no forman parte del requisito.
Respuesta orientativa
- Aplicación móvil.
- Sistema de facturación.
- Chat interno.
- Integración con Slack.
- Reestructuración completa de la arquitectura.
12. Challenge avanzado
Convierte una idea en una especificación lista para IA
Idea:
"Quiero una aplicación para gestionar
empleados que están en bench."
Debes producir:
01 — Product Vision
02 — Personas / Actors
03 — Functional Requirements
04 — Non-Functional Requirements
05 — User Stories
06 — Acceptance Criteria
07 — Business Rules
08 — Edge Cases
09 — Security Requirements
10 — Out of Scope
11 — Data Requirements
12 — API Requirements
13 — UX Requirements
14 — Test Scenarios
15 — Final Specification
Regla
No permitas que la IA invente requisitos sin marcarlos. Utiliza:
[CONFIRMAR]
[SUPOSICIÓN]
[DECISIÓN]
[NO DEFINIDO]
Esto es extremadamente importante. La IA tiende a rellenar huecos. Un buen desarrollador aprende a distinguir entre información conocida e información inventada.
13. Test de evaluación
Ver respuestas explicadas
- 1 — A. Describe comportamiento que el sistema debe proporcionar.
- 2 — A. Es el formato clásico de User Story.
- 3 — A. "Rápido" debe transformarse en una condición medible.
- 4 — A. Permiten determinar objetivamente si se cumple una funcionalidad.
- 5 — A. Los Edge Cases cubren situaciones excepcionales.
- 6 — A. Define explícitamente qué no forma parte del alcance.
- 7 — B. No debemos permitir que la IA convierta una suposición en un requisito.
- 8 — A. Es una definición estructurada de lo que debe construirse.
- 9 — A. Antes de implementar necesitamos entender qué significa "terminado".
- 10 — B. Las decisiones de negocio siguen siendo responsabilidad humana.
- 11 — A. Rendimiento es una característica no funcional.
- 12 — A. QA aporta una perspectiva especialmente útil para excepciones y validación.
14. Recursos externos
Atlassian — User StoriesIntroducción práctica a User Stories y Agile. Atlassian — Acceptance Criteria
Guía práctica para definir criterios de aceptación. Agile Alliance — User Stories
Conceptos y terminología Agile. Agile Alliance — Acceptance Criteria
Definición y contexto profesional. IBM — Requirements Engineering
Introducción al proceso de ingeniería de requisitos. IREB — Certified Professional for Requirements Engineering
Referencia internacional sobre Requirements Engineering. Martin Fowler
Recursos sobre desarrollo profesional, arquitectura y prácticas de ingeniería. OWASP ASVS
Referencia para requisitos de seguridad verificables. OpenAPI Specification
Especificación estándar para describir APIs HTTP.
15. Checklist de finalización
16. Autoevaluación
| Competencia | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| Requirements Engineering | ○ | ○ | ○ | ○ | ○ |
| User Stories | ○ | ○ | ○ | ○ | ○ |
| Acceptance Criteria | ○ | ○ | ○ | ○ | ○ |
| Edge Cases | ○ | ○ | ○ | ○ | ○ |
| Specifications | ○ | ○ | ○ | ○ | ○ |
| Uso de IA para análisis | ○ | ○ | ○ | ○ | ○ |
17. Conclusión
El cambio de mentalidad de Week 07
NO:
"IA, constrúyeme una aplicación."
SÍ:
"Este es el problema.
Estos son los usuarios.
Estos son los requisitos.
Estas son las reglas.
Estos son los criterios de aceptación.
Estos son los casos límite.
Esto está fuera del alcance.
Esta es la specification.
Ahora analiza cómo implementarlo."
La specification se convierte en el contrato
SPECIFICATION
↓
AGENT
↓
IMPLEMENTATION
↓
TESTS
↓
VALIDATION
↓
RELEASE
A partir de aquí empezamos a construir un proceso de desarrollo realmente escalable con IA.
Preparación para Week 08
La siguiente semana entraremos en uno de los conceptos más importantes para convertirnos en desarrolladores AI-Native: Context Engineering.
Aprenderemos a construir el contexto que necesita un agente:
- Project instructions.
- AI rules.
- AGENTS.md.
- CLAUDE.md.
- Cursor Rules.
- Repository context.
- Architecture context.
- Documentation context.
- Tool context.
- Memory.
- MCP.
Y construiremos un repositorio preparado específicamente para trabajar con agentes.