Al terminar esta lección
- Producir una frontera IN / OUT / BLOCKED del primer release de Nexo, con razón, evidencia y condición de reapertura por cada ítem.
- Redactar requerimientos funcionales refutables y NFR con estímulo, entorno, respuesta y medida.
- Convertir pasos actuales del proceso en requerimientos orientados al propósito, sin heredar el mecanismo.
- Defender oralmente un OUT y un BLOCKED frente a un cliente que insiste, sin sonar burocrático.
- Revisar tu entrega con un linter y con un agente de IA aceptando solo las observaciones que podés justificar.
Práctica E04 · Cortar el alcance del primer release
Situación. La dueña pide sumar recomendaciones de productos y automatización de WhatsApp porque "ya que estamos".
Entregá. frontera IN/OUT/BLOCKED con justificación; 5 requerimientos funcionales del slice; 4 NFR medibles.
Está listo cuando. cada IN responde a un objetivo; las exclusiones se pueden defender; los NFR tienen escenario y umbral; no se confunde solución actual con necesidad.
Solución comentada: Solución comentada E04. Comparala después de producir tu entrega.
Armá una frontera IN / OUT / BLOCKED del primer release de Nexo. Cada elemento debe tener una razón ligada a objetivo, evidencia, riesgo o dependencia. Si la razón es "para no hacer tanto", profundizá.
Los números del bloque "Entregá" son el contrato mínimo de evaluación: 5 requerimientos funcionales y 4 NFR. Los pasos de este recorrido te proponen llegar a 10 y 5 porque así se parece más a un catálogo real. Si el tiempo no te da, entregá el mínimo bien hecho antes que el máximo flojo.
Tu avance en el taller
Marcá cada paso cuando tengas el artefacto escrito, no cuando lo hayas leído.
Paso 0 · Preparar el material (10 minutos)
Objetivo. Tener a mano todo lo que vas a citar. Un requerimiento que no puede citar su origen vuelve a ser candidato.
Juntá seis cosas: el catálogo de evidencia (EV-01 a EV-08 más lo que sumaste en tus cuadernos de campo), las reglas RN-01 a RN-07 con su estado, el glosario y los desconocidos de tu entrega E03, la lista de 28 ideas de la lección 4.2 y los tres pedidos de la semana de observación que figuran más abajo. En las reglas, separá las del proceso actual (RN-01, RN-02 y RN-04) de las invariantes o políticas del sistema futuro derivadas del negocio (RN-03, RN-05, RN-06 y RN-07). Armá la estructura de archivos antes de escribir:
mkdir -p nexo/docs/alcance nexo/requirements nexo/tools
touch nexo/docs/alcance/frontera-release-1.yaml
touch nexo/requirements/rf.yaml nexo/requirements/nfr.yaml
Un repositorio, aunque sea de texto, te obliga a versionar. Al final de cada paso hacé un commit con un mensaje que diga qué decidiste, no qué archivo tocaste.
Paso 1 · Objetivo y métrica (15 minutos)
Objetivo. Escribir el o los objetivos del release con una métrica y una línea base, antes de decidir qué entra.
Los pedidos de la semana de observación son tu dataset. Estos tres pedidos tardan casi lo mismo en cargarse, y sin embargo terminan de forma muy distinta:
| Pedido | Ítems | Recibido | Decisión | Resultado | Qué ocurrió |
|---|---|---|---|---|---|
| 48311 | 18 | 09:05 | 09:25 | Confirmado | Cliente estándar con saldo disponible. Todos los productos se encuentran y depósito confirma existencia. |
| 48312 | 6 | 09:40 | 15:10 | Confirmado | Una línea depende de un acuerdo negociado del Excel de precios especiales, que mantiene el responsable comercial. El pedido esperó hasta que él pudo confirmar el precio. |
| 48313 | 9 | 10:20 | 12:05 | Cancelado | La cuenta superaba el límite. El vendedor dijo "seguro lo aprueban porque compra mucho", pero no había regla escrita ni autorización equivalente previa. |
Si transformás "agilizar pedidos" en "cargar una lista de productos en menos de dos minutos", podrías construir una interfaz excelente y dejar intacto el mayor tiempo de espera. El tiempo está en lo que ocurre después de la captura. La métrica candidata pasa a ser el tiempo desde la recepción hasta una decisión observable (confirmado, pendiente de autorización o rechazado con motivo), y una segunda métrica es el porcentaje de pedidos que necesitan volver a preguntar precio, crédito o stock por información que el sistema no puede resolver.
Ejemplo parcial. Un objetivo bien escrito para este release:
- id: OBJ-1
statement: "Reducir el tiempo entre la recepción de un pedido y una decisión observable."
metric: "tiempo medio y p90 entre recepción y decisión (confirmado, pendiente, rechazado)"
baseline: "48311: 20 min; 48312: 330 min; 48313: 105 min (tres casos, no representativos)"
evidence: [EV-01, EV-04]
note: "la línea base real se mide con la consulta de la lección 4.2"
Escribí tus objetivos
Calculá a mano el tiempo hasta la decisión de los tres pedidos. Después escribí uno o dos objetivos del release con su métrica y línea base. Evitá nombrar una solución (portal, chatbot, pantalla).
Paso 2 · La frontera IN / OUT / BLOCKED (25 minutos)
Objetivo. Decidir el estado de cada una de las 28 ideas, con razón, evidencia y condición de reapertura (o qué falta y quién lo resuelve). Además tenés que decidir qué hacer con los dos pedidos nuevos de la dueña: recomendaciones y automatización de WhatsApp.
Recorré las 28 ideas de la lección 4.2 y decidí vos antes de mirar su veredicto. Hacelo en este orden, que es el del árbol de decisión de la lección 4.1:
- ¿Responde a un objetivo con evidencia? Si no, OUT.
- ¿Las reglas y datos que necesita están confirmados? Si sí y aporta valor observable, IN.
- Si no están confirmados: ¿hay alguien que pueda resolverlo? Si sí, BLOCKED con ese nombre; si no, OUT hasta que aparezca.
Ejemplo parcial. Tres ítems resueltos en el formato que tenés que usar:
items:
- id: F08
name: "Reserva por depósito sin sobreventa"
state: IN
objective: OBJ-2
evidence: [EV-05]
exit_criteria: "con una unidad disponible y dos reservas simultáneas, exactamente una confirma"
- id: F13
name: "Chatbot de WhatsApp que toma pedidos"
state: OUT
reason: "los pedidos no fallan por el canal de entrada sino por validaciones posteriores"
reopen_when: "la medición muestra que la captura es el cuello de botella"
- id: F25
name: "Reserva con expiración automática"
state: BLOCKED
missing: "cuánto tiempo puede esperar una reserva sin autorización firme (RN-07)"
needed_from: "depósito y comercial"
resolves_by: "medición de la primera semana de operación"
Tu frontera completa
Escribí la frontera de las 28 ideas. Para cada IN, objetivo, evidencia y criterio de salida. Para cada OUT, razón y condición de reapertura. Para cada BLOCKED, qué falta, quién lo resuelve y cuándo se revisa. Incluí cómo tratás recomendaciones y automatización de WhatsApp.
Ver pistas si te trabaste
- Si dudás entre OUT y BLOCKED, preguntate si existiría una decisión que, tomada mañana, te permitiría implementarlo. Si sí, es BLOCKED; si no, OUT.
- Si un IN no tiene criterio de salida, probablemente es una pantalla disfrazada de requerimiento.
- "Autorización automática de crédito" es un ítem trampa: para clientes dentro del límite con datos completos el sistema decide solo; para excepciones hay una persona; PLATINO y cheques son BLOCKED.
- La cuenta corriente completa queda OUT, pero eso no impide que el sistema lea la exposición para decidir un pedido: eso ya está dentro de crédito estándar.
Paso 3 · Requerimientos funcionales (25 minutos)
Objetivo. Escribir los RF del slice en lenguaje verificable, cada uno con su regla, su evidencia, su objetivo y su refutación. Mínimo 5; recomendado 10.
Evitá mencionar componentes de interfaz salvo que la interacción forme parte del contrato. Usá la plantilla de la lección 4.1: cuando [condición], el sistema [respuesta observable], [y deja/no deja] [efecto verificable], según [RN].
Ejemplo parcial. F09, estado visible del pedido. Fijate qué se evita decir:
- id: RF-08
text: >
El sistema expone el estado de cada pedido (pendiente de autorización,
confirmado, rechazado) y no muestra un pedido como confirmado mientras la
evaluación de crédito siga abierta.
rules: [RN-01, RN-02]
sources: [EV-03, "minuta de la reunión 1 (Laura, pantalla compartida)"]
objective: OBJ-1
refutation:
- "un pedido con crédito pendiente nunca aparece como confirmado"
- "al autorizarse, el estado cambia y queda registrado quién lo hizo"
No dice "pantalla", "botón" ni "notificación". Habla de estados y de una condición que se puede contradecir. Fijate también en las fuentes: EV-03 (la vendedora, sobre Platino) sostiene el estado pendiente de autorización de RN-02, mientras que RN-01 se apoya en la minuta de la reunión 1. Y "confirmado" es CONFIRMADO_COMERCIAL (pasó crédito); la colisión con el "confirmado" de depósito se cierra en el modelo de estados.
Tus requerimientos funcionales
Escribí al menos 5 RF (recomendado 10) para los ítems IN. Para cada uno: texto, regla o evidencia de origen, objetivo y refutación. Cubrí precio, crédito, autorización y reserva como mínimo.
Autoevaluá un RF antes de entregarlo
Este RF parece razonable pero mezcla varios problemas. Marcá todas las líneas afectadas.
Paso 4 · NFR medibles (20 minutos)
Objetivo. Escribir los NFR como escenarios con estímulo, entorno, respuesta y medida. Mínimo 4; recomendado 5. Tienen que incluir al menos performance, auditoría y seguridad, y disponibilidad operativa si la podés justificar.
Ejemplo parcial. NFR-03, seguridad, completo y con el estado del umbral:
- id: NFR-03
quality: seguridad
stimulus: "un vendedor intenta operar un cliente que no está en su cartera"
environment: "sesión autenticada, cualquier horario"
response: "el sistema deniega la operación sin revelar datos del cliente y registra el intento"
measure: "100% de los intentos denegados quedan auditados (actor, instante, cliente)"
status: "cartera definida por administración; permiso explícito por acordar"
why: "reduce exposición y errores de contexto"
Antes de escribir los tuyos, fijate si tu métrica pasa la prueba de la pregunta incómoda: ¿qué dato tendría que mirar alguien para decir "se cumplió" o "no se cumplió"? Si la respuesta es "depende", reescribilo.
Tus NFR como escenarios
Escribí 4 o 5 NFR para el release. Cada uno con estímulo, entorno, respuesta, medida y estado del umbral. Incluí latencia del registro de pedido, auditoría de autorizaciones, seguridad de cartera y recuperación ante falla de un tercero. Si ningún dato de Nexo justifica un número, marcalo como propuesto.
Paso 5 · De pasos actuales a propósitos (10 minutos)
Objetivo. Convertir tres pasos actuales del proceso en requerimientos orientados al propósito, y decir qué detalle de implementación eliminaste.
Elegí tres pasos de la reconstrucción AS-IS: por ejemplo reescribir los códigos del WhatsApp en el ERP, mirar la planilla de cheques antes de aprobar, mandar un audio para autorizar, imprimir el pedido o corregir un SKU con el Excel personal del vendedor.
Ordená el procedimiento de conversión
Ordená los pasos para convertir un paso actual en un requerimiento.
- Posición 1 de 5: Describir el paso tal como ocurre hoy, con quién y con qué herramienta
- Posición 2 de 5: Preguntar para qué existe y qué pasaría si no se hiciera
- Posición 3 de 5: Escribir el propósito sin nombrar el mecanismo actual
- Posición 4 de 5: Anotar qué detalle de implementación quedó afuera y por qué
- Posición 5 de 5: Redactar el requerimiento con su condición y su efecto observable
Tres conversiones
Para tres pasos actuales escribí: el paso, su propósito, el requerimiento resultante y el detalle de implementación que eliminaste.
Paso 6 · Defender dos OUT y dos BLOCKED (15 minutos)
Objetivo. Prepararte para defender cada decisión en 60 segundos sin sonar burocrático. La situación de la práctica ocurre así:
En la reunión de cierre de alcance, Marta propone: "Ya que estamos, sumemos recomendaciones de productos y que el chatbot tome los pedidos por WhatsApp. Se lo vendemos como diferencial."
Practicá la respuesta en voz alta con la simulación y después escribila.
Ya que estamos
Reunión de cierre de alcance con Marta. Los diez ítems IN están acordados. Vos tenés la frontera impresa.
Marta (dueña)
Ya que estamos, sumemos recomendaciones de productos y que un chatbot tome los pedidos por WhatsApp. Se lo vendemos a los clientes como diferencial.
¿Qué respondés?
Tus cuatro defensas de 60 segundos
Escribí, en menos de 120 palabras cada una, la defensa de dos OUT (por ejemplo F12 recomendaciones y F13 chatbot de WhatsApp) y de dos BLOCKED (por ejemplo F24 sustitución automática y F25 reserva expirable). Cada una debe reconocer valor, dar la razón de secuencia o la incertidumbre, y dejar una condición de reapertura o un responsable.
Paso 7 · Revisión con linter y con IA (15 minutos)
Objetivo. Pasar tu catálogo por dos filtros: uno mecánico y uno de criterio. Primero el mecánico, porque es gratis:
npx tsx nexo/tools/req-lint.ts nexo/requirements/rf.yaml
El script es el que viste en la lección 4.1. Cada línea de salida es una pregunta que tenés que contestar, no un error automático: un "vocabulario de interfaz" puede ser legítimo si la interacción es parte del contrato. Corregí lo que corresponda y anotá lo que decidiste dejar.
Después hacé una revisión con IA buscando requisitos que no sean refutables, mezclen política con mecanismo o contengan adjetivos no medibles. Aceptá solo observaciones que puedas justificar.
Rol: revisor de requerimientos. No agregues requerimientos nuevos.
Contexto adjunto: objetivos (OBJ-1, OBJ-2), reglas RN-01 a RN-07 con su
estado, glosario y desconocidos de E03, evidencia EV-01 a EV-08, frontera
IN/OUT/BLOCKED y mis archivos rf.yaml y nfr.yaml.
Para cada RF y cada NFR devolvé:
1. Si es refutable, con un caso que lo contradiga.
2. Si mezcla política con mecanismo, citando la frase.
3. Si contiene un adjetivo sin medida o un número sin fuente.
4. Si cita IDs que no existen en los archivos adjuntos.
No propongas valores para RN-02 ni RN-07. Si falta información, escribí "falta: ...".
Cómo revisar lo que devuelve. Para cada observación respondé tres preguntas: ¿el ID que menciona existe en mi catálogo?, ¿el caso que propone asume una regla BLOCKED?, ¿puedo explicar con una frase mía por qué la acepto? Si alguna respuesta es no, la descartás. Anotá en la hoja de entrega una propuesta que rechazaste y por qué: ese es el campo que más revela criterio.
Nexo B2B · La semana en que "agilizar pedidos" dejó de ser un requisito
Hasta este punto el equipo de Nexo repetía una frase cómoda: "queremos que cargar pedidos sea más rápido". Sonaba como un objetivo, pero mezclaba tres problemas distintos. Durante una mañana de observación aparecen los tres pedidos que viste en el paso 1. Tardan casi lo mismo en cargarse y, sin embargo, uno sale en veinte minutos, otro queda detenido hasta la tarde y el tercero termina cancelado. La diferencia no está en escribir los SKU. Está en las decisiones que ocurren después.
El pedido 48311 pertenece a un cliente estándar con saldo disponible. El vendedor copia dieciocho ítems desde WhatsApp, el sistema encuentra todos los productos y depósito confirma existencia. El 48312 tiene solo seis ítems, pero uno depende de un acuerdo de precio negociado que figura en el Excel de precios especiales, y solo puede confirmarlo el responsable comercial, que es quien mantiene ese Excel. El 48313 tiene nueve ítems y stock aparente, aunque la cuenta corriente supera el límite. El vendedor dice que "seguro lo aprueban porque compra mucho", pero no puede señalar una regla escrita ni una autorización previa equivalente.
En el playback, Nexo intenta sumar "automatizar autorizaciones de crédito" al primer release. El equipo no lo acepta todavía. Hay evidencia de que la autorización consume tiempo, pero no existe una política suficientemente definida: la decisión queda BLOCKED (F26). Sí entra mostrar el estado de evaluación, conservar quién tomó la decisión y evitar que un pedido aparente estar confirmado mientras el crédito sigue abierto. El software puede hacer visible una decisión humana sin inventar cómo debe tomarse.
El alcance del slice queda más pequeño y, a la vez, más útil: registrar un pedido con precio resuelto desde una fuente autorizada, verificar disponibilidad, evaluar la regla de crédito conocida, reservar stock cuando corresponda y devolver un resultado explícito. Las excepciones cuya política no está confirmada quedan visibles como pendientes, no escondidas dentro de un "caso especial". El requisito nace del problema observado, no de la pantalla que alguien imaginó en la primera reunión.
Nexo B2B · Expediente 04: backlog que se achica al entender mejor
La primera lista tenía 28 features: portal, carrito, historial, cuenta corriente, recomendaciones, facturación, tracking, sustitutos, reportes. Después de discovery, el primer horizonte se reduce a un conjunto más exigente pero coherente: intención de pedido, precio autoritativo, crédito, reserva, autorización y entrega a preparación. El backlog se hizo más pequeño y el problema más profundo.
Esto no es perder oportunidades. Es separar valor futuro de dependencias actuales. El historial puede agregarse después sin poner en riesgo la confirmación. Un motor de sustituciones necesita conocimiento que hoy no existe. La priorización cambia porque el equipo entiende qué sostiene la promesa central.
Cuaderno de campo 04 · Requerimientos que sobreviven a una revisión hostil
Entregable: 10 RF, 5 NFR, frontera IN/OUT/BLOCKED y justificación de prioridad. Es la versión ampliada del contrato mínimo (5 RF y 4 NFR).
- Para cada RF escribí un contraejemplo que demostraría incumplimiento.
- Para cada NFR escribí entorno y métrica. Si no podés medirlo, reescribilo o eliminalo.
- Pedile a un compañero que intente mover un OUT a IN. Defendé con evidencia, riesgo y dependencia, no con preferencia personal.
- Revisá cada requisito buscando palabras de UI. Si aparece "botón", "pantalla" o "modal", preguntá si el mecanismo es realmente obligatorio.
- Mapeá cada requisito prioritario a un objetivo de negocio o a un riesgo. Los huérfanos necesitan justificación o eliminación.
Criterio de revisión. Un backlog más largo no es más completo. La calidad está en que cada elemento tenga razón de existir y criterio para saber si está cumplido.
Errores frecuentes
| Síntoma | Causa | Corrección |
|---|---|---|
| Un compañero lee tu corte y entiende un alcance distinto. | Los IN no tienen criterio de salida y las razones son genéricas. | Escribir para cada IN la condición observable que lo da por terminado. |
| Todos tus BLOCKED dicen "decisión del cliente". | No identificaste quién concreto puede resolver cada uno. | Nombrar un rol (depósito, administración, dirección) y la evidencia que le pedís. |
| Un NFR dice "el sistema responderá en menos de 1 segundo". | Falta la operación, la carga y el percentil. | Escribirlo como escenario con estímulo, entorno, respuesta y medida, y marcar el umbral como propuesto. |
| El agente de IA te devolvió diez RF "mejorados" y los aceptaste. | Se le pidió completar en lugar de revisar. | Pedir observaciones sobre tu catálogo y aceptar solo las que podés justificar con una frase. |
| Pusiste recomendaciones como OUT "por falta de tiempo". | La razón no apunta a evidencia, riesgo ni dependencia. | Reescribir: no hay episodio que la sostenga, y reabre cuando exista una métrica de venta cruzada. |
Para llevarte
- Una frontera defendible tiene, por cada ítem, razón, evidencia y condición de reapertura o qué falta y quién lo resuelve.
- El "ya que estamos" del cliente se contesta con el problema detrás de la idea, no con presupuesto ni complejidad.
- Un RF sin refutación, sin regla ni evidencia, todavía no es un RF.
- Un NFR sin estímulo, entorno, respuesta y medida es un adjetivo; el umbral que no se midió se marca como propuesto.
- Corré el linter antes de pedirle revisión a una persona o a un agente: lo mecánico se resuelve gratis.
- Registrá qué propuesta de IA rechazaste y por qué: ahí se ve tu criterio.
Hoja de entrega 4 · completá antes de pasar el gate
Este bloque no se completa "de memoria". Volvé a tus artefactos, evidencia y resultados. El objetivo es obligarte a hacer explícito qué vas a defender frente a un mentor o cliente.
Artefacto que entrego y versión:
Tres evidencias que sostienen mis decisiones:
Decisiones que tomé yo y que un agente no podía tomar:
Desconocidos o riesgos que siguen abiertos:
Feedback o propuesta de IA que rechacé, y por qué:
Qué tendría que ocurrir para que yo mismo cambie esta conclusión:
Revisión de calidad: qué corregí antes de enviar o presentar:
Firma del mentor/reviewer o referencia del feedback:
Gate 4 · la frontera es defendible
Un gate no es una formalidad. Si una condición crítica no se cumple, el trabajo correcto es hacer visible la incertidumbre y volver a buscar evidencia.
Criterios de revisión
Revisá tus artefactos antes de marcar cada criterio. El checklist registra tu autoevaluación; la aprobación requiere revisar la evidencia.
Guardá tu entrega
Completá la entrega 04, adjuntá evidencia y registrá los criterios del gate que todavía no podés demostrar.
Cuando termines tu entrega, compará tu razonamiento con la solución comentada E04. No hay una única respuesta correcta: la comparación busca fuentes, decisiones y evidencia.
¿Cómo valoras el contenido técnico de esta lección?
Tu feedback nos ayuda a mejorar los laboratorios prácticos de Eje Z.