Semana 04 — Diseñar y construir aplicaciones con IA

De utilizar IA para resolver problemas a utilizar IA como compañero de desarrollo.

1. Objetivo de la semana

Al finalizar esta semana deberías ser capaz de utilizar una IA para participar activamente en el desarrollo de una aplicación.

No se trata de pedir:

"Hazme una aplicación"

sino de aprender a trabajar con la IA como si fuera un miembro de un equipo de desarrollo.

Durante esta semana aprenderás a:

2. La nueva forma de desarrollar aplicaciones

Tradicionalmente un desarrollador recibía unos requisitos y posteriormente escribía código.

Con IA aparece una nueva capa:

Idea
  ↓
Requisitos
  ↓
Diseño
  ↓
IA
  ↓
Código
  ↓
Revisión humana
  ↓
Pruebas
  ↓
Corrección
  ↓
Aplicación
Idea fundamental:

La IA no elimina la necesidad de entender el problema. Reduce enormemente la cantidad de trabajo mecánico necesario para convertir una solución en código.

3. La IA no es un botón de "crear aplicación"

Uno de los errores más habituales de los principiantes es pedir a la IA:

Crea una aplicación de gestión de clientes.

La IA puede generar algo, pero normalmente aparecerán problemas:

La alternativa

Dividir el problema.

Idea
↓
Usuarios
↓
Problemas
↓
Requisitos
↓
Funcionalidades
↓
Datos
↓
Pantallas
↓
Arquitectura
↓
Implementación
↓
Pruebas

4. Ejemplo completo: aplicación de tareas

Vamos a utilizar durante toda la semana una aplicación sencilla:

TaskFlow

Aplicación web para gestionar tareas personales y proyectos.

Un usuario debería poder:

Esto ya es mejor que decir simplemente:

"Haz una aplicación de tareas."

5. Requisitos funcionales

Un requisito funcional describe algo que la aplicación debe poder hacer.

Ejemplos

ID Requisito
RF-01 El usuario podrá crear una tarea.
RF-02 El usuario podrá modificar una tarea.
RF-03 El usuario podrá eliminar una tarea.
RF-04 El usuario podrá marcar una tarea como completada.
RF-05 El usuario podrá asignar prioridad.
RF-06 El usuario podrá filtrar las tareas.

Prompt para la IA

Actúa como analista funcional.

Tengo esta idea:

"Aplicación para gestionar tareas personales."

Ayúdame a convertirla en requisitos funcionales.

Para cada requisito proporciona:

- ID
- Nombre
- Descripción
- Actor
- Prioridad
- Criterios de aceptación

No escribas código todavía.
Observa algo importante:

Le estamos diciendo explícitamente a la IA que todavía NO queremos código.

6. Criterios de aceptación

Un criterio de aceptación define cuándo podemos considerar que una funcionalidad funciona correctamente.

Ejemplo

Requisito:

El usuario podrá crear una tarea.

Criterios de aceptación:

1. El usuario introduce un título.
2. El título es obligatorio.
3. Si no introduce título se muestra un error.
4. Si introduce título se crea la tarea.
5. La tarea aparece en la lista.
6. La tarea inicialmente aparece como pendiente.

Esto es muchísimo más útil para una IA que simplemente:

"Haz que se puedan crear tareas."

7. User Stories

Una User Story expresa una necesidad desde el punto de vista del usuario.

Formato habitual:

Como [tipo de usuario]
quiero [acción]
para [beneficio].

Ejemplo

Como usuario,
quiero crear una tarea,
para poder recordar las cosas que tengo pendientes.

Otro ejemplo

Como usuario,
quiero asignar una prioridad a una tarea,
para poder identificar rápidamente qué debo hacer primero.

Prompt

Convierte estos requisitos en User Stories.

Para cada User Story incluye:

- ID
- User Story
- Criterios de aceptación
- Prioridad

No generes código.

8. Descomponer una aplicación

Una aplicación debe dividirse en piezas pequeñas.

TaskFlow

TaskFlow
│
├── Usuarios
│
├── Autenticación
│
├── Tareas
│   ├── Crear
│   ├── Editar
│   ├── Eliminar
│   └── Completar
│
├── Proyectos
│
├── Filtros
│
└── Dashboard

