Al terminar esta lección
- Derivar un requerimiento desde el propósito de un paso manual, sin copiar el mecanismo del proceso actual.
- Triar un backlog de 28 ideas en IN, OUT y BLOCKED y justificar cada veredicto con evidencia.
- Definir aceptación y métricas con línea base antes de diseñar, incluyendo una consulta SQL sobre datos exportados del cliente.
- Priorizar combinando valor observable, reducción de riesgo, aprendizaje y dependencia.
- Negociar un OUT con el cliente dejando una condición de reapertura y un responsable.
4.6 Derivar requerimientos sin automatizar desperdicio
Una vez entendido el proceso aparece una tentación nueva: convertir cada paso manual en una función. Esa traducción uno a uno produce software que imita las limitaciones del proceso anterior. El trabajo correcto es volver a los objetivos, reglas y fricciones, y preguntar qué resultado debe garantizar el sistema y qué decisiones deben permanecer humanas.
Por ejemplo, "imprimir el pedido para llevarlo a depósito" no se convierte en RF-17 Imprimir pedido. Primero preguntamos qué propósito cumple. Si el papel hace visible una cola de preparación, el requisito puede ser que depósito reciba y priorice pedidos confirmados. El mecanismo futuro podría ser una vista, una impresora, una pantalla industrial o una integración. El requisito conserva el objetivo sin congelar una solución.
Un mismo paso del proceso, traducido de dos maneras
RF-17: el sistema debe imprimir el pedido.
Hereda el mecanismo. Si mañana depósito prefiere una pantalla, el requisito ya está mal y alguien tiene que explicar por qué se construyó una impresión.
El sistema entrega a depósito, en el momento en que un pedido queda confirmado, la lista de líneas a preparar con su prioridad, y permite saber quién la está trabajando.
El papel hoy cumple tres funciones (cola, prioridad, responsable). El requisito las nombra y deja abierto el mecanismo.
Una nota de vocabulario para toda la lección: "confirmado" como estado significa CONFIRMADO_COMERCIAL (el pedido pasó crédito). Para depósito "confirmado" quiere decir otra cosa; esa colisión se cierra en el modelo de estados.
Este ejercicio de preguntar "¿para qué?" se repite con cada paso de la reconstrucción AS-IS:
| Paso actual | Propósito real | Requerimiento orientado al propósito |
|---|---|---|
| El vendedor reescribe en el ERP los 23 códigos de la foto de WhatsApp. | Identificar productos válidos y vigentes. | El sistema acepta las líneas pedidas por SKU, aplica las equivalencias vigentes a la fecha del pedido y rechaza, antes de crear efectos, las líneas con SKU inexistente. |
| Laura abre la planilla de cheques y compara con el PDF de saldos. | Saber cuánto debe realmente el cliente antes de aprobar. | El sistema evalúa la exposición con la fuente de saldos vigente y devuelve aprobado, requiere autorización o rechazado según las RN. El tratamiento de cheques pendientes queda BLOCKED. |
| Alguien manda un audio por WhatsApp para autorizar. | Que una persona con autoridad acepte un riesgo y quede constancia. | El sistema registra quién autoriza, cuándo, con qué motivo y para qué pedido (NFR-02). Cómo se decide queda fuera: lo sigue decidiendo una persona. |
La tercera fila muestra un matiz importante: el software puede hacer visible una decisión humana sin inventar cómo debe tomarse.
También conviene separar requisito de política. "El sistema debe bloquear pedidos que exceden el límite" parece funcional, pero contiene una regla que quizás admita autorizaciones. Una formulación mejor describe la capacidad y referencia reglas trazables: el sistema debe evaluar la exposición de crédito y producir aprobado, requiere autorización o rechazado según RN-01 y RN-02. Cuando cambie la política comercial no hay que reescribir la intención del caso de uso.
4.7 Requisitos negativos y fuera de alcance
Definir lo que el sistema no hará evita una fuente enorme de retrabajo. Un fuera de alcance no es una lista de cosas olvidadas: es una decisión deliberada. En el primer release de Nexo podemos decidir que el sistema no gestione cuentas corrientes completas, no reemplace el ERP fiscal y no automatice sustituciones de productos sin aprobación. Esas exclusiones protegen el slice y hacen que la propuesta sea defendible.
BLOCKED es diferente de OUT. OUT significa que decidimos no incluirlo. BLOCKED significa que todavía no hay evidencia suficiente para decidir. Esta diferencia tiene que sobrevivir hasta el Sprint de Arquitectura. Si una política de reserva depende de un TTL desconocido (RN-07), no la escondemos dentro de una estimación: el diseño relacionado queda condicionado.
Nexo B2B · El backlog de 28 ideas
Después de la primera semana, el borrador comercial contiene veintiocho ideas: portal B2B, chatbot, carga por foto, stock en tiempo real, autorización automática de crédito, recomendaciones, dashboard, app de depósito, integración fiscal, notificaciones, seguimiento de transporte y varias más. La lista parece progreso, pero mezcla dolores, soluciones, apuestas y deseos.
Veintiocho ideas no son veintiocho requerimientos. Antes de decidir nada, el equipo hace lo único que escala: volver a la evidencia y preguntar qué problema sostiene cada ítem. Para eso primero hay que poder distinguir qué tipo de cosa es cada línea.
¿Dolor, solución, apuesta o deseo?
Clasificá cada línea del borrador comercial de Nexo.
Los pedidos vuelven del depósito porque el stock físico no coincide con el ERP.
Carga de pedidos por foto de la hoja.
Recomendaciones de productos con IA.
Que el cliente vea todo en el portal.
Los precios del ERP difieren de los acuerdos que viven en el Excel de precios especiales.
Portal B2B de autoservicio.
Con esa mirada, la tabla completa del borrador queda así. La última columna no es una votación: es el resultado de preguntarle a cada ítem qué evidencia lo sostiene, qué regla necesita y si alguien puede resolverlo.
| ID | Idea | Qué la sostiene o qué le falta | Estado |
|---|---|---|---|
| F01 | Portal B2B de autoservicio | Idea paraguas. Se descompone en F02 a F05 (IN, que en este release usan los vendedores) y en F19, F22 y F23 (OUT). | Se divide |
| F02 | Catálogo con búsqueda por SKU y descripción | 37 de los 60 pedidos de la muestra tuvieron corrección de SKU. En el pedido 48231, siete minutos para identificar los códigos de un audio. | IN |
| F03 | Identificación del cliente y su cartera | Precio y crédito se resuelven por cliente: la planilla de acuerdos se filtra por CUIT y la exposición se calcula por cliente. Sostiene NFR-03. | IN |
| F04 | Armado y envío del pedido (carrito) | Recarga manual de 23 códigos en el pedido 48172. | IN |
| F05 | Precio autoritativo por línea | 14 de 60 pedidos revisaron un acuerdo de precio (EV-04). Sostiene RN-03. | IN |
| F06 | Evaluación de crédito estándar | RN-01 confirmada (autoridad: Laura); la definición de exposición sigue abierta (U-01). 9 de 60 pedidos pidieron autorización. | IN |
| F07 | Autorización de excepción registrada | EV-03 y audios sin constancia. Sostiene NFR-02. | IN |
| F08 | Reserva por depósito sin sobreventa (antes "stock en tiempo real") | EV-05 y RN-05. Dos vendedores pueden prometer la misma unidad. | IN |
| F09 | Estado del pedido visible y trazable | Pedidos que parecen confirmados mientras el crédito sigue abierto. | IN |
| F10 | Entrega a preparación, con marca de pendiente de facturación | Depósito necesita recibir solo pedidos confirmados. La emisión fiscal queda para después. | IN |
| F11 | Equivalencias de SKU vigentes por fecha | EV-02 (A-184 a A-184B desde 2026-05-01). RN-04 a validar. | IN |
| F12 | Recomendaciones de productos con IA | Sin problema priorizado ni métrica de venta cruzada. | OUT |
| F13 | Chatbot que toma pedidos por WhatsApp | Los pedidos no fallan por el canal sino por validaciones posteriores. | OUT |
| F14 | Carga de pedido por foto | Ataca la captura, que no es el mayor tiempo. Queda como experimento futuro. | OUT |
| F15 | Dashboard y reportes avanzados | Sin decisión concreta que lo necesite todavía. Las métricas del release se miden con consultas. | OUT |
| F16 | App móvil de depósito | El mecanismo de recepción se decide después de validar qué necesita el picker. | OUT |
| F17 | Facturación electrónica (emisión de comprobante) | Integración posterior con un proveedor externo. El pedido queda marcado pendiente de facturación. | OUT |
| F18 | Seguimiento de transporte | Depende de la entrega al transportista, que el release no cubre. | OUT |
| F19 | Notificaciones al cliente | El estado visible (F09) cubre la necesidad inicial. Los avisos activos se suman después. | OUT |
| F20 | Optimización de rutas de entrega | Ningún episodio de discovery pasa por la logística de reparto. | OUT |
| F21 | Reemplazo completo del ERP | El ERP sigue siendo maestro de productos, clientes y listas en la etapa 1. | OUT |
| F22 | Historial de pedidos y reorden | Valioso pero no reduce el riesgo central. Se puede sumar sin tocar la confirmación. | OUT |
| F23 | Cuenta corriente completa para el cliente | Subdominio entero (saldos, comprobantes, notas de crédito, conciliación). El release solo lee la exposición para decidir. | OUT |
| F24 | Sustitución automática de productos | Falta una matriz de marca, compatibilidad y preferencia. Lo resuelve depósito con comercial. | BLOCKED |
| F25 | Reserva con expiración automática (TTL, RN-07) | Nadie sabe cuánto debe esperar una reserva sin autorización. Se mide en la primera semana. | BLOCKED |
| F26 | Autorización automática para clientes PLATINO (RN-02) | La tolerancia no está definida. La decide dirección con administración. | BLOCKED |
| F27 | Cheques pendientes dentro de la exposición de crédito | La fuente ("comprometido") se actualiza una vez por día, a mano. Falta fuente confiable. | BLOCKED |
| F28 | Devoluciones complejas | Faltan políticas y volumen. No debe contaminar el primer slice. | BLOCKED |
El resultado: diez ítems IN, doce OUT, cinco BLOCKED y uno que se disuelve. El portal no desapareció; se descompuso en lo que de verdad sostiene la evidencia. En este release esas capacidades (F02 a F05) las usan los vendedores, que son quienes hoy arman y confirman cada pedido; el portal para clientes sigue fuera, como ya lo dejaba el slice candidato del módulo 1, y se apoya después sobre las mismas capacidades. El chatbot pierde prioridad porque los pedidos no fallan principalmente por el canal. En la ronda de observación de la primera semana, doce de quince pedidos seguidos de punta a punta consumieron tiempo en validaciones posteriores a la captura; solo dos tuvieron problemas de interpretación del mensaje. Carga por foto queda como experimento futuro porque el mayor tiempo está en decidir precio, crédito y stock.
Nexo B2B · El primer corte de alcance se rompe
Después del playback, Marta, la dueña, insiste en que "el primer release tiene que incluir cuenta corriente para que el cliente vea todo". El equipo pregunta qué significa "todo". Aparecen saldos, comprobantes, cheques pendientes, notas de crédito, vencimientos, reclamos y conciliación. La frase agrega un subdominio entero que no era necesario para confirmar un pedido.
La respuesta profesional no es decir que no porque complica el desarrollo. Es explicar el costo de acoplar dos objetivos. El slice inicial necesita una lectura de la exposición de crédito para decidir un pedido, sin convertir el producto en un sistema completo de cuentas corrientes. Mostrar un saldo resumido podría ser una capacidad posterior o una integración de solo lectura.
Probá esta conversación. No hay una única salida buena: cada elección abre un camino con consecuencias distintas.
La cuenta corriente completa
Reunión de playback con Marta, la dueña de Nexo. Ya validaron el alcance en una primera pasada. Tenés veinte minutos y el equipo espera que salgas con un acuerdo sobre el primer release.
Marta (dueña)
Está bien lo del pedido, pero el primer release tiene que incluir cuenta corriente para que el cliente vea todo. Si no, no sirve.
¿Qué respondés?
Al mismo tiempo, Sergio, de depósito, pide que el sistema sugiera sustitutos automáticamente cuando falta stock. En observación vimos que las sustituciones dependen de marca, compatibilidad y preferencia del cliente, y que no existe una matriz confiable. Esa funcionalidad queda BLOCKED (F24), no porque sea mala idea, sino porque la empresa todavía no posee el conocimiento estructurado para automatizarla con seguridad.
Dejar la decisión por escrito
Las dos conversaciones terminan en un registro corto, no en un recuerdo. Este es el formato que usa el equipo:
## DEC-04-01 · Cuenta corriente completa queda OUT del release 1
**Contexto.** Marta pidió "cuenta corriente para que el cliente vea todo" (reunión de playback).
Al desglosar aparecen siete capacidades (saldos, comprobantes, cheques, notas de crédito,
vencimientos, reclamos, conciliación). El release necesita solo una: leer la exposición
de crédito para decidir un pedido (RN-01).
**Alternativas consideradas.**
- A. Incluir la cuenta corriente completa. Descartada: agrega un subdominio entero y
depende de cheques pendientes, que están BLOCKED (F27).
- B. Mostrar al cliente un saldo resumido de solo lectura. Descartada por ahora:
sin una fuente confiable de "comprometido", el número que se muestre puede ser incorrecto.
- C. OUT con lectura interna de exposición. Elegida.
**Decisión.** C. La lectura de exposición entra en F06. La vista al cliente es F23, OUT.
**Reabrir cuando** exista evidencia de reclamos de clientes por falta de comprobantes
y una fuente confiable de saldos. Responsable de reabrir: Marta.
El valor de este registro está en la sección de alternativas: cuando alguien pregunte en tres meses "¿por qué no mostramos el saldo?", la respuesta ya está escrita y con sus razones.
4.8 Aceptación y métricas antes del diseño
Un requerimiento útil permite imaginar cómo demostrarlo. "Agilizar pedidos" no puede probarse. "Para pedidos válidos de hasta 50 líneas, el vendedor no debe recargar manualmente SKU ya identificados por el cliente" sí puede observarse. No toda métrica es de performance técnica: puede ser tiempo de ciclo, cantidad de dobles cargas, errores de precio, pedidos que requieren intervención o porcentaje de excepciones.
Lo que se mide antes de construir es la línea base. Sin ella, cualquier mejora posterior es una opinión. En Nexo, Sistemas exportó del ERP los estados reales de los pedidos de las últimas semanas (la tabla erp_pedido_estados de la lección 2.2), y con esa exportación se puede aproximar el tiempo que hoy tarda un pedido en llegar a una decisión. Ojo: la consulta trabaja con los estados del ERP legacy, no con los del sistema futuro.
-- Línea base: minutos entre el ingreso al ERP y la primera aprobación.
-- Fuente: exportación de Sistemas (lección 2.2):
-- erp_pedido_estados(pedido, estado, cambiado_en, usuario)
-- Estados del ERP legacy: INGRESADO, EN_REVISION, APROBADO, IMPRESO,
-- MODIFICADO, PREPARADO, FACTURADO, DESPACHADO.
-- El ERP no tiene "pendiente de autorización" ni "rechazado": APROBADO es la
-- única decisión que la exportación permite fechar.
with hitos as (
select pedido,
min(cambiado_en) filter (where estado = 'INGRESADO') as ingresado_en,
min(cambiado_en) filter (where estado = 'APROBADO') as aprobado_en
from erp_pedido_estados
group by pedido
)
select
count(*) as pedidos,
round(avg(m.minutos)::numeric, 1) as promedio_min,
round(percentile_cont(0.5) within group (order by m.minutos)::numeric, 1) as p50_min,
round(percentile_cont(0.9) within group (order by m.minutos)::numeric, 1) as p90_min
from hitos h
cross join lateral (
select extract(epoch from (h.aprobado_en - h.ingresado_en)) / 60 as minutos
) m
where h.ingresado_en >= current_date - interval '28 days'
and h.aprobado_en is not null;
La otra métrica candidata, cuántos pedidos necesitaron intervención posterior a la captura, no sale del ERP: el ERP no registra por qué se tocó un pedido (a lo sumo, que pasó a MODIFICADO). Los tipos de intervención los anotó el equipo en la muestra observada de 60 pedidos (lección 3.2), y la segunda consulta corre sobre esa muestra, cargada a mano en dos tablas:
-- % de pedidos con al menos una intervención posterior a la captura.
-- Fuente: muestra observada de 60 pedidos (lección 3.2), cargada a mano en
-- muestra_pedido(pedido) y muestra_intervencion(pedido, tipo).
-- Estos tipos NO salen del ERP: la exportación solo registra estados.
select
count(*) as pedidos,
count(*) filter (where exists (
select 1 from muestra_intervencion i
where i.pedido = p.pedido
and i.tipo in ('CORRECCION_SKU', 'REVISION_PRECIO',
'AUTORIZACION_CREDITO', 'DIFERENCIA_FISICA')
)) as con_intervencion,
round(100.0 * count(*) filter (where exists (
select 1 from muestra_intervencion i
where i.pedido = p.pedido
and i.tipo in ('CORRECCION_SKU', 'REVISION_PRECIO',
'AUTORIZACION_CREDITO', 'DIFERENCIA_FISICA')
)) / nullif(count(*), 0), 1) as porcentaje
from muestra_pedido p;
Antes de confiar en los números, leé sus límites. INGRESADO se registra cuando la vendedora carga el pedido, no cuando llega el mensaje por WhatsApp (en el 48172, la foto llegó a las 10:02 y el ERP marca INGRESADO a las 10:08); la exportación subestima el tiempo real. Además, cambiado_en es la hora en que alguien cargó el cambio, no la hora en que ocurrió, y los pedidos que nunca llegan a APROBADO quedan fuera del cálculo. Es una línea base conservadora, y por eso se complementa con observación directa, como en el pedido 48231 (de 08:47 a 09:51). El dato exportado dice cuánto pasa desde que el pedido está en el ERP, y no cuánto desde que el cliente lo mandó.
Con eso se puede armar una tabla de aceptación a nivel de objetivo:
| Objetivo | Métrica | Línea base | Cómo se mide |
|---|---|---|---|
| Decisión más rápida | Tiempo medio y p90 entre recepción y decisión observable | A medir con la consulta de arriba | Estados del ERP (de INGRESADO a APROBADO), ventana de 28 días, más observación directa |
| Menos ida y vuelta | % de pedidos con intervención posterior a la captura | A medir; 37 de 60 con corrección de SKU en la muestra | Segunda consulta, sobre la muestra observada |
| Precios correctos | Pedidos con precio corregido luego de confirmados | A medir | Notas de crédito por precio, con ayuda de administración |
| Sin promesa duplicada | Pedidos con faltante por unidades ya reservadas (carrera digital, como AX-442 en el 48172) | A medir, separando en la muestra los faltantes por carrera de los quiebres físicos | Faltantes que avisa depósito, con su causa (pizarra o estante) |
| Aparte: quiebre físico (métrica operativa, no mide la reserva) | Quiebres físicos detectados en picking | 6 de 60 con diferencia física | Registro de depósito |
Las dos últimas filas no se suman: la reserva evita la carrera digital, pero no arregla un estante que no coincide con el registro. Estas métricas se vuelven a usar al defender el valor frente al cliente, así que conviene elegirlas bien ahora.
4.9 Priorización: valor, riesgo y dependencia no son lo mismo
Después de delimitar alcance todavía queda decidir secuencia. Una funcionalidad puede tener alto valor pero depender de una regla no resuelta. Otra puede tener valor moderado y eliminar un riesgo arquitectónico temprano. Priorizar solamente por "lo que más pide el cliente" o por facilidad técnica produce roadmaps frágiles.
La heurística considera cuatro cosas: valor observable, reducción de riesgo, aprendizaje y dependencia. El primer slice de Nexo justifica resolver precio, crédito y reserva porque ahí se concentran las decisiones que determinan si un pedido puede confirmarse. Una pantalla de historial puede ser valiosa, pero no reduce ese riesgo central.
El portal completo ocupa el cuadrante incómodo: mucho valor visible pero poco riesgo reducido. Construirlo antes de definir precio y confirmación solo escala la ambigüedad. A veces el primer slice que conviene construir no es el más visible para el cliente, sino el que reduce un riesgo estructural y crea una base verificable para lo demás. Esa decisión tiene que poder explicarse en lenguaje de negocio.
4.10 Requisitos no funcionales que nacen de operación real
Los NFR no deben salir de una lista estándar. Disponibilidad importa distinto si los vendedores trabajan solo de 8 a 18 que si hubiera un portal 24/7. Performance depende de volumen y momento. Recuperación depende de cuánto dato puede perderse. Seguridad depende de qué acciones tienen impacto comercial o legal.
Para Nexo, la latencia se enfoca en búsqueda y confirmación durante horario comercial; la auditoría, en autorizaciones y cambios de precio; la disponibilidad, en la capacidad de registrar pedidos; la recuperación, en no perder pedidos confirmados. Si no podemos explicar el daño de incumplir un NFR, quizá no es prioritario.
Nexo B2B · La palabra "rápido" se convierte en escenario
Marta dice "el portal tiene que volar". En vez de prometer 100 ms, el equipo pregunta qué demora interrumpe el trabajo. Los vendedores muestran que esperan varios segundos al buscar un SKU, mientras que la confirmación puede tardar algo más si está haciendo validaciones. Se acuerda medir la búsqueda interactiva por separado de la confirmación transaccional.
Dos operaciones, dos tolerancias. Un vendedor que busca "tornillo 6 mm" y espera cuatro segundos pierde el hilo; uno que confirma un pedido de cincuenta líneas tolera medio segundo más si sabe que están corriendo validaciones. El escenario resultante para la confirmación es NFR-01 (p95 del registro de pedido menor a 800 ms con 30 usuarios concurrentes). Para la búsqueda queda el escenario y el umbral en blanco:
- id: NFR-05
quality: latencia
stimulus: "un vendedor busca un producto por SKU o descripción"
environment: "horario comercial, 30 usuarios concurrentes, catálogo completo (más de 8.000 productos)"
response: "el sistema devuelve coincidencias ordenadas"
measure: "p95 < [umbral por definir]"
status: "sin umbral: se mide en prototipo con búsquedas reales antes de comprometerlo"
why: "es la operación que más veces repite un vendedor en el día"
La especificación no inventa una cifra antes de medir. El 800 ms de NFR-01 es un umbral propuesto, marcado como tal; el de NFR-05 ni siquiera se propone todavía. Las dos decisiones son honestas con lo que se sabe.
Microtaller · Defender un OUT
Explicarle un OUT al cliente
Elegí una capacidad atractiva que dejarías fuera del primer release (por ejemplo F12 recomendaciones o F19 notificaciones). Escribí una explicación al cliente en menos de 120 palabras que incluya el valor que le reconocés, la razón de secuencia, la condición para retomarla y qué arquitectura preserva la opción futura.
4.11 Derivar requerimientos como una cadena de razonamiento
Un requerimiento defendible no aparece porque una persona pidió una pantalla. Aparece cuando podemos conectar una necesidad observable con un comportamiento y con una evidencia que permitirá verificarlo. La cadena es: problema o riesgo, objetivo, regla o restricción, comportamiento requerido, criterio de aceptación. Si falta un eslabón, el equipo corre el riesgo de implementar una preferencia sin saber qué problema resuelve.
Aplicada al caso más delicado, la reserva, la cadena se ve así. El pedido 48172 pedía tres unidades de AX-442. En CBA había ocho en el ERP, pero seis ya estaban reservadas (marcadas a mano en la pizarra de depósito) para pedidos impresos y todavía no preparados, que el ERP no descontaba: quedaban dos vendibles, faltaba una unidad, y se descubrió recién en el picking a las 10:31. En el estante había ocho: no fue un error de conteo, sino una carrera digital. Ese episodio es la evidencia.
Fijate cómo cambió "stock en tiempo real". La propuesta inicial prometía exactitud física perfecta, algo que Nexo no puede garantizar. Reformulada como requisito verificable: al confirmar una reserva, el sistema debe preservar disponible >= 0 para la fuente autoritativa por depósito; si durante el picking se detecta un quiebre físico, debe registrar el evento y volver el pedido a un estado de resolución. La primera frase vendía una ilusión; la segunda expresa una garantía que el software sí puede defender.
"Automatizar crédito" también se divide. Para clientes dentro del límite con datos completos, el sistema puede decidir automáticamente (F06). Para excepciones, conserva una autorización humana registrada (F07). Los casos con cheques pendientes sin fuente confiable (F27) y la tolerancia PLATINO (F26) quedan BLOCKED. El resultado no es menos ambicioso: es una frontera que distingue automatización segura de automatización prematura.
Un ejemplo de cómo quedan esos requerimientos como artefacto, con trazabilidad y refutación:
# file: requirements/rf.yaml (fragmento del catálogo de Nexo)
- id: RF-03
text: >
Al armar un pedido, el sistema resuelve el precio de cada línea desde la
lista vigente y los acuerdos autorizados; ignora cualquier precio enviado
por el cliente.
rules: [RN-03]
sources: [EV-04]
objective: "precios-correctos"
refutation:
- "si el request incluye unitPrice distinto al autorizado, el pedido usa el autorizado"
- "un acuerdo vencido no se aplica a un pedido posterior a su vencimiento"
- id: RF-06
text: >
Al confirmar, el sistema reserva la cantidad pedida por depósito y SKU; si
el disponible no alcanza, no confirma y devuelve los faltantes.
rules: [RN-05]
sources: [EV-05]
objective: "sin-promesa-duplicada"
refutation:
- "con una unidad disponible y dos confirmaciones simultáneas, exactamente una reserva"
- "el disponible final nunca es negativo"
Estos dos están a propósito incompletos como catálogo: el resto lo construís vos en la práctica. Pero ya muestran el patrón: cada uno cita una regla y una evidencia, y trae su refutación.
Cuando una regla todavía está abierta, el requerimiento dependiente puede quedar BLOCKED sin bloquear el proyecto entero. Podemos diseñar la búsqueda de catálogo mientras la política de crédito sigue abierta, pero no aprobamos el flujo de confirmación si ese cálculo define si un pedido existe o queda pendiente. La incertidumbre se localiza, no se derrama.
Qué puede hacer el agente: comparar el catálogo de requerimientos contra las evidencias, detectar frases no trazadas, duplicados y contradicciones, y señalar qué RF parecen decisiones de diseño disfrazadas o qué criterios no son refutables.
Qué no debe decidir: el orden final del backlog (requiere valor, riesgo, presupuesto y autoridad humana), qué queda OUT por parecer complejo, ni valores de reglas BLOCKED.
Contexto mínimo útil: la tabla de 28 ideas con su veredicto, los EV, las RN con su estado, el glosario y los desconocidos, y los objetivos con su métrica.
Cómo verificar: cada observación aceptada debe citar un ID que exista en tu catálogo y poder explicarse en una frase propia.
Revisá la frontera de Nexo (adjunta) contra las evidencias EV-01 a EV-08, las
reglas RN-01 a RN-07 con su estado, el glosario y los desconocidos de E03 (adjuntos).
Para cada ítem IN devolvé: (a) la evidencia que lo sostiene, (b) si falta alguna
regla confirmada, (c) un caso que lo refute.
Para cada ítem OUT devolvé qué evidencia haría falta para reabrirlo.
Marcá cualquier IN que dependa de una regla BLOCKED y cualquier RF que mencione
un componente de interfaz.
No propongas valores para RN-02 ni RN-07. No agregues ítems nuevos.
Si no encontrás evidencia para un ítem, escribí "sin evidencia".
La respuesta típica de un agente marca como "sin evidencia" justamente los ítems que más te cuesta soltar. Es una pista útil, no un veredicto: volvé a tu cuaderno de campo y fijate si la evidencia existe y no la citaste, o si de verdad no existe.
Nexo B2B · El backlog se reduce mientras aumenta el conocimiento
Cuando Marta pregunta por qué la primera versión ya no incluye chatbot ni dashboard, el equipo muestra la cadena de evidencia: doce de quince pedidos observados consumieron tiempo en validaciones posteriores a la captura; solo dos tuvieron problemas de interpretación del mensaje. La prioridad se conecta con episodios, no con una preferencia técnica. Nexo acepta concentrar el primer release en una confirmación confiable para los vendedores; el autoservicio del cliente se construye después sobre esa base.
La frontera resultante, ya con motivo y condición de reapertura en cada decisión:
release: nexo-release-1
objective: "Reducir el tiempo entre recepción de un pedido y una decisión observable."
in:
- "F02 Catálogo con búsqueda"
- "F03 Identificación de cliente y cartera"
- "F04 Armado y envío del pedido"
- "F05 Precio autoritativo"
- "F06 Crédito estándar"
- "F07 Autorización de excepción registrada"
- "F08 Reserva por depósito"
- "F09 Estado del pedido visible"
- "F10 Entrega a preparación (marca pendiente de facturación)"
- "F11 Equivalencias de SKU vigentes"
out:
- { item: "F12 Recomendaciones", reopen_when: "existe una métrica de venta cruzada con línea base" }
- { item: "F13 Chatbot de WhatsApp", reopen_when: "la medición muestra que el canal de entrada es el cuello de botella" }
- { item: "F23 Cuenta corriente completa", reopen_when: "hay reclamos de clientes por falta de comprobantes y fuente de saldos confiable", owner: "Marta" }
blocked:
- { item: "F24 Sustitución automática", missing: "matriz de marca, compatibilidad y preferencia", needed_from: "Sergio y comercial" }
- { item: "F25 Reserva expirable (RN-07)", missing: "TTL aceptable", needed_from: "depósito y comercial", resolves_by: "medición de la primera semana" }
- { item: "F26 Autorización automática PLATINO (RN-02)", missing: "tolerancia", needed_from: "dirección y administración" }
- { item: "F27 Cheques pendientes", missing: "fuente confiable de 'comprometido'", needed_from: "administración (Laura)" }
- { item: "F28 Devoluciones complejas", missing: "políticas y volumen", needed_from: "comercial" }
Esa reducción mejora todo lo que viene después. Los casos de uso tienen menos objetivos mezclados, el modelo de dominio necesita menos entidades especulativas, la arquitectura puede concentrarse en consistencia e integraciones existentes y el plan de pruebas se alinea con riesgos reales. Un buen discovery no siempre produce más requerimientos. Muchas veces produce menos, pero mucho mejores.
Comprobá tu criterio
La expiración de reservas afecta la solución, pero nadie confirmó la política. ¿Dónde la ubicás?
Errores frecuentes
| Síntoma | Causa | Corrección |
|---|---|---|
| El catálogo de RF tiene una función por cada paso manual observado. | Se tradujo el proceso en lugar de su propósito. | Para cada paso preguntar "¿para qué existe?" y escribir el requisito sobre el propósito. |
| El cliente reabre un OUT cada semana. | El OUT se comunicó sin condición de reapertura ni responsable. | Registrar motivo, evidencia que lo reabriría y quién la trae. |
| Un BLOCKED aparece dentro de la estimación del IN. | Se asumió un valor para no frenar el diseño. | Dejar el valor como parámetro, marcar la dependencia y no estimar encima de él. |
| La línea base sale mucho mejor que lo que cuentan los vendedores. | El timestamp de recepción lo pone quien carga el pedido, no quien lo recibe. | Declarar el sesgo, completar con observación directa y no prometer mejoras sobre esa base. |
| La priorización sigue el orden en que el cliente pidió las cosas. | Se evaluó solo valor visible. | Sumar reducción de riesgo, aprendizaje y dependencia, y explicarlo en lenguaje de negocio. |
| "Automatizar crédito" aparece como un solo ítem IN. | No se separó lo decidible (estándar) de lo abierto (PLATINO, cheques). | Dividir en ítems con estados distintos y referenciar la RN de cada uno. |
Para llevarte
- Traducir cada paso manual en una función hereda el desperdicio; preguntá para qué existe el paso y escribí el propósito.
- Un backlog de 28 ideas se reduce con evidencia: diferenciá dolores, soluciones, apuestas y deseos, y descomponé las ideas paraguas.
- Cada OUT necesita un motivo y una condición de reapertura con responsable; cada BLOCKED, qué falta, quién resuelve y cuándo.
- Medí la línea base antes de diseñar y declará los sesgos de la fuente: sin ella no vas a poder demostrar mejora.
- Priorizá combinando valor visible, reducción de riesgo, aprendizaje y dependencia; lo más visible no siempre va primero.
- Registrá las decisiones de alcance con sus alternativas descartadas: el "por qué no" es lo que se pierde primero.
¿Cómo valoras el contenido técnico de esta lección?
Tu feedback nos ayuda a mejorar los laboratorios prácticos de Eje Z.