1. Objetivos de Week 11
Convertir un error en una investigación estructurada
Al terminar esta semana el alumno debe ser capaz de recibir un error aparentemente complejo y conducir una investigación utilizando IA.
01 · Reproducir
Aprender a describir exactamente cuándo ocurre un problema.
02 · Observar
Utilizar logs, errores, métricas y comportamiento observable.
03 · Hipotetizar
Construir hipótesis sobre la causa raíz.
04 · Investigar
Utilizar IA para analizar evidencias.
05 · Corregir
Aplicar cambios pequeños y verificables.
06 · Prevenir
Crear tests para evitar que el bug reaparezca.
2. La nueva mentalidad
❌ El enfoque incorrecto
ERROR
↓
Copiar error en ChatGPT
↓
"Arréglalo"
↓
Copiar código
↓
Esperar que funcione
✅ El enfoque profesional
ERROR
↓
REPRODUCIR
↓
RECOGER EVIDENCIAS
↓
FORMULAR HIPÓTESIS
↓
INVESTIGAR
↓
CAMBIO MÍNIMO
↓
TEST
↓
VERIFICAR
↓
PREVENIR REGRESIÓN
La IA puede ayudarnos en todas estas fases, pero el desarrollador debe controlar el proceso.
3. ¿Qué es realmente un bug?
Un bug es un comportamiento del sistema que no cumple lo esperado.
Ejemplo
EXPECTED
GET /employees/123
→ 200 OK
→ empleado 123
ACTUAL
GET /employees/123
→ 500 Internal Server Error
El error visible es:
500 Internal Server Error
Pero eso NO nos dice necesariamente cuál es la causa.
Posibles causas
- registro inexistente;
- problema de SQL;
- campo NULL inesperado;
- error de serialización;
- error de permisos;
- configuración incorrecta;
- variable de entorno;
- problema de red;
- bug introducido recientemente.
El error es un síntoma. No necesariamente es la causa.
4. Workflow profesional de debugging
1. Definir el problema
¿Qué debería ocurrir?
2. Reproducir
¿Podemos provocar el problema de forma consistente?
3. Recoger evidencias
Logs, errores, inputs, estado y contexto.
4. Localizar
¿En qué capa aparece?
5. Formular hipótesis
¿Qué podría estar causando el problema?
6. Investigar
Utilizar código, logs, tests y agentes.
7. Corregir
Aplicar el cambio mínimo necesario.
8. Verificar
Comprobar que el bug desaparece.
9. Regression Test
Crear una prueba que evite que vuelva.
10. Documentar
Registrar causas y decisiones importantes.
5. Aprender a leer Logs
Los logs son una de las fuentes de información más importantes durante una investigación.
Ejemplo
2026-08-28 10:31:42 INFO Request received
GET /employees/123
2026-08-28 10:31:42 INFO EmployeeService.findById(123)
2026-08-28 10:31:42 ERROR Database error
SQLSTATE[42P01]:
relation "employees" does not exist
2026-08-28 10:31:42 ERROR
GET /employees/123 → 500
¿Cómo lo interpretamos?
| Información | Interpretación |
|---|---|
| Request received | La petición llegó al backend. |
| EmployeeService.findById | Entramos en la capa de servicio. |
| Database error | El problema aparece al acceder a DB. |
| relation does not exist | La tabla esperada no existe. |
| HTTP 500 | El backend termina devolviendo error. |
Conclusión
Ya hemos reducido enormemente el espacio de búsqueda.
Frontend
↓
API
↓
Service
↓
DATABASE ← PROBLEMA PROBABLE
6. Cómo leer un Stack Trace
Un stack trace puede parecer aterrador al principio.
NullPointerException:
Cannot read properties of null
at EmployeeService.getDepartment
(EmployeeService.js:48)
at EmployeeController.getEmployee
(EmployeeController.js:21)
at processRequest
(router.js:102)
Leer de abajo hacia arriba o de arriba hacia abajo?
Depende del lenguaje y del formato, pero normalmente nos interesa identificar la primera línea que pertenece a nuestro código y que está relacionada con la causa.
Aquí
EmployeeService.js:48
es especialmente interesante.
Error habitual
No hay que asumir que la primera línea del stack trace es automáticamente la causa raíz.
7. Reproducir el problema
Antes de pedir a la IA que arregle algo, debemos intentar conseguir un caso reproducible.
Mala descripción
"No funciona."
Buena descripción
Cuando un usuario abre
Employees → Employee Detail
y el empleado no tiene departamento,
la API devuelve 500.
Con empleados que tienen departamento,
funciona correctamente.
Excelente descripción
ENVIRONMENT
Local development
REQUEST
GET /employees/123
INPUT
employeeId = 123
EXPECTED
200 OK
ACTUAL
500 Internal Server Error
CONDITION
employee.department_id = NULL
REPRODUCIBILITY
100%
LOG
Cannot read properties of null
at EmployeeService.js:48
Regla
Cuanto mejor describas el problema, menos tendrá que adivinar la IA.
8. Formular hipótesis
Antes de modificar código, debemos preguntarnos:
¿Qué podría estar causando este comportamiento?
Ejemplo
PROBLEMA
Employee detail devuelve 500
si department_id = NULL.
HIPÓTESIS 1
El backend asume que department
siempre existe.
HIPÓTESIS 2
El JOIN SQL elimina el registro.
HIPÓTESIS 3
El serializer no acepta NULL.
HIPÓTESIS 4
El frontend espera department.name.
Ahora podemos investigar cada hipótesis.
Pensamiento científico
Hipótesis
↓
Evidencia
↓
Confirmar / descartar
↓
Nueva hipótesis
↓
Solución
9. Prompts profesionales para debugging
Prompt 1 — Análisis inicial
Estoy investigando un bug.
NO modifiques ningún archivo.
Primero analiza:
1. El error.
2. El stack trace.
3. El código relacionado.
4. Los tests existentes.
5. El comportamiento esperado.
Después:
- identifica posibles causas;
- clasifícalas por probabilidad;
- indica qué evidencia necesitamos para confirmar
o descartar cada una.
No propongas todavía una solución definitiva.
Prompt 2 — Investigación dirigida
Tenemos estas evidencias:
[PEGAR EVIDENCIAS]
Hipótesis actual:
[HIPÓTESIS]
Analiza el código relevante.
Quiero que determines:
1. Si la hipótesis es correcta.
2. Qué líneas la soportan.
3. Qué líneas la contradicen.
4. Qué información falta.
No modifiques código.
Prompt 3 — Proponer solución
La causa raíz parece ser:
[CAUSA]
Propón la solución mínima.
Antes de modificar:
- explica qué archivos cambiarás;
- explica por qué;
- identifica posibles efectos secundarios;
- indica qué tests deberían cubrir el problema.
No implementes todavía.
Prompt 4 — Implementación
Implementa únicamente la solución aprobada.
No hagas refactoring adicional.
Añade un regression test que reproduzca
el bug original.
Ejecuta los tests relacionados.
Después informa:
- archivos modificados;
- tests ejecutados;
- resultado;
- posibles riesgos.
Prompt 5 — Segunda revisión
El bug está corregido.
Ahora intenta encontrar una forma
de romper la solución.
Busca:
- edge cases;
- inputs inesperados;
- estados NULL;
- problemas de permisos;
- regresiones;
- efectos secundarios.
No modifiques código.
Devuelve una lista priorizada
de posibles problemas.
10. Utilizar un agente para investigar
Los agentes son especialmente útiles cuando el problema atraviesa muchos archivos.
Ejemplo
Bug:
El listado de empleados tarda 8 segundos
cuando existen más de 10.000 empleados.
Podemos pedir:
Investiga el problema de rendimiento
del listado de empleados.
No modifiques código.
Analiza:
- endpoint;
- controller;
- service;
- repository;
- queries;
- índices;
- serialización;
- frontend;
- paginación;
- tests.
Busca posibles cuellos de botella.
Para cada uno indica:
- evidencia;
- impacto estimado;
- probabilidad;
- recomendación.
No implementes ninguna solución.
El agente puede descubrir
Frontend
↓
GET /employees
↓
Service
↓
Repository
↓
SELECT *
FROM employees
10.000 rows
↓
Sin paginación
↓
Serialización completa
↓
8 segundos
La solución puede ser evidente:
Pagination
+
SELECT campos necesarios
+
Índices adecuados
Pero lo importante es que la IA ha ayudado a investigar, no simplemente a escribir código.
11. Regression Testing
Una corrección profesional no termina cuando el error desaparece.
Problema
Bug encontrado
↓
Fix
↓
Funciona
↓
Dos meses después...
↓
BUG VUELVE
Para evitarlo necesitamos un regression test.
Ejemplo
BUG ORIGINAL
Empleado sin departamento
↓
API devuelve 500
REGRESSION TEST
Employee department = NULL
↓
GET /employees/{id}
↓
Expected: 200
↓
PASS
Principio fundamental
Cada bug importante debería convertirse en conocimiento permanente del sistema.
12. Debugging y seguridad
Los errores pueden contener información sensible.
Nunca compartas sin revisar
- tokens;
- passwords;
- API keys;
- JWT completos;
- datos personales innecesarios;
- credenciales de producción;
- secretos de infraestructura.
Ejemplo peligroso
DATABASE_URL=
postgres://admin:
MyPassword123@
production-db.example.com
No deberías enviar esto a una IA.
Alternativa
DATABASE_URL=
postgres://[REDACTED]
13. Proyecto práctico Week 11
Investigar y corregir 3 bugs
En esta semana no se trata simplemente de "hacer que funcione". El objetivo es demostrar un proceso profesional de debugging asistido por IA.
Bug 1 — Empleado sin departamento
Condición:
department_id = NULL
Resultado:
GET /employees/{id}
→ 500
Bug 2 — ID inexistente
GET /employees/999999
Resultado actual:
500
Resultado esperado:
404
Bug 3 — Búsqueda lenta
Buscar:
"Juan"
Resultado:
La interfaz tarda más de 5 segundos.
Para cada bug
- Reproducir.
- Documentar comportamiento esperado.
- Documentar comportamiento actual.
- Recoger logs.
- Crear hipótesis.
- Utilizar IA para investigar.
- Identificar causa raíz.
- Crear plan de solución.
- Implementar.
- Crear regression test.
- Ejecutar tests.
- Realizar review.
Entregables
docs/bugs/
├── BUG-001.md
├── BUG-002.md
└── BUG-003.md
tests/
└── regression/
docs/
└── debugging.md
Plantilla BUG-001.md
# BUG-001
## Title
Employee without department returns 500
## Environment
Local
## Expected
200 OK
## Actual
500
## Steps to reproduce
1.
2.
3.
## Evidence
Logs...
## Hypotheses
1.
2.
3.
## Root cause
...
## Solution
...
## Regression test
...
## Verification
...
## Lessons learned
...
14. Ejercicios prácticos
Ejercicio 1 — Síntoma vs causa
Tenemos:
HTTP 500
¿Es suficiente para decir cuál es la causa?
Ver respuesta
No. Un HTTP 500 indica un error interno, pero puede tener múltiples causas. Necesitamos logs, stack trace, request y contexto.
Ejercicio 2 — Mejorar un bug report
Transforma:
"La pantalla de empleados falla."
en un bug report profesional.
Ver respuesta orientativa
Título:
Employee detail returns 500 for employees
without department.
Environment:
Local.
Steps:
1. Open employee list.
2. Select employee 123.
3. Employee has department_id = NULL.
Expected:
Employee detail loads correctly.
Actual:
HTTP 500.
Reproducibility:
100%.
Evidence:
NullPointerException at
EmployeeService.js:48.
Ejercicio 3 — Hipótesis
Un endpoint tarda 7 segundos. Propón al menos 5 hipótesis.
Ver respuesta
- Query sin índice.
- Demasiados registros.
- Falta de paginación.
- N+1 queries.
- Serialización excesiva.
- Servicio externo lento.
- Procesamiento innecesario.
Ejercicio 4 — ¿Qué prompt es mejor?
A)
"Arregla este bug."
B)
"Investiga este bug.
No modifiques código.
Analiza logs, stack trace y código.
Propón hipótesis y dime qué evidencia
necesitamos para confirmar cada una."
Ver respuesta
B. Porque obliga a la IA a investigar antes de modificar el sistema.
Ejercicio 5 — Regression test
¿Por qué añadir un test después de solucionar un bug?
Ver respuesta
Para garantizar que el comportamiento corregido queda protegido frente a futuras modificaciones.
Ejercicio 6 — Debugging sin modificar
¿Por qué es recomendable pedir inicialmente al agente que no modifique archivos?
Ver respuesta
Porque primero queremos comprender el problema y validar la hipótesis. Si dejamos que modifique código demasiado pronto, podemos perder el contexto del problema o introducir cambios innecesarios.
Ejercicio 7 — Seguridad
Tienes este log:
Authorization: Bearer eyJhbGciOi...
¿Lo copiarías directamente en un prompt?
Ver respuesta
No. Debe eliminarse o sustituirse por:
Authorization: Bearer [REDACTED]
Ejercicio 8 — Causa raíz
La aplicación devuelve:
Cannot read property "name" of null
¿Qué investigarías?
Ver respuesta orientativa
- Qué objeto es null.
- Dónde se crea.
- De dónde viene.
- Si la DB permite NULL.
- Si el API contract permite NULL.
- Si el frontend espera siempre un objeto.
- Qué casos de negocio producen NULL.
15. Ejercicio avanzado — Debugging con agente
Reto
Pide al agente que investigue este problema:
Cuando se buscan empleados
por nombre,
la primera búsqueda funciona,
pero las siguientes búsquedas
muestran resultados incorrectos.
No permitas modificaciones inicialmente.
El agente debería investigar
- estado frontend;
- caché;
- query parameters;
- estado del componente;
- debounce;
- API;
- repository;
- tests;
- concurrencia.
Solución orientativa
Una posible causa sería que el frontend mantiene resultados anteriores en estado mientras llega la nueva respuesta. Pero el alumno no debe asumir esta solución: debe demostrarla mediante evidencias.
16. Test de evaluación
Ver respuestas explicadas
- 1 — B. El síntoma es lo que observamos; la causa explica el comportamiento.
- 2 — A. Primero necesitamos entender el problema.
- 3 — A. El stack trace proporciona información sobre la ejecución.
- 4 — A. Una hipótesis es una explicación que debemos validar.
- 5 — B. La IA funciona mucho mejor con contexto y evidencias.
- 6 — A. Protege contra regresiones.
- 7 — A. Los secretos deben mantenerse fuera de prompts y logs compartidos.
- 8 — A. Un bug reproducible puede investigarse de forma mucho más fiable.
- 9 — B. El cambio mínimo reduce riesgos y efectos secundarios.
- 10 — B. La responsabilidad sigue siendo humana.
- 11 — B. Es la información necesaria para una investigación seria.
- 12 — B. Es el workflow profesional trabajado durante la semana.
17. Recursos externos
GitHub Copilot — DebuggingMaterial oficial sobre debugging asistido por Copilot. Visual Studio Code — Debugging
Documentación oficial sobre depuración. MDN — Debugging
Introducción práctica al debugging de aplicaciones web. OWASP Top 10
Referencia fundamental para identificar problemas de seguridad. Google SRE — Monitoring Distributed Systems
Fundamentos sobre observabilidad y diagnóstico. Google SRE — Practical Alerting
Conceptos relacionados con diagnóstico y operaciones. Martin Fowler — Test Pyramid
Cómo estructurar diferentes tipos de pruebas. The Twelve-Factor App — Logs
Principios sobre gestión de logs en aplicaciones.
18. Checklist de finalización
19. Evaluación práctica
Para considerar Week 11 superada
| Actividad | Puntuación |
|---|---|
| Test teórico | 20% |
| Ejercicios | 15% |
| BUG-001 | 20% |
| BUG-002 | 20% |
| BUG-003 | 20% |
| Documentación | 5% |
Objetivo mínimo recomendado: 80%.
20. Lo que debe quedar aprendido
La IA no es el botón "arreglar bug"
DESARROLLADOR
define problema
↓
proporciona contexto
↓
recoge evidencia
↓
formula hipótesis
↓
IA
↓
analiza
↓
propone
↓
DESARROLLADOR
↓
valida
↓
autoriza cambio
↓
IA
↓
implementa
↓
tests
↓
DESARROLLADOR
↓
acepta solución
La competencia realmente adquirida
El alumno empieza a pasar de:
"La IA me arregla los errores."
a:
"Utilizo la IA como investigador
para acelerar mi proceso de debugging."
21. Preparación para Week 12
El siguiente problema
Ya sabemos:
- preparar contexto;
- delegar tareas;
- construir features;
- debuggear con IA.
Ahora tenemos que responder:
¿Cómo sabemos que el software
que estamos construyendo
es realmente de calidad?
La respuesta nos lleva a:
Week 12 — Testing y Quality Engineering con IA
Trabajaremos:
- unit testing;
- integration testing;
- E2E;
- test coverage;
- test cases generados con IA;
- mutation testing;
- property-based testing;
- quality gates;
- test automation;
- generación de tests por agentes.