Esta estructura permite trabajar con la IA por partes.

No intentes construir todo simultáneamente.

Una de las mejores prácticas al trabajar con IA es reducir el tamaño de cada tarea.

9. Arquitectura básica

Antes de escribir código debemos decidir cómo se organizan las piezas.

Una aplicación web típica puede tener:

Usuario
   ↓
Frontend
   ↓
API / Backend
   ↓
Base de datos

Ejemplo

Browser
   │
   ▼
React / Frontend
   │
   ▼
API
   │
   ▼
Backend
   │
   ▼
PostgreSQL

La tecnología concreta es secundaria en este módulo.

Lo importante es comprender las responsabilidades.

Capa Responsabilidad
Frontend Interfaz con el usuario.
Backend Lógica de negocio.
API Comunicación entre componentes.
Base de datos Persistencia de información.

10. Pedir a la IA que diseñe la arquitectura

Actúa como arquitecto de software.

Estoy diseñando una aplicación llamada TaskFlow.

Funcionalidades:

- Usuarios
- Login
- Tareas
- Proyectos
- Prioridades
- Filtros
- Dashboard

Quiero una arquitectura sencilla y mantenible.

Explica:

1. Componentes principales.
2. Responsabilidad de cada componente.
3. Cómo se comunican.
4. Qué datos necesita cada componente.
5. Posibles problemas de seguridad.

No escribas código todavía.

¿Por qué funciona mejor?

Porque estamos proporcionando:

11. Contexto: el elemento más importante

Una IA responde basándose en el contexto que tiene.

Si le proporcionamos poco contexto:

Haz un login.

tendrá que asumir demasiadas cosas.

Mejor:

Estamos construyendo una aplicación web llamada TaskFlow.

Arquitectura:

Frontend
↓
API
↓
Backend
↓
PostgreSQL

Necesitamos implementar el login.

Requisitos:

- Email y contraseña.
- Contraseña almacenada de forma segura.
- Mensajes de error genéricos.
- Sesión persistente.
- Logout.

Antes de escribir código:
explica qué componentes necesitamos.

12. Prompting técnico

Un buen prompt técnico puede seguir esta estructura:

ROL
↓
CONTEXTO
↓
OBJETIVO
↓
REQUISITOS
↓
RESTRICCIONES
↓
FORMATO DE RESPUESTA
↓
VALIDACIÓN

Ejemplo

ROL:
Actúa como desarrollador senior.

CONTEXTO:
Estamos construyendo TaskFlow.

OBJETIVO:
Crear el componente de formulario de tareas.

REQUISITOS:
- Título obligatorio.
- Descripción opcional.
- Prioridad.
- Fecha límite.

RESTRICCIONES:
- Código sencillo.
- Componentes reutilizables.
- Validación de entrada.

FORMATO:
1. Explica el diseño.
2. Genera el código.
3. Explica las decisiones.
4. Añade pruebas.

VALIDACIÓN:
Revisa el código antes de entregarlo.

13. La técnica "planifica antes de programar"

Una de las mejores técnicas para trabajar con IA consiste en pedir:

NO ESCRIBAS CÓDIGO TODAVÍA.

Primero:

  1. Analizar.
  2. Diseñar.
  3. Identificar riesgos.
  4. Definir pasos.
  5. Después implementar.

Prompt

Antes de escribir código:

1. Analiza el problema.
2. Identifica las partes necesarias.
3. Propón una solución.
4. Identifica posibles problemas.
5. Propón pruebas.
6. Espera mi aprobación antes de generar código.

14. Construir por iteraciones

Nunca es necesario pedir a la IA que construya toda la aplicación de golpe.

Podemos trabajar así:

ITERACIÓN 1
Crear proyecto
↓
ITERACIÓN 2
Crear pantalla principal
↓
ITERACIÓN 3
Crear modelo de datos
↓
ITERACIÓN 4
Crear API
↓
ITERACIÓN 5
Conectar frontend
↓
ITERACIÓN 6
Validaciones
↓
ITERACIÓN 7
Tests
↓
ITERACIÓN 8
Seguridad
↓
ITERACIÓN 9
Documentación

