Definir el alcance de tareas en Claude Code: de solicitudes vagas a commits
Aprende a definir el alcance de tareas con Claude Code para convertir solicitudes vagas en criterios de aceptación claros, un plan mínimo de UI/API y unos pocos commits pequeños.

Por qué las solicitudes vagas consumen tiempo
Una solicitud vaga suena inofensiva: “Agregar una búsqueda mejor”, “Hacer la incorporación más fluida”, “Los usuarios necesitan notificaciones”. En equipos reales suele llegar como un mensaje de chat de una línea, una captura de pantalla con flechas o una llamada de cliente medio recordada. Todos están de acuerdo, pero cada uno imagina algo distinto.
El costo aparece después. Cuando el alcance no está claro, la gente trabaja con suposiciones. La primera demo se convierte en otra ronda de aclaraciones: “Eso no es lo que quise decir”. El trabajo se rehace y el cambio crece silenciosamente. Ajustes de diseño desencadenan cambios en el código, que requieren más pruebas. Las revisiones se ralentizan porque un cambio difuso es difícil de verificar. Si nadie puede definir cómo se ve lo “correcto”, los revisores acaban debatiendo comportamiento en vez de verificar calidad.
Normalmente puedes detectar una tarea vaga temprano:
- No hay un ejemplo paso a paso de lo que el usuario debe poder hacer
- No hay casos límite (estados vacíos, permisos, errores)
- Trabajo “por si acaso” que se hincha hasta ser un PR enorme
- Comentarios de revisión discutiendo comportamiento, no implementación
- “Lo resolveremos sobre la marcha” se convierte en el plan
Una tarea bien acotada da al equipo una línea de meta: criterios de aceptación claros, un plan mínimo de UI y API, y límites explícitos sobre lo que no está incluido. Esa es la diferencia entre “mejorar la búsqueda” y un cambio pequeño que es fácil de construir y revisar.
Un hábito práctico: separa la “definición de hecho” de lo “agradable de tener”. “Hecho” es una lista corta de comprobaciones que puedes ejecutar (por ejemplo: “La búsqueda devuelve resultados por título, muestra ‘Sin resultados’ cuando está vacía y mantiene la consulta en la URL”). “Agradable de tener” es todo lo que puede esperar (sinónimos, ajustes de ranking, resaltado, analítica). Etiquetarlo desde el principio evita el crecimiento accidental del alcance.
Empieza por el resultado, no por la solución
Las solicitudes vagas a menudo comienzan como soluciones propuestas: “Añade un botón”, “Cambia a un nuevo flujo”, “Usa otro modelo”. Pausa y traduce la sugerencia en un resultado primero.
Un formato simple ayuda: “Como [usuario], quiero [hacer algo], para [alcanzar un objetivo]”. Manténlo claro. Si no puedes decirlo en una sola frase, sigue siendo demasiado vago.
Después, describe qué cambia para el usuario cuando esté hecho. Enfócate en el comportamiento visible, no en detalles de implementación. Por ejemplo: “Después de enviar el formulario, veo una confirmación y puedo encontrar el nuevo registro en la lista”. Eso crea una línea de meta clara y hace más difícil que se cuele “solo un ajuste más”.
También escribe lo que permanece igual. Los no-objetivos protegen tu alcance. Si la solicitud es “mejorar la incorporación”, un no-objetivo podría ser “no rediseño del panel” o “sin cambios en la lógica de niveles de precios”.
Finalmente, elige primero un camino principal: la única rebanada de extremo a extremo que demuestre que la función funciona.
Ejemplo: en lugar de “añadir snapshots por todas partes”, escribe: “Como propietario del proyecto, puedo restaurar el último snapshot de mi app, para deshacer un cambio malo”. No-objetivos: “sin restauraciones en masa, sin rediseño de UI”.
Haz las pocas preguntas que eliminan ambigüedad
Una solicitud vaga rara vez carece de esfuerzo. Le faltan decisiones.
Empieza por las restricciones que silenciosamente cambian el alcance. Los plazos importan, pero también las reglas de acceso y los requisitos de cumplimiento. Si estás construyendo sobre una plataforma con niveles y roles, decide desde el principio quién recibe la función y bajo qué plan.
Luego pide un ejemplo concreto. Una captura de pantalla, el comportamiento de un competidor o un ticket previo revela qué significa “mejor”. Si el solicitante no tiene ninguno, pídele que reproduzca la última vez que sintió el problema: ¿en qué pantalla estaba, qué hizo clic y qué esperaba?
Los casos límite son donde el alcance explota, así que nombra los grandes desde temprano: datos vacíos, errores de validación, llamadas de red lentas o fallidas y qué significa realmente “deshacer”.
Finalmente, decide cómo verificarás el éxito. Sin un resultado comprobable, la tarea se convierte en opiniones.
Estas cinco preguntas suelen quitar la mayor parte de la ambigüedad:
- ¿Quién tiene acceso (nivel y roles)?
- ¿Cuál es la fecha límite y cuál es la versión mínima aceptable?
- ¿Cuál es un ejemplo del comportamiento esperado?
- ¿Qué debe pasar en estados vacíos, errores y conexiones lentas?
- ¿Cómo confirmaremos que funciona (criterios específicos o métrica)?
Ejemplo: “Agregar dominios personalizados para clientes” queda más claro una vez decides a qué nivel pertenece, quién puede configurarlo, si la ubicación de hosting importa para cumplimiento, qué error se muestra para DNS inválido y qué significa “hecho” (dominio verificado, HTTPS activo y un plan de rollback seguro).
Convierte notas desordenadas en criterios de aceptación
Las solicitudes mezcladas combinan objetivos, conjeturas y casos límite a medias recordados. El trabajo es convertir eso en enunciados que cualquiera pueda probar sin leer tu mente. Los mismos criterios deben guiar diseño, desarrollo, revisión y QA.
Un patrón simple lo mantiene claro. Puedes usar Given/When/Then o viñetas cortas que signifiquen lo mismo.
Plantilla rápida de criterios de aceptación
Escribe cada criterio como una única prueba que alguien pueda ejecutar:
- Dado un estado inicial, cuando el usuario hace X, entonces ocurre Y.
- Incluye reglas de validación (qué entradas se permiten).
- Incluye al menos un caso de fallo (qué error ve el usuario).
- Define la “señal de hecho” (qué revisa QA, qué esperan los revisores).
Ahora aplícalo. Supongamos que la nota dice: “Hacer snapshots más fáciles. Quiero revertir si el último cambio rompe cosas.” Transfórmalo en enunciados comprobables:
- Dado un proyecto con 2 snapshots, cuando abro Snapshots, entonces veo ambos con hora y una etiqueta corta.
- Dado un snapshot, cuando hago clic en Roll back y confirmo, entonces el proyecto vuelve a ese snapshot y la app se construye con éxito.
- Dado que no soy el propietario del proyecto, cuando intento hacer rollback, entonces veo un error y nada cambia.
- Dado que un rollback está en curso, cuando actualizo la página, entonces sigo viendo el estado y el resultado final.
- Dado que un rollback falla, cuando se detiene, entonces veo un mensaje claro y la versión actual sigue activa.
Si QA puede ejecutar estas comprobaciones y los revisores pueden verificarlas en la UI y en los logs, estás listo para planear el trabajo de UI y API y dividirlo en commits pequeños.
Bosqueja un plan mínimo de UI
Un plan mínimo de UI es una promesa: el cambio visible más pequeño que demuestra que la función funciona.
Empieza nombrando qué pantallas cambiarán y qué notará una persona en 10 segundos. Si la solicitud dice “hacerlo más fácil” o “limpiarlo”, tradúcelo a un cambio concreto que puedas señalar.
Escríbelo como un pequeño mapa, no como un rediseño. Por ejemplo: “Página Orders: añadir una barra de filtros sobre la tabla” o “Settings: añadir un nuevo toggle bajo Notificaciones”. Si no puedes nombrar la pantalla y el elemento exacto que cambia, el alcance sigue siendo incierto.
Define los estados clave de UI
La mayoría de cambios de UI necesitan algunos estados previsibles. Especifica solo los que aplican:
- Cargando
- Vacío
- Error (y si existe reintento)
- Éxito (toast, mensaje inline, lista actualizada)
Confirma las palabras que verán los usuarios
La copia de UI es parte del alcance. Captura etiquetas y mensajes que deben aprobarse: texto de botones, etiquetas de campos, texto de ayuda y mensajes de error. Si la redacción aún está abierta, márcala como texto provisional y anota quién la confirmará.
Mantén una pequeña nota de “no ahora” para todo lo que no sea necesario para usar la función (pulido responsive, ordenamiento avanzado, animaciones, iconos nuevos).
Bosqueja un plan mínimo de API y datos
Una tarea acotada necesita un contrato pequeño y claro entre UI, backend y datos. El objetivo no es diseñar todo el sistema, sino definir el conjunto mínimo de peticiones y campos que demuestren que la función funciona.
Empieza listando los datos que necesitas y de dónde vienen: campos existentes que puedes leer, campos nuevos que debes almacenar y valores que puedes calcular. Si no puedes nombrar la fuente de cada campo, aún no tienes un plan.
Mantén la superficie del API pequeña. Para muchas funciones, una lectura y una escritura bastan:
GET /items/{id}devuelve el estado necesario para renderizar la pantallaPOST /items/{id}/updateacepta solo lo que el usuario puede cambiar y devuelve el estado actualizado
Escribe entradas y salidas como objetos simples, no párrafos. Incluye campos obligatorios vs opcionales y qué ocurre en errores comunes (no encontrado, validación fallida).
Haz una revisión rápida de autenticación antes de tocar la base de datos. Decide quién puede leer y quién puede escribir, y enuncia la regla en una frase (por ejemplo: “cualquier usuario autenticado puede leer, solo admins pueden escribir”). Omitir esto suele llevar a rehacer trabajo.
Finalmente, decide qué debe almacenarse y qué puede calcularse. Una regla simple: almacena hechos, calcula vistas.
Usa Claude Code para producir una tarea acotada
Claude Code funciona mejor cuando le das un objetivo claro y una caja estrecha. Empieza pegando la solicitud desordenada y cualquier restricción (fecha límite, usuarios afectados, reglas de datos). Luego pide una salida acotada que incluya:
- Una reformulación en lenguaje llano del alcance y una breve lista de criterios de aceptación.
- Una pequeña secuencia de commits (apunta a 3–7), cada uno con un resultado claro.
- Archivos o carpetas probables a modificar por commit, y qué cambia dentro de ellos.
- Un plan de pruebas rápido por commit (un camino feliz y un caso límite).
- Notas explícitas de fuera de alcance.
Después de que responda, léelo como revisor. Si ves frases como “mejorar rendimiento” o “hacer más limpio”, pide una redacción medible.
Mini ejemplo (qué es “bueno”)
Solicitud: “Añadir una forma de pausar una suscripción.”
Una versión acotada podría decir: “El usuario puede pausar de 1 a 3 meses; la siguiente fecha de facturación se actualiza; el admin puede ver el estado de pausa”, y fuera de alcance: “No cambios de prorrateo.”
A partir de ahí, el plan de commits se vuelve práctico: un commit para DB y forma del API, otro para controles de UI, otro para validación y estados de error, otro para tests end-to-end.
Divide el trabajo en commits pequeños y revisables
Los cambios grandes esconden errores. Los commits pequeños hacen las revisiones más rápidas, facilitan rollbacks y te ayudan a notar cuando te sales de los criterios de aceptación.
Una regla útil: cada commit debe desbloquear un nuevo comportamiento y contener una forma rápida de probar que funciona.
Una secuencia común sería:
- Modelo de datos o migración (si hace falta) más tests
- Comportamiento y validación del API
- Enlace de UI con estados vacío/error
- Logging o analítica solo si es requerido, luego pulido pequeño
Mantén cada commit enfocado. Evita refactors tipo “ya que estoy aquí”. Mantén la app funcionando end-to-end, aunque la UI sea básica. No juntes migraciones, comportamiento y UI en un solo commit a menos que tengas una razón sólida.
Ejemplo paso a paso: “Exportar informes”
Un stakeholder dice: “¿Podemos añadir Exportar informes?” Esconde muchas decisiones: qué informe, qué formato, quién puede exportar y cómo se entrega.
Pregunta solo lo que cambia el diseño:
- ¿Qué tipos de informe entran en v1?
- ¿Qué formato se requiere para v1 (CSV, PDF)?
- ¿Quién puede exportar (admins, roles específicos)?
- ¿Es descarga directa o exportación por correo?
- ¿Límites (rango de fechas máximo, límite de filas, timeouts)?
Asume las respuestas: “Sales Summary, solo CSV, rol manager, descarga directa, máximo 90 días.” Ahora los criterios de aceptación de v1 son concretos: los managers pueden hacer clic en Export en la página Sales Summary; el CSV coincide con las columnas de la tabla en pantalla; la exportación respeta los filtros actuales; exportar más de 90 días muestra un error claro; la descarga se completa en 30 segundos para hasta 50k filas.
Plan mínimo de UI: un botón Export junto a las acciones de la tabla, un estado de carga mientras se genera y un mensaje de error que diga cómo arreglarlo (por ejemplo “Elige 90 días o menos”).
Plan mínimo de API: un endpoint que acepta filtros y devuelve un CSV generado como respuesta de archivo, reusando la misma consulta que la tabla y aplicando la regla de 90 días en el servidor.
Luego envíalo en unos pocos commits ajustados: primero el endpoint para el camino feliz fijo, luego el enlace de UI, luego validación y errores mostrados al usuario, y finalmente tests y documentación.
Errores comunes al acotar (y cómo evitarlos)
Requisitos ocultos se cuelan
Solicitudes como “añadir roles de equipo” suelen ocultar reglas sobre invitar, editar y qué pasa con usuarios existentes. Si te pilla adivinando, escribe la suposición y conviértela en pregunta o regla explícita.
El pulido de UI se mezcla con el comportamiento central
Los equipos pierden días cuando una tarea incluye “hacer que funcione” y “hacerlo bonito”. Mantén la primera tarea centrada en comportamiento y datos. Deja estilo, animaciones y espaciado para una tarea posterior salvo que sean necesarios para usar la función.
Intentas resolver todos los casos límite en v1
Los casos límite importan, pero no todos deben resolverse de inmediato. Maneja los que pueden romper la confianza (envíos duplicados, ediciones en conflicto) y difiere el resto con notas claras.
Estados de error y permisos se dejan para “después”
Si no los escribes, los perderás. Incluye al menos un camino infeliz y al menos una regla de permisos en tus criterios de aceptación.
Criterios que no puedes verificar
Evita “rápido” o “intuitivo” a menos que adjuntes un número o una comprobación concreta. Cámbialos por algo que se pueda probar en revisión.
Lista rápida antes de empezar a programar
Fija la tarea para que un compañero pueda revisar y probar sin leer la mente:
- Resultado y no-objetivos: una frase para el resultado, más 1–3 no-objetivos explícitos.
- Criterios de aceptación: 5–10 comprobaciones verificables en lenguaje llano.
- Estados de UI: mínimo de cargando, vacío, error y éxito.
- Notas de API y datos: la forma mínima del endpoint y cambios de datos, más quién puede leer y escribir.
- Plan de commits con tests: 3–7 commits, cada uno con una prueba rápida.
Ejemplo: “Añadir búsquedas guardadas” se vuelve “Los usuarios pueden guardar un filtro y volver a aplicarlo más tarde”, con no-objetivos como “sin compartir” y “sin cambios en sorting”.
Próximos pasos: mantener el alcance estable mientras construyes
Una vez tengas una tarea acotada, protégela. Antes de codificar, haz una revisión rápida con quien pidió el cambio:
- Lee los criterios de aceptación y confirma que coinciden con el resultado.
- Confirma permisos, estados vacíos y comportamiento en fallo.
- Reconfirma lo que está fuera de alcance.
- Acepta los cambios mínimos de UI y API que cumplen los criterios.
- Decide cómo lo vas a demostrar y qué significa “hecho”.
Luego guarda los criterios donde el trabajo ocurre: en el ticket, en la descripción del PR y donde tu equipo realmente mire.
Si construyes en Koder.ai (koder.ai), ayuda bloquear el plan primero y luego generar código a partir de él. Planning Mode encaja bien en ese flujo, y snapshots y rollback pueden mantener experimentos seguros cuando necesitas probar un enfoque y revertirlo.
Cuando surjan ideas nuevas durante la construcción, mantén el alcance estable: escríbelas en una lista de seguimiento, párate a reescribir el alcance si cambian los criterios de aceptación y mantén los commits vinculados a un criterio a la vez.
Preguntas frecuentes
How do I know a feature request is too vague to start building?
Comienza escribiendo el resultado en una frase (qué podrá hacer el usuario cuando esté hecho), luego añade 3–7 criterios de aceptación que un tester pueda verificar.
Si no puedes describir el comportamiento “correcto” sin debatirlo, la tarea sigue siendo vaga.
What’s the fastest way to turn “do X better” into a clear outcome?
Usa este formato rápido:
- Como [usuario]
- Quiero [acción]
- Para [objetivo]
Luego añade un ejemplo concreto del comportamiento esperado. Si no puedes dar un ejemplo, reproduce la última vez que ocurrió el problema y escribe qué hizo el usuario y qué esperaba ver.
How should I separate “done” from “nice-to-have” without arguing for days?
Escribe primero una corta lista de “Definición de hecho” (las comprobaciones que deben pasar), y luego una lista separada de “Nice-to-have”.
Regla por defecto: si no es necesario para demostrar que la función funciona de extremo a extremo, entra en nice-to-have.
What questions remove the most ambiguity early?
Haz las pocas preguntas que cambian el alcance:
- ¿Quién tiene acceso (nivel y roles)?
- ¿Cuál es la fecha límite y cuál es la versión mínima aceptable?
- ¿Cuál es un ejemplo del comportamiento esperado?
- ¿Qué pasa en estados vacíos, errores y conexiones lentas?
- ¿Cómo confirmaremos que funciona (criterio o métrica)?
Estas preguntas sacan las decisiones faltantes a la luz.
Which edge cases should I include in v1 acceptance criteria?
Trata los casos límite como elementos de alcance, no como sorpresas. Para v1, cubre los que rompen la confianza:
- Estado vacío
- Errores de validación
- Permiso denegado
- Fallos de red/API
- Comportamiento de “deshacer” o rollback (si aplica)
Todo lo demás puede diferirse explícitamente como fuera de alcance.
What does good acceptance criteria look like in practice?
Usa enunciados comprobables que cualquiera pueda ejecutar sin adivinar:
- Dado un estado inicial
- Cuando el usuario hace X
- Entonces ocurre Y
Incluye al menos un caso de fallo y una regla de permisos. Si un criterio no puede probarse, reescríbelo hasta que pueda.
How minimal should a UI plan be for a scoped task?
Nombra las pantallas exactas y el cambio visible por pantalla.
También lista los estados de UI requeridos:
- Cargando
- Vacío
- Error (y si existe reintento)
- Éxito (toast/mensaje/lista actualizada)
Mantén también la copia (texto de botones, errores) dentro del alcance, aunque sea texto provisional.
What’s the simplest way to draft an API/data plan without over-designing?
Mantén el contrato pequeño: normalmente una lectura y una escritura bastan para v1.
Define:
- Entradas/salidas como objetos simples (campos obligatorios vs opcionales)
- Errores comunes (no encontrado, validación fallida)
- Regla de autenticación en una frase (quién puede leer/escribir)
Almacena hechos; calcula vistas cuando sea posible.
How should I prompt Claude Code to produce a scoped task and commit plan?
Pide un entregable acotado:
- Alcance reescrito + lista de aceptación
- 3–7 commits, cada uno desbloqueando un comportamiento
- Archivos probables tocados por commit
- Plan de pruebas rápido (camino feliz + un borde)
- Lista explícita de fuera de alcance
Luego vuelve a pedir cualquier redacción vaga como “mejorar” en términos medibles.
How do I split a feature into small commits that are easy to review?
Secuencia por defecto:
- Cambio de datos/modelo (si hace falta) + tests
- Comportamiento del API + validación
- Enlaces de UI con estados vacío/error
- Pulido final solo si es necesario
Regla práctica: un commit = un nuevo comportamiento visible por el usuario + una forma rápida de demostrar que funciona. Evita agrupar refactors “aprovechando” en los commits de la funcionalidad.