Roles de agente para apps construidas por chat: define personas claras, prompts de traspaso y comprobaciones rápidas para que tu equipo entregue apps web y móviles más fiables desde el chat.

El chat te ayuda a moverte rápido, pero no es bueno para mantener todo un producto en la cabeza. La mayoría de los fallos no son “mal código”. Son huecos entre lo que querías, lo que el asistente asumió y lo que finalmente se entregó.
La primera grieta son los requisitos faltantes. Pides “un flujo de registro simple”, pero nadie documenta casos límite como restablecer contraseña, correo ya usado o qué ocurre si el usuario cierra la pestaña a mitad de proceso. El asistente rellena los huecos y esas suposiciones se convierten en tu producto.
La segunda grieta son las decisiones inconsistentes. Un mensaje elige un modelo de datos, el siguiente añade un atajo y un tercero cambia nombres o reglas de validación. Cada elección puede ser razonable por sí sola. Juntas, crean una app frágil que se rompe cuando añades la próxima función.
La tercera grieta es la falta de pruebas. Sin tests básicos y comprobaciones de aceptación claras, solo descubres problemas después de hacer clic por la interfaz. Ahí es cuando “funciona en mi pantalla” se convierte en noches largas, hotfixes y regresiones aleatorias.
Una solución simple es usar personas reutilizables: un Planificador que concretes el trabajo, un Arquitecto que le dé forma, un Implementador que construya en pasos pequeños, un Probador que intente romperlo y un Revisor que atrape el último 10% que causa el 90% del dolor. Esto no es un proceso pesado. Es una manera repetible de mantener decisiones consistentes.
Este enfoque funciona para fundadores en solitario, equipos pequeños y creadores no técnicos que usan herramientas de chat como Koder.ai. Puedes seguir moviéndote rápido, pero dejas de depender de la suerte.
Estos roles no garantizan la calidad por sí solos. Aún necesitas entradas claras (qué significa el éxito, restricciones y prioridades) y todavía tienes que leer las salidas. Piensa en los roles como barreras de contención: reducen errores evitables, pero tú sigues siendo el conductor.
La fiabilidad cae cuando un mismo chat intenta hacerlo todo a la vez: decidir qué construir, diseñarlo, codificarlo, probarlo y juzgarlo. Mezclar esos trabajos facilita perder casos límite, cambiar requisitos a mitad de construcción o “arreglar” bugs añadiendo más confusión.
Una forma práctica de evitar eso es mantener los roles consistentes y acotados. Cada rol se ocupa de un trabajo, y no se le permite “ayudar” fuera de él. Eso mantiene las decisiones trazables y hace más fácil detectar errores.
Usa esta secuencia para casi cualquier feature:
Los handoffs limpios importan tanto como los roles. Cada traspaso debe incluir qué se decidió, qué suposiciones se hicieron y qué significa “terminado”. Si usas Koder.ai, trata cada rol como una intervención de chat separada o un snapshot para poder revertir cuando una decisión salga mal.
Vuelve en bucle con propósito, no por accidente. Si las pruebas fallan, regresa al Implementador con un informe de bug mínimo. Si el diseño no soporta un nuevo requisito, vuelve al Arquitecto. Si el requisito es poco claro o cambia constantemente, pausa y vuelve al Planificador.
Mantén los mismos roles y orden a través de las features. Tras algunas iteraciones, desarrollas memoria muscular: haces mejores preguntas temprano y dejas de rehacer trabajo tarde.
El trabajo del Planificador es convertir una idea difusa en algo que se pueda construir y verificar. Esto no es “escribir documentación”. Es acordar qué significa “hecho” antes de que exista la primera pantalla o endpoint.
Un buen output del Planificador es pequeño y comprobable: una declaración clara del problema, algunas historias de usuario, criterios de aceptación simples y una lista corta de casos límite. También indica lo que aún no vas a hacer, para que el Implementador no construya accidentalmente una funcionalidad más grande de la que se quería.
Úsala cuando tengas una idea de feature y quieras un plan ajustado que el resto de roles pueda seguir.
You are the Planner. Turn the feature idea below into a buildable plan.
Feature idea:
<PASTE IDEA>
Context:
- App type:
- Target users:
- Current behavior (if any):
- Constraints (time, data, compliance, devices):
Output (keep it short):
1) Problem statement (1-2 sentences)
2) Assumptions (3-6 bullets)
3) Questions to confirm (max 6, prioritized)
4) User stories (2-5)
5) Acceptance criteria (5-10, testable, specific)
6) Edge cases & failure modes (3-8)
7) Out of scope (3-6 bullets)
8) Small milestone plan (2-4 steps, highest value first)
Envía este mensaje tal cual (completado) para reducir idas y vueltas.
PLANNER HANDOFF
Feature: <name>
Problem: <1-2 sentences>
Users: <who>
Must-haves (AC): <5-10 acceptance criteria>
Key edge cases: <3-6>
Out of scope: <3-6>
Open questions (need Architect input): <1-4>
Constraints: <tech, data, privacy, deadlines>
Success signal: <how we’ll know it worked>
Si solo haces una cosa como Planificador, haz que los criterios de aceptación sean medibles. Por ejemplo: “El usuario puede restablecer la contraseña y recibe un correo en 60 segundos” vence a “El restablecimiento de contraseña funciona.”
El Arquitecto convierte un buen plan en una forma construible. El trabajo no es inventar patrones sofisticados. Es escoger la estructura más simple que siga funcionando cuando usuarios reales interactúan, los datos crecen y ocurren errores.
Aquí la fiabilidad empieza a sentirse real: límites claros, datos claros y rutas de fallo claras.
Un output práctico del Arquitecto suele cubrir:
Manténlo concreto. En lugar de “sistema de notificaciones”, di “POST /api/alerts, tabla alerts(user_id, type, status), mostrar contador de no leídos en el header.” En vez de “seguro”, di “sesión JWT, cheques de rol en endpoints admin, proteger campos PII.”
Úsala cuando el Planificador entregue trabajo al Arquitecto, o cuando quieras resetear una feature que se siente desordenada.
You are the Architect.
Goal: design the simplest buildable structure for this feature.
Context:
- App type: [web/mobile/both]
- Stack: React UI, Go API, PostgreSQL DB (Flutter screens if mobile)
- Existing constraints: [auth method, existing tables, deadlines]
Input (from Planner):
- User story:
- Acceptance criteria:
- Out of scope:
Deliverables (keep it short and specific):
1) UI map: list screens/components with 1-line purpose each.
2) API map: list endpoints with method, path, request/response fields.
3) Data model: tables + key columns + relationships.
4) Key flows: happy path + 2 failure cases and how UI should respond.
5) Non-functional needs: security, performance, audit/logging (only what matters now).
6) Tradeoffs: 3 decisions you made (and what you avoided) to prevent over-design.
Rules:
- Prefer the smallest option that meets acceptance criteria.
- If something is unclear, ask up to 3 questions, otherwise make a reasonable assumption and write it down.
Si construyes en Koder.ai, este tipo de handoff hace que la implementación sea más rápida porque el Implementador puede seguir un mapa claro en lugar de adivinar la forma a mitad de construcción.
El Implementador convierte un plan claro en código que funcione, sin cambiar el plan. Aquí se gana o pierde la mayor parte de la fiabilidad. El objetivo es directo: construir exactamente lo acordado, en rebanadas finas que puedas deshacer.
Trata cada cambio como si pudiera revertirse. Trabaja en slices delgadas y para cuando los criterios de aceptación se cumplan. Si algo no está claro, pregunta. Adivinar es como pequeñas features se convierten en reescrituras sorpresa.
Un buen Implementador deja un rastro corto de evidencia: el orden de construcción, qué cambió, qué no cambió (para evitar creep oculto) y cómo verificarlo.
Aquí tienes una plantilla de prompt que puedes pegar al pasar trabajo al Implementador:
You are the Implementer.
Context:
- Feature: <name>
- Current behavior: <what happens today>
- Desired behavior: <what should happen>
- Acceptance criteria: <bullets>
- Constraints: <tech choices, performance, security, no schema change, etc.>
Before writing code:
1) Ask up to 5 questions if anything is unclear.
2) Propose a step-by-step build plan (max 6 steps). Each step must be reversible.
3) For each step, list the exact files/modules you expect to touch.
Then implement:
- Execute steps one by one.
- After each step, summarize what changed and how to verify.
- Do not add extras. If you notice a better idea, stop and ask first.
Ejemplo: si el Planificador pidió “Añadir flujo de restablecer contraseña por email”, el Implementador no debería rediseñar la pantalla de login. Construye el endpoint de solicitud de email, luego el manejo del token y después la UI, con una nota corta de verificación tras cada paso. Si tu herramienta soporta snapshots y rollback (Koder.ai lo hace), los pasos pequeños son mucho más seguros.
El trabajo del Probador es romper la feature antes de que lo hagan los usuarios. No confían en la ruta feliz. Buscan estados poco claros, validaciones faltantes y casos límite que aparecen desde el día uno.
Un buen output del Probador es utilizable por otra persona: una matriz de pruebas ligada a los criterios de aceptación, un script manual corto y reportes de bugs con pasos exactos (esperado vs actual).
Apunta a cobertura, no volumen. Concéntrate en donde las fallas son más caras: validación, permisos y estados de error.
Ejemplo: si añadiste “Crear factura”, prueba un importe negativo, una nota de 10 000 caracteres, un cliente faltante y enviar dos veces.
Úsala cuando pases de Implementador a Probador. Pega los criterios de aceptación y notas UI/API relevantes.
ROLE: Tester
GOAL: Produce a test matrix tied to acceptance criteria, including negative tests.
CONTEXT:
- Feature: <name>
- Acceptance criteria:
1) <AC1>
2) <AC2>
- Surfaces: UI screens: <list>; API endpoints: <list>; DB changes: <notes>
OUTPUT FORMAT:
1) Test matrix table with columns: AC, Test case, Steps, Expected result, Notes
2) Negative tests (at least 5) that try to break validation and permissions
3) Manual test script (10 minutes max) for a non-technical person
4) Bug ticket template entries for any failures you predict (Title, Steps, Expected, Actual, Severity)
CONSTRAINTS:
- Keep steps precise and reproducible.
- Include at least one test for loading/error states.
El Revisor hace la pasada final de calidad. No para reescribirlo todo, sino para detectar los pequeños problemas que luego se convierten en bugs largos: nombres confusos, casos límite faltantes, mensajes de error débiles y atajos peligrosos que dificultan el próximo cambio.
Una buena revisión produce salidas claras: qué se revisó, qué debe cambiar, qué es riesgoso pero aceptable y qué decisión se tomó (para no reabrirla la semana siguiente).
Mantén la pasada corta y repetible. Enfócate en lo que más suele romper la fiabilidad:
Úsalo cuando el Implementador diga que la feature está lista:
You are the Reviewer. Do a final review for correctness, clarity, and maintainability.
Context
- Feature goal:
- User flows:
- Key files changed:
- Data model/migrations:
Review checklist
1) Correctness: does it meet the goal and handle edge cases?
2) Security basics: auth, validation, safe logging.
3) Errors: clear messages, consistent status codes.
4) Consistency: naming, patterns, UI text.
5) Maintainability: complexity, duplication, TODOs.
Output format
- Findings (bulleted): include file/function references and severity (high/medium/low)
- Requested changes (must-fix before merge)
- Risk notes (acceptable with reason)
- Decision log updates (what we decided and why)
Finish with exactly one:
APPROVE
CHANGES REQUESTED
Si el Revisor solicita cambios, deben ser pequeños y específicos. El objetivo es menos sorpresas en producción, no un segundo ciclo de desarrollo.
La mayoría del trabajo repetido ocurre porque la siguiente persona empieza con un objetivo borroso, entradas faltantes o restricciones ocultas. Una plantilla de handoff simple arregla eso haciendo cada transferencia predecible.
Usa un encabezado compartido cada vez, incluso para tareas pequeñas:
Aquí hay un ejemplo de handoff (Arquitecto -> Implementador):
ROLE HANDOFF: Architect -> Implementer
Context: Add “Invite team member” to the admin area.
Goal: Admin can send an invite email; invited user can accept and set a password.
Inputs: Existing Users table; auth uses JWT; email provider already configured.
Constraints: Go backend + PostgreSQL; React UI; audit log required; no breaking auth changes.
Definition of Done:
- UI: invite modal + success state
- API: POST /invites, POST /invites/accept
- DB: invites table with expiry; audit event on create/accept
- Tests: happy path + expired invite + reused token
Assumptions: Email templates can reuse “reset password” styling.
Open questions: Should invites be single-use per email?
Decisions made: 72h expiry; tokens stored hashed.
Si quieres que esto se mantenga, guarda tus plantillas en un lugar donde todos puedan copiarlas. Si usas Koder.ai, puedes mantener estos prompts en Planning Mode y tomar un snapshot antes de implementar para que el rollback sea indoloro si el alcance cambia.
La fiabilidad mejora cuando tratas cada feature como un mini release, con handoffs limpios entre roles. Empieza con una historia de usuario, no con un montón de ideas. Escríbela en lenguaje llano y añade criterios de aceptación que alguien pueda verificar sin adivinar.
Diseña solo la mínima forma necesaria para soportar esa historia. El objetivo no es un sistema perfecto sino un plan simple que no colapse cuando añadas la siguiente feature.
Un flujo práctico se ve así:
Mantén la salida de cada paso pequeña y explícita. Un mensaje de handoff por rol suele ser suficiente: entradas, decisiones tomadas y qué necesitas a continuación.
Termina escribiendo una nota de cambio de un párrafo: qué se añadió, qué se eliminó y qué vigilar en el próximo release. Esta “memoria” evita que los mismos debates y bugs vuelvan.
Feature: una pantalla CRM simple donde usuarios pueden añadir contactos, aplicar etiquetas (como “Lead” o “Vendor”) y buscar por nombre o etiqueta. Restricción: tienes 90 minutos y debes reutilizar la tabla contacts existente (sin migraciones que rompan). Mobile necesita una sola pantalla “Añadir contacto” que quepa en una página.
Aquí está el handoff cuando usas esta cadena de personas. Cada rol produce un artefacto pequeño en el que la siguiente persona puede confiar.
Planner output (definition + acceptance)
- Goal: Add contacts with tags and fast search.
- Must: Create, edit, list contacts; add/remove tags.
- Search: matches name OR any tag; results update in under 300ms.
- Constraint: keep existing contacts table; tags can be new table.
- Done when: 5 test cases pass; mobile screen has no scroll on common devices.
Architect output (shape + data)
- Tables: contacts (existing), tags (id, name), contact_tags (contact_id, tag_id).
- API: POST /contacts, PATCH /contacts/:id, GET /contacts?query=.
- Search: SQL ILIKE on contact name + join on tags.
- UI: Contact list with search bar; contact form with tag picker.
- Risk: duplicate tags (“lead” vs “Lead”) - enforce lowercase unique.
Implementer output (small steps)
- Step 1: Add tags + join table migrations.
- Step 2: Update backend handlers and query.
- Step 3: Build React UI list + form; wire to API.
- Step 4: Add basic validation (name required, tag length).
- Step 5: Add loading/error states; keep UI responsive.
Tester output (proof + failure)
- Case: search “lea” returns contacts tagged “lead”. FAIL: returns none.
- Case: adding tag “Lead” then “lead” should not create two tags. PASS.
- Case: empty name rejected. PASS.
- Bug note: backend search only checks contact name, not tags.
Loop-back (Planner update)
- Update acceptance: search must match tags via join; include a test for it.
- Add edge case: searching by tag should return even if name doesn’t match.
Reviewer output (last 10%)
- Check: query uses indexes; add index on tags.name and contact_tags.tag_id.
- Check: error messages are clear; avoid raw SQL errors.
- Check: mobile form spacing and tap targets.
- Confirm: snapshots/rollback point created before release.
Esa única prueba fallida fuerza un loop-back limpio: el plan se afina, el Implementador cambia una consulta y el Revisor valida rendimiento y pulido antes del release.
La manera más rápida de perder la confianza en el software generado por chat es dejar que todo el mundo haga todo. Roles claros y handoffs limpios mantienen el trabajo predecible, incluso cuando vas rápido.
Un hábito pequeño que ayuda: cuando el Implementador termina, pega otra vez los criterios de aceptación y márcalos uno por uno.
Ejecuta este checklist antes de construir, antes de mergear y justo después de lanzar.
Un ejemplo pequeño: “Añadir invitación por email.” Incluye campos (email, rol), qué pasa si el email es inválido y si permites re-invites.
Si tu plataforma lo soporta (Koder.ai lo hace), toma un snapshot antes de ediciones riesgosas. Saber que puedes revertir hace más fácil lanzar cambios pequeños y seguros.
Elige una feature pequeña y ejecuta la cadena completa de personas una vez. Escoge algo real pero contenido, como “añadir restablecimiento de contraseña”, “crear una página solo para admins” o “exportar facturas a CSV”. El punto es ver qué cambia cuando fuerzas handoffs limpios de Planificador a Revisor.
Si usas Koder.ai (koder.ai), Planning Mode es un lugar práctico para fijar alcance y criterios de aceptación antes de construir. Luego, los snapshots y el rollback te dan una vía de escape segura cuando una decisión sale mal, sin convertir todo el proyecto en un debate.
Para hacer el flujo repetible, guarda tus prompts de persona como plantillas que el equipo pueda reutilizar. Mantenlos cortos, con formatos de salida consistentes, y pasarás menos tiempo volviendo a explicar el mismo contexto en cada feature.