15. Ejemplo práctico: crear una tarea

Paso 1 — Requisito

El usuario puede crear una tarea.

Paso 2 — Datos

Task

id
title
description
priority
due_date
completed
created_at

Paso 3 — Interfaz

Título
Descripción
Prioridad
Fecha límite
[ Crear tarea ]

Paso 4 — Backend

POST /tasks

Paso 5 — Persistencia

INSERT INTO tasks (...)

Paso 6 — Validación

Título vacío → error
Título válido → crear tarea

Esta descomposición permite que la IA nos ayude en cada paso.

16. Pedir código a la IA

Implementa únicamente la funcionalidad de creación de tareas.

Contexto:

La entidad Task contiene:

- id
- title
- description
- priority
- due_date
- completed
- created_at

Requisitos:

- title obligatorio.
- priority puede ser LOW, MEDIUM o HIGH.
- completed debe comenzar en false.

Primero explica la solución.

Después genera el código.

Finalmente incluye:

- casos límite
- posibles errores
- pruebas recomendadas

17. No aceptar automáticamente el código generado

Regla de oro: que la IA genere código no significa que el código sea correcto.

Debemos revisar:

Prompt para revisión

Revisa este código como un desarrollador senior.

No lo reescribas todavía.

Busca:

- errores
- vulnerabilidades
- problemas de arquitectura
- código duplicado
- problemas de mantenibilidad
- casos límite
- problemas de rendimiento

Devuelve los problemas ordenados por gravedad.

18. Debugging asistido por IA

Cuando aparece un error, no debemos decir únicamente:

No funciona.

Debemos proporcionar información.

Prompt recomendado

Tengo este error:

[PEGAR ERROR]

Contexto:

Estoy implementando la creación de tareas.

Esperaba:

Que la tarea se guardase en la base de datos.

Resultado:

La API devuelve HTTP 500.

Código relevante:

[PEGAR CÓDIGO]

Analiza:

1. Qué significa el error.
2. Posibles causas.
3. Cómo comprobar cada causa.
4. Solución recomendada.

No modifiques código todavía.

19. La IA como debugger

Podemos pedirle que nos ayude a investigar de forma sistemática.

Quiero depurar este problema.

No me des directamente una solución.

Hazme preguntas para localizar la causa
y guíame paso a paso.

Esto es especialmente útil para aprender.

Si siempre dejamos que la IA solucione directamente nuestros errores, podemos terminar dependiendo de ella sin comprender el problema.

20. Tests generados por IA

La IA puede ayudarnos también a generar pruebas.

Genera una estrategia de pruebas para la funcionalidad:

"Crear tarea"

Incluye:

- casos normales
- casos límite
- entradas inválidas
- errores de base de datos
- problemas de autorización
- pruebas de seguridad

Ejemplos

Prueba Resultado esperado
Título válido Tarea creada
Título vacío Error de validación
Prioridad inválida Error de validación
Usuario no autenticado HTTP 401
Base de datos caída Error controlado

21. Documentación generada con IA

La IA también puede generar documentación.

Ejemplo

Documenta esta API.

Incluye:

- Endpoint
- Método HTTP
- Parámetros
- Body
- Respuesta correcta
- Errores
- Ejemplos de uso

Formato Markdown.

Esto permite mantener la documentación sincronizada con el desarrollo.

22. Referencias externas

OpenAI

Anthropic

GitHub

MDN

OWASP

23. Ejercicio práctico 1 — Analizar una aplicación

Imagina que necesitas crear una aplicación para gestionar una pequeña empresa de consultoría.

La aplicación debe permitir:

  • Gestionar empleados.
  • Gestionar proyectos.
  • Asignar empleados a proyectos.
  • Consultar disponibilidad.
  • Buscar empleados por habilidades.

Utiliza una IA para crear:

  1. Usuarios.
  2. Requisitos funcionales.
  3. User Stories.
  4. Criterios de aceptación.
  5. Módulos de la aplicación.
Ver solución orientativa

Una posible solución podría identificar:

  • Administrador.
  • Responsable de proyectos.
  • Empleado.

