Patrones de Ingeniería de Prompts para Desarrollo de Software
No todos los prompts producen buen código. Estos patrones probados en batalla te ayudarán a obtener mejores resultados de los asistentes de IA cada vez que abras un chat.
La ingeniería de prompts se ha convertido en una de las habilidades más valiosas en el desarrollo de software moderno. La diferencia entre un prompt que produce código funcional y mantenible y uno que genera un desastre roto a menudo es sutil — unas pocas palabras de contexto, una restricción expresada temprano, o un ejemplo que enmarca el problema correctamente. Este artículo recopila los patrones que consistentemente producen buenos resultados, organizados por el tipo de tarea que estás resolviendo.
Estos patrones no son teóricos. Están destilados de miles de interacciones reales con asistentes de programación con IA en bases de código de producción. Cada patrón incluye un ejemplo concreto y una explicación de por qué funciona, para que puedas adaptarlo a tus propias herramientas y flujos de trabajo.
Patrón 1: El Sándwich de Contexto
El error más común que cometen los desarrolladores al usar prompts con IA es proporcionar muy poco contexto. Piden una función sin describir el sistema circundante, las restricciones o las convenciones que esperan. La IA entonces hace suposiciones razonables que son incorrectas para su base de código específica, y el resultado necesita una edición intensiva.
El Sándwich de Contexto soluciona esto estructurando cada prompt en tres capas: qué estás construyendo, qué restricciones aplican y cómo se ve el éxito.
- Capa superior — El objetivo: Describe lo que quieres en una oración clara. Esta es la única parte que la mayoría de los desarrolladores incluye.
- Capa media — Las restricciones: Enumera lo no negociable. Versiones de librerías, convenciones de estilo, requisitos de rendimiento, casos borde que deben manejarse.
- Capa inferior — La verificación: Describe cómo sabrás que el resultado es correcto. Un caso de prueba, un formato de salida esperado, o un comportamiento específico para confirmar.
// Weak prompt
const result = await ai.generate("Write a function that sorts an array of users by name");
// Context Sandwich prompt
const result = await ai.generate([
"Create a compare function for sorting an array of user objects by lastName, then firstName.",
"Constraints: case-insensitive, handles missing names, TypeScript, no external libraries.",
"Verify: users.sort(compare).map(u => u.lastName) should return ['Adams', 'adams', 'Brown'].",
].join("\n\n"));El Sándwich de Contexto funciona porque reduce la ambigüedad en todos los niveles. La IA sabe lo que quieres, lo que no aceptarás y cómo evaluarás el resultado. Este único patrón elimina la mayor parte del ir y venir que pierde tiempo en el desarrollo asistido por IA.
Patrón 2: La Restricción Negativa
Los modelos de IA son generalmente buenos entendiendo lo que quieres. Les cuesta más entender lo que no quieres. Un prompt como escribe un formulario de inicio de sesión producirá algo razonable, pero podría incluir reglas de complejidad de contraseñas que tu diseño no usa, o una casilla de recordarme que tu gerente de producto eliminó el sprint pasado.
El patrón de Restricción Negativa establece explícitamente lo que la IA debe evitar. Es más efectivo que esperar que el modelo adivine correctamente tus exclusiones.
// Without negative constraints
"Build a user settings page with tabs for profile, security, and notifications."
// With negative constraints
"Build a user settings page with tabs for profile, security, and notifications.
DO NOT include: email verification flows, password strength meters, or social login buttons."Las restricciones negativas funcionan mejor cuando se colocan al final del prompt, después de la descripción positiva. Esto refleja cómo los humanos procesan instrucciones — necesitamos entender lo que se pide antes de poder entender lo que está excluido. La IA sigue el mismo patrón: construye el modelo mental a partir de la descripción positiva, luego aplica las exclusiones como filtros adicionales.
Patrón 3: La Plantilla de Ejemplo
Cuando necesitas resultados consistentes en múltiples interacciones con IA — generar documentación, escribir casos de prueba o formatear respuestas de API — decirle a la IA lo que debe hacer es menos efectivo que mostrárselo. El patrón de Plantilla de Ejemplo proporciona uno o dos ejemplos completos del resultado deseado y luego pide más en el mismo formato.
Esto es lo más parecido al aprendizaje con pocos ejemplos disponible a través de interfaces de chat. Un ejemplo bien elegido comunica formato, tono, nivel de detalle y convenciones implícitas que requerirían párrafos para describir explícitamente.
// Example Template for generating error messages
const example = {
code: "ERR_AUTH_TOKEN_EXPIRED",
message: "Your session has expired. Please log in again.",
severity: "warning",
action: "redirect:/login",
};
const result = await ai.generate([
"Generate 5 more error objects in the same format as this example:",
JSON.stringify(example, null, 2),
"Cover: rate limiting, permission denied, not found, validation error, server error.",
].join("\n\n"));La clave de este patrón es elegir el ejemplo correcto. Debe ser representativo pero no excesivamente específico — quieres que la IA generalice a partir de tu ejemplo, no que replique sus peculiaridades. Dos ejemplos son mejores que uno cuando el formato de salida tiene múltiples variaciones, pero más de tres ejemplos rara vez aportan valor y empiezan a consumir tu ventana de contexto.
Patrón 4: El Bucle de Refinamiento Iterativo
Pedirle a una IA un resultado final y perfecto en un solo prompt es como pedirle a un desarrollador junior que publique código en producción sin iteración. A veces funciona, pero generalmente produce algo que necesita una reelaboración sustancial. El Bucle de Refinamiento Iterativo trata la interacción con IA como una conversación, comenzando amplio y reduciendo el enfoque.
- Ronda 1 — Genera una solución amplia o un esqueleto. No pidas detalles todavía.
- Ronda 2 — Revisa el resultado y da dirección específica. Esta parte está bien, cambia esa parte, añade este caso.
- Ronda 3 — Pule los detalles. Manejo de errores, casos borde, nombres, documentación.
Cada ronda le da a la IA más contexto sobre lo que realmente quieres, porque tu retroalimentación es específica para el código que acaba de producir. Esto es mucho más eficiente que intentar anticipar cada detalle en el primer prompt. La IA también se beneficia porque puede concentrarse en un nivel del problema a la vez — primero la estructura, luego los detalles específicos, luego el pulido.
Patrón 5: El Prefijo de Rol
Los modelos de IA son entrenados con texto de muchos dominios, y pueden adoptar diferentes personas cuando se les solicita. El patrón de Prefijo de Rol asigna explícitamente un rol y una perspectiva a la IA antes de pedir código, lo que la prepara para producir resultados apropiados para ese contexto.
// Generic
"Review this function for security issues."
// Role-prefixed
"You are a security engineer reviewing a pull request. Focus on:
- Injection vulnerabilities in the SQL query construction
- Missing input validation on the user ID parameter
- Hardcoded credentials or secrets
Review this function:"El patrón de Prefijo de Rol es especialmente poderoso para tareas de revisión, refactorización y generación de documentación. Cuando necesitas código que siga estándares de accesibilidad, prefija con Eres un especialista en accesibilidad. Cuando optimizas para rendimiento, prefija con Eres un ingeniero de rendimiento. La IA ajusta su razonamiento y resultado para coincidir con la perspectiva que solicitas.
Patrón 6: El Contrato de Salida
Una de las experiencias más frustrantes con la programación con IA es obtener una respuesta que se ve correcta pero cambia sutilmente el formato de salida, añade texto explicativo que no pediste, u omite partes críticas. El patrón de Contrato de Salida previene esto especificando exactamente lo que la respuesta debe contener y, igual de importante, lo que no debe contener.
"Generate a React component for a file upload button.
Output contract:
- Return ONLY the component code in a single code block
- No explanation text before or after
- Include TypeScript props interface
- Include CSS module import
- Do NOT include usage examples or test files
- File name: FileUpload.tsx"El Contrato de Salida es particularmente valioso cuando estás canalizando la salida de la IA hacia otra herramienta o flujo de trabajo. Si la respuesta siempre sigue la misma estructura, puedes analizarla de manera confiable. Este patrón es la base para construir pipelines automatizados asistidos por IA que requieren formato consistente.
Patrón 7: El Presupuesto de Ventana de Contexto
Cada modelo de IA tiene una ventana de contexto limitada. Cuando pegas demasiado código, documentación o historial de conversación, el modelo empieza a olvidar o alucinar. El patrón de Presupuesto de Ventana de Contexto trata la ventana de contexto como un recurso escaso y lo asigna deliberadamente.
- Asigna el 60 % de tu presupuesto al código más relevante y la descripción de la tarea.
- Asigna el 20 % a ejemplos y restricciones que aclaren la tarea.
- Reserva el 20 % para el espacio de respuesta de la IA — si la ventana está llena, la salida se truncará.
Cuando tienes más contexto del que cabe en la ventana, prioriza las partes más específicas y relevantes. Un prompt enfocado con un archivo cuidadosamente elegido es más efectivo que un prompt amplio con cinco archivos vagamente relacionados. La IA siempre puede pedir más contexto si lo necesita — dale permiso para hacerlo al principio de la conversación.
Un prompt enfocado con un archivo cuidadosamente elegido consistentemente supera a un prompt disperso con cinco archivos que la IA apenas puede ver.
Patrón 8: La Secuencia de Andamio-Luego-Detalle
Las funcionalidades complejas tienen muchas partes móviles. Pedirle a una IA que las genere todas a la vez produce un resultado enredado donde la gestión de estado, las llamadas API y la representación UI son difíciles de separar. La secuencia de Andamio-Luego-Detalle divide el problema en dos fases.
Primero, pídele a la IA que genere un andamio: las definiciones de tipos, interfaces y la estructura de alto nivel de la funcionalidad sin detalles de implementación. Revisa este andamio y confirma que coincide con tu modelo mental. Solo entonces pídele a la IA que complete los detalles — implementación, manejo de errores, casos borde — una capa a la vez.
// Phase 1 — Scaffold
"Design the type structure for a multi-step checkout flow. List the interfaces, enums, and state machine transitions. Do not write implementation yet."
// Phase 2 — Detail (after reviewing scaffold)
"Implement the checkout state machine from the types we agreed on. Include transition validation and error states."Este patrón previene el tipo de reelaboración más costoso: cambiar la estructura después de que la implementación está hecha. Al acordar el andamio primero, te aseguras de que la IA construya sobre una base que coincida con tu arquitectura, no una imaginada.
Combinando los patrones
Estos ocho patrones funcionan mejor cuando se combinan. Una sesión típica podría empezar con el Sándwich de Contexto para enmarcar la solicitud, usar Restricciones Negativas para excluir enfoques no deseados, seguir el Bucle de Refinamiento Iterativo para converger en la solución correcta, y cerrar con un Contrato de Salida para obtener un resultado limpio y analizable.
Cuanto más practiques estos patrones, más naturales se vuelven. En unos días, te encontrarás estructurando instintivamente los prompts como Sándwiches de Contexto y añadiendo Restricciones Negativas sin pensar. Ahí es cuando el desarrollo asistido por IA pasa de ser una herramienta a veces útil a una parte consistentemente confiable de tu flujo de trabajo.
Cada interacción con un asistente de IA es una inversión. Un prompt bien estructurado toma treinta segundos extra para escribir pero ahorra horas de ida y vuelta. En cien interacciones, esos treinta segundos se acumulan en días de tiempo ahorrado — y la diferencia entre frustración y fluidez.
