Prompt Engineering para Desarrollo de Software¶
Proposito¶
Guia practica para escribir prompts efectivos al usar IA como copiloto de desarrollo. No es teoria abstracta: son patrones concretos que funcionan para tareas de ingenieria.
Cuando usarlo¶
- Cada vez que le pidas algo a una IA para desarrollo.
- Cuando los resultados de la IA no son lo que esperabas (probablemente el prompt necesita mejora).
1. El Framework CREST para Prompts de Codigo¶
Cada prompt efectivo tiene estos componentes:
| Componente | Que es | Ejemplo |
|---|---|---|
| Context | Informacion de fondo sobre tu proyecto | "Estoy trabajando en un backend NestJS con TypeORM y PostgreSQL" |
| Role | Que rol quieres que la IA asuma | "Actua como un senior backend engineer con experiencia en DDD" |
| Expectation | Que output esperas exactamente | "Genera el servicio con unit tests incluidos" |
| Spec | La especificacion detallada de lo que necesitas | El contenido de tu spec.md o la regla de negocio |
| Tone | Restricciones y estilo | "Usa TypeScript estricto, sigue los patrones del proyecto, no uses any" |
2. Patrones de Prompt por Tarea¶
Patron 1: Implementar desde Spec¶
Contexto: Estoy trabajando en un Sistema de Reservas de Turnos Medicos.
Backend: NestJS + TypeORM + PostgreSQL.
Patron: DDD con servicios de dominio.
Necesito implementar el servicio de cancelacion de turnos.
Spec de la feature:
[pegar contenido de la spec o secciones relevantes]
Reglas de negocio:
- Cancelacion con < 24h genera penalizacion
- 3 penalizaciones bloquean al paciente por 30 dias
- Solo el paciente dueno o el medico asignado pueden cancelar
- Un booking COMPLETED o NO_SHOW no se puede cancelar
Genera:
1. El domain service (BookingCancellationService)
2. Unit tests para cada regla de negocio
3. El controller endpoint (PATCH /bookings/:id/cancel)
Restricciones:
- TypeScript estricto (no any)
- Inyeccion de dependencias via constructor
- Errors con codigos especificos (BOOKING_NOT_CANCELLABLE, etc.)
Patron 2: Debugging Asistido¶
Tengo un bug en el calculo de disponibilidad de medicos.
Comportamiento esperado: Los slots del medico no deben incluir horarios
donde ya existe un booking CONFIRMED.
Comportamiento actual: Los slots ocupados siguen apareciendo como disponibles.
Codigo relevante:
[pegar el metodo getAvailableSlots()]
Query que obiene los bookings:
[pegar la query]
Datos de ejemplo:
- Medico tiene disponibilidad Lunes 09:00-13:00, slots de 30 min
- Existe booking CONFIRMED para Lunes 10:00-10:30
- El endpoint retorna 10:00 como disponible (incorrecto)
Ayudame a encontrar el bug. Muestrame el fix y explicame por que ocurre.
Patron 3: Code Review¶
Revisa este codigo como un senior engineer enfocado en:
1. Correctitud: Cumple con las reglas de negocio?
2. Seguridad: Hay vulnerabilidades?
3. Performance: Hay queries N+1 o problemas de rendimiento?
4. Mantenibilidad: Es facil de entender y modificar?
Reglas de negocio que debe cumplir:
[listar las reglas relevantes]
Codigo a revisar:
[pegar el codigo]
Para cada issue encontrado, indica:
- Linea del problema
- Tipo (bug, seguridad, performance, estilo)
- Severidad (critico, alto, medio, bajo)
- Fix sugerido con codigo
Patron 4: Generar Tests desde BDD¶
Genera tests automatizados a partir de estos escenarios BDD.
Stack: Jest + Supertest + TypeORM (test database)
Escenarios:
[pegar los scenarios en formato Given/When/Then]
Convenciones del proyecto:
- Cada test usa una BD de test limpia (beforeEach trunca tablas)
- Helpers: seedDoctor(), seedPatient(), loginAs(user)
- Los mocks de servicios externos usan jest.mock()
Genera integration tests que cubran cada scenario.
Patron 5: Refactoring Guiado¶
Necesito refactorizar este componente. El codigo actual funciona pero:
- Tiene demasiadas responsabilidades (300+ lineas)
- Las reglas de negocio estan mezcladas con la logica de acceso a datos
- Es dificil de testear porque depende directamente de la BD
Patron objetivo: Separar en domain service (logica pura) + repository (acceso a datos).
Codigo actual:
[pegar el codigo]
Genera la version refactorizada manteniendo el comportamiento exacto.
Incluye los tests que validan que el refactor no rompio nada.
3. Anti-Patrones (Que NO Hacer)¶
❌ Prompt vago¶
Problema: La IA no tiene contexto, va a generar algo generico que no sirve para tu proyecto.❌ Prompt sin restricciones¶
Problema: Va a elegir librarias, patrones, y convenciones que probablemente no son las tuyas.❌ Pedir todo junto¶
"Genera el backend completo del sistema de turnos con auth, bookings,
notificaciones, base de datos, tests, CI/CD, y documentacion"
❌ No validar el output¶
Problema mas peligroso: aceptar el codigo generado sin leerlo. La IA puede generar codigo que parece correcto pero tiene bugs sutiles en edge cases.
4. Tips para Mejores Resultados¶
-
Dale contexto incremental. Empieza con el contexto del proyecto, luego la spec, luego los detalles.
-
Usa los archivos del workspace como input. Los specs, domain models, y API contracts son excelente contexto para la IA.
-
Pide que explique. Si no entiendes algo del codigo generado, pregunta. Es mejor entender que copiar.
-
Itera. El primer output rara vez es perfecto. Refina con feedback especifico: "El manejo de errores no cubre el caso de..." no "hazlo mejor".
-
Separa generacion de revision. Primero genera, luego pide una revision del codigo generado. Son tareas diferentes.
-
Manten un archivo de prompts. Los prompts que funcionan bien son reutilizables. Guardalos.
5. Metricas de Efectividad¶
Como saber si tus prompts estan mejorando:
| Metrica | Malo | Bueno |
|---|---|---|
| Iteraciones hasta output usable | 5+ | 1-2 |
| % de codigo generado que usas tal cual | < 30% | > 70% |
| Bugs en codigo generado | Frecuentes | Raros (y en edge cases) |
| Tiempo total (prompt + revision) vs manual | Mas lento | 2-3x mas rapido |
Checklist de Completitud¶
- Framework CREST explicado
- Patrones por tipo de tarea con ejemplos
- Anti-patrones documentados
- Tips practicos
- Metricas de efectividad
- Revisada por otro ingeniero
Archivos relacionados¶
- ai-workflow-daily.md - Flujo diario con IA
- context-window-strategy.md - Gestion de contexto
- spec-to-code-workflow.md - De spec a codigo
- ../01-specs/_template.spec.md - Specs como input para prompts