Módulos:

  • Autenticación.
  • Empleados.
  • Proyectos.
  • Asignaciones.
  • Skills.
  • Disponibilidad.
  • Dashboard.

Lo importante no es coincidir exactamente con esta solución, sino justificar las decisiones.

24. Ejercicio práctico 2 — Crear un prompt técnico

Escribe un prompt para pedir a una IA que diseñe el módulo de gestión de empleados.

El prompt debe incluir:

  • Rol.
  • Contexto.
  • Objetivo.
  • Requisitos.
  • Restricciones.
  • Formato de respuesta.
Ver respuesta orientativa
Actúa como arquitecto de software senior.

Contexto:

Estamos construyendo una aplicación web
para gestionar empleados de una consultora.

Objetivo:

Diseñar el módulo de empleados.

Cada empleado debe tener:

- id
- nombre
- email
- puesto
- skills
- disponibilidad

El módulo debe permitir:

- crear empleados
- editar empleados
- eliminar empleados
- buscar empleados
- filtrar por skill

Restricciones:

- arquitectura mantenible
- separación de responsabilidades
- validación de datos
- control de permisos

Antes de generar código:

1. Propón arquitectura.
2. Define modelo de datos.
3. Define API.
4. Identifica riesgos.
5. Propón estrategia de pruebas.

25. Ejercicio práctico 3 — Mejorar un prompt

Mejora este prompt:

Hazme una aplicación de empleados.

Debes conseguir que la IA tenga suficiente contexto para producir una propuesta técnica razonable.

Ver solución orientativa
Actúa como arquitecto de software.

Necesito diseñar una aplicación web
para gestionar empleados de una empresa.

Los usuarios serán:

- Administradores
- Managers

Funcionalidades:

- Crear empleados
- Editar empleados
- Consultar empleados
- Buscar por nombre
- Filtrar por skills
- Consultar disponibilidad

Antes de escribir código:

1. Define requisitos.
2. Propón arquitectura.
3. Diseña el modelo de datos.
4. Define API.
5. Propón estructura del frontend.
6. Identifica riesgos.
7. Propón pruebas.

No escribas código todavía.

26. Ejercicio práctico 4 — Debugging

La aplicación devuelve:

HTTP 500 Internal Server Error

Cuando el usuario crea una tarea.

Debes escribir un prompt para pedir ayuda a la IA sin limitarte a decir "arréglalo".

Ver respuesta
Actúa como desarrollador senior especializado
en debugging.

Problema:

Al crear una tarea recibo HTTP 500.

Comportamiento esperado:

La tarea debería almacenarse en PostgreSQL.

Comportamiento actual:

La API devuelve HTTP 500.

Código del endpoint:

[PEGAR CÓDIGO]

Error del servidor:

[PEGAR STACK TRACE]

Analiza:

1. Qué significa el error.
2. Causa probable.
3. Otras causas posibles.
4. Cómo verificar cada hipótesis.
5. Solución recomendada.

No cambies código hasta explicar primero
la causa del problema.

27. Test de conocimientos

Selecciona mentalmente la respuesta antes de abrir la solución.

Pregunta 1

¿Qué debería hacerse antes de pedir a la IA que genere una aplicación completa?

Respuesta

Definir el problema, usuarios, requisitos, funcionalidades y arquitectura básica.

Pregunta 2

¿Cuál de estos prompts es mejor?

A) Hazme un login.

B) Crea un login seguro para nuestra aplicación,
usando la arquitectura definida y teniendo en cuenta
autenticación, validación, sesiones y errores.
Respuesta

B. Proporciona contexto y requisitos.

Pregunta 3

¿Debemos aceptar automáticamente código generado por IA?

Respuesta

No. Debemos revisarlo, probarlo y comprobar seguridad y mantenibilidad.

Pregunta 4

¿Qué significa "descomponer una aplicación"?

Respuesta

Dividirla en funcionalidades y componentes más pequeños que puedan diseñarse, implementarse y probarse de forma independiente.

Pregunta 5

¿Por qué es importante proporcionar contexto a la IA?

Respuesta

Porque cuanto más contexto relevante tenga, menos tendrá que asumir y más precisa será la solución.

Pregunta 6

¿Qué es un criterio de aceptación?

Respuesta

Una condición verificable que permite determinar si una funcionalidad cumple los requisitos.

Pregunta 7

¿Qué es mejor para debugging?

A) No funciona.

B) La API devuelve HTTP 500 al crear una tarea.
Este es el stack trace y este es el código.
Respuesta

B.

Pregunta 8

¿Por qué conviene pedir a la IA que no escriba código inicialmente?

Respuesta

Para separar análisis y diseño de implementación y evitar construir una solución basada en supuestos incorrectos.

28. Test avanzado

Pregunta 9

La IA ha generado una aplicación que funciona pero contiene tres componentes enormes de más de 1.000 líneas cada uno. ¿Qué deberías hacer?

Respuesta

Pedir a la IA que analice la arquitectura y proponga una refactorización por responsabilidades, pero sin modificar todo de golpe.

Pregunta 10

La IA propone almacenar contraseñas directamente en la base de datos. ¿Qué haces?

Respuesta

Rechazar la solución. Las contraseñas deben almacenarse mediante mecanismos seguros de hashing diseñados para contraseñas. Además, conviene revisar la implementación con criterios de seguridad.

Pregunta 11

La IA genera código que funciona, pero no sabes por qué funciona. ¿Está terminado el trabajo?

Respuesta

No necesariamente. Debes comprender al menos la arquitectura, responsabilidades, riesgos y comportamiento del código crítico.

Pregunta 12

¿Qué estrategia es mejor?

A) Crear toda la aplicación en un único prompt.

B) Diseñar, implementar y probar pequeñas funcionalidades
de forma iterativa.
Respuesta

B.

29. Mini proyecto de la semana

Proyecto: diseño de una aplicación real

Durante esta semana deberás seleccionar una aplicación sencilla que te resulte interesante.

Puede ser, por ejemplo:

Debes producir

  1. Descripción del problema.
  2. Usuarios.
  3. Requisitos.
  4. User Stories.
  5. Criterios de aceptación.
  6. Mapa de funcionalidades.
  7. Arquitectura.
  8. Modelo de datos inicial.
  9. API propuesta.
  10. Plan de implementación.
  11. Estrategia de pruebas.
Importante:

Todavía no es necesario construir toda la aplicación. Esta semana estamos aprendiendo a diseñarla y a dirigir a la IA.

30. Entregable de la Week 04

Al finalizar la semana deberías disponer de un documento similar a:

MI APLICACIÓN
│
├── 01-problema.md
├── 02-usuarios.md
├── 03-requisitos.md
├── 04-user-stories.md
├── 05-criterios-aceptacion.md
├── 06-arquitectura.md
├── 07-modelo-datos.md
├── 08-api.md
├── 09-plan-implementacion.md
└── 10-tests.md

Este documento será utilizado durante las próximas semanas para construir realmente la aplicación.

31. Checklist de finalización

32. Autoevaluación

¿Podrías hacer lo siguiente sin ayuda?

  • Explicar qué problema resuelve tu aplicación.
  • Definir sus principales usuarios.
  • Crear 10 requisitos.
  • Crear User Stories.
  • Definir criterios de aceptación.
  • Diseñar una arquitectura básica.
  • Explicar cómo pedirías a una IA que construya una funcionalidad.
  • Revisar críticamente código generado por IA.

Si la respuesta es "sí" en la mayoría de los puntos, estás preparado para pasar al siguiente nivel.

33. Qué has aprendido realmente

El objetivo de esta semana no era aprender un nuevo lenguaje.

El verdadero aprendizaje es cambiar tu forma de pensar:

ANTES

Problema
↓
Código


AHORA

Problema
↓
Análisis
↓
Requisitos
↓
Diseño
↓
IA
↓
Implementación
↓
Tests
↓
Revisión
↓
Iteración
Competencia clave:

Un desarrollador apoyado por IA no es la persona que consigue que la IA escriba más código.

Es la persona que sabe qué construir, por qué construirlo, cómo dividirlo, cómo comprobarlo y cómo utilizar la IA para hacerlo más rápido.