Módulo 7: Strategy To Roadmap

Decir que NO a nivel estratégico

Descripción

product-thinking-for-engineers-guide (módulo 7) ya te enseñó a decir que no tácticamente: cuando la capacidad del trimestre se acaba, hay que cortar el backlog en algún punto, y esa lección enseñó a hacerlo con costo de oportunidad, no con quien grita más fuerte. Esta lección enseña un NO distinto y anterior: el que se dice antes de que la capacidad sea siquiera el problema, porque la apuesta —sin importar cuánta capacidad sobre— no pertenece al juego que la estrategia eligió jugar. Son dos conversaciones diferentes, y confundirlas es uno de los errores más costosos de comunicar mal una decisión correcta.

Conexión con el módulo. Las lecciones 3, 4 y 5 construyeron el criterio y lo aplicaron al backlog completo de Mercado. Esta lección se queda con las tres apuestas que ese criterio rechazó —lowestPriceMatch, fasterCheckout, improvedSearch— y pregunta algo que el código nunca respondió: ¿cómo le explicas a un equipo real por qué "no" es la respuesta correcta, cuando dos de esas tres apuestas tenían el mejor RICE de todo el backlog?

Una analogía cotidiana: la carta de rechazo de la revista con línea editorial

Una revista con una línea editorial clara —digamos, una revista especializada en ciencia para público general— recibe, todo el tiempo, artículos bien escritos, bien investigados, con temas que sin duda interesarían a mucha gente, pero que simplemente no encajan en esa línea: una columna de opinión política, una reseña de un restaurante, una crónica deportiva. Un buen editor no responde "no tenemos espacio este mes" cuando la verdad es "esto no es lo que publicamos" — esa excusa, aunque más cómoda de decir, deja al autor pensando que puede volver a intentarlo el mes siguiente, y deja a todo el equipo editorial sin un criterio claro para la próxima decisión parecida. El editor que responde bien dice, con precisión: "este artículo está bien escrito, pero no encaja en nuestra línea editorial, que es X" — una razón específica, no una excusa de conveniencia.

Decir que no a nivel estratégico es exactamente esa carta de rechazo bien escrita. La apuesta puede ser objetivamente buena —como fasterCheckout, con el segundo mejor RICE del backlog— y aun así no encajar en la línea editorial de Mercado. La diferencia entre un buen NO y uno malo no está en si se dice o no —eso ya lo decidió el filtro—, está en si la razón que acompaña al NO es la razón real, o una excusa más fácil de digerir en el momento.

Ejemplo trabajado: el memo del NO, con la razón exacta de cada rechazo

Extendemos strategicFilter con una función pequeña, noReason, que convierte el resultado del filtro en la frase exacta que explica por qué una apuesta rechazada no entra al roadmap — distinguiendo, con precisión, entre "compite en algo que rechazamos" y "no refuerza nada de lo que elegimos".

function riceScore({ reach, impact, confidence, effort }) {
  return (reach * impact * confidence) / effort;
}

function strategicFilter(backlog, strategy) {
  return backlog.map((bet) => {
    const reinforces = bet.servesDimensions.filter((d) => strategy.winOn.includes(d));
    const conflicts = bet.servesDimensions.filter((d) => strategy.avoid.includes(d));
    return {
      feature: bet.feature,
      servesDimensions: bet.servesDimensions,
      reinforces,
      conflicts,
      inStrategy: reinforces.length > 0 && conflicts.length === 0,
      riceScore: Number(riceScore(bet.rice).toFixed(2)),
    };
  });
}

// Modelo pedagogico: convierte el resultado de strategicFilter en la razon
// escrita del NO -- distingue "compite en una dimension que rechazamos"
// (conflicts) de "no refuerza ninguna dimension en la que apostamos" (neutral).
function noReason(bet) {
  if (bet.conflicts.length > 0) {
    return 'compite en ' + bet.conflicts.join(', ') + ', la dimension que la estrategia decidio NO pelear';
  }
  return 'no refuerza ninguna dimension en la que la estrategia eligio ganar (' + bet.servesDimensions.join(', ') + ' queda fuera de winOn)';
}

const mercadoStrategy = { winOn: ['curatedDiscovery', 'sellerTrust'], avoid: ['price'] };

const backlog = [
  { feature: 'fasterCheckout', servesDimensions: ['convenience'], rice: { reach: 8000, impact: 2, confidence: 0.8, effort: 2 } },
  { feature: 'recommendations', servesDimensions: ['curatedDiscovery'], rice: { reach: 5000, impact: 1, confidence: 0.5, effort: 3 } },
  { feature: 'sellerTools', servesDimensions: ['sellerTrust'], rice: { reach: 1200, impact: 2, confidence: 0.8, effort: 2 } },
  { feature: 'reviews', servesDimensions: ['sellerTrust'], rice: { reach: 6000, impact: 0.5, confidence: 0.8, effort: 1 } },
  { feature: 'improvedSearch', servesDimensions: ['catalogBreadth'], rice: { reach: 9000, impact: 1, confidence: 0.5, effort: 3 } },
  { feature: 'lowestPriceMatch', servesDimensions: ['price'], rice: { reach: 9500, impact: 3, confidence: 0.8, effort: 3 } },
];

const filtered = strategicFilter(backlog, mercadoStrategy).sort((a, b) => b.riceScore - a.riceScore);
const rejected = filtered.filter((b) => !b.inStrategy);

console.log('=== El memo del NO: cada apuesta rechazada, con su razon exacta ===\n');
rejected.forEach((b) => {
  console.log('  ' + b.feature + ' (riceScore=' + b.riceScore + '): ' + noReason(b));
});

Qué esperar. Al correr el archivo con Node, la salida es exactamente esta:

=== El memo del NO: cada apuesta rechazada, con su razon exacta ===

  lowestPriceMatch (riceScore=7600): compite en price, la dimension que la estrategia decidio NO pelear
  fasterCheckout (riceScore=6400): no refuerza ninguna dimension en la que la estrategia eligio ganar (convenience queda fuera de winOn)
  improvedSearch (riceScore=1500): no refuerza ninguna dimension en la que la estrategia eligio ganar (catalogBreadth queda fuera de winOn)

Cada línea de este memo es una carta de rechazo bien escrita, no una excusa. lowestPriceMatch no se rechaza con un "no hay tiempo este trimestre" —se rechaza con la razón exacta: compite en la dimensión que Mercado decidió no pelear, y esa decisión está documentada desde el módulo 2—. fasterCheckout no se rechaza con "no es prioridad ahora" —se rechaza porque, con toda honestidad, no refuerza ninguna de las dimensiones donde Mercado eligió ganar—. La diferencia entre estas dos frases y un "ahora no" genérico es enorme para quien las recibe: un "ahora no" invita a volver a intentarlo el próximo trimestre con el mismo argumento; una razón estratégica explícita le dice a quien propuso la apuesta, con precisión, qué tendría que cambiar —no en el calendario, sino en la estrategia misma— para que esa apuesta algún día pertenezca.

Profundización: por qué "no hay tiempo" es la excusa más peligrosa

De las dos maneras de decir que no —"no encaja en la estrategia" o "no hay capacidad este trimestre"— la segunda parece más amable en el momento, pero es la más peligrosa a mediano plazo, y por una razón muy concreta: implica que la apuesta sí va a construirse, solo que después. Si lowestPriceMatch se rechaza con "no hay espacio en el trimestre", queda en el backlog, esperando el próximo ciclo de priorización, donde su riceScore de 7600 —el más alto de todos— la va a volver a poner arriba de la lista, sin que nadie recuerde, la segunda vez, por qué se rechazó la primera. La excusa de capacidad no cierra la conversación — la pospone, y la vuelve a abrir exactamente en el peor momento: cuando el filtro estratégico ya no está corriendo, solo el ranking de RICE.

Decir la razón estratégica real, en cambio, saca a la apuesta de la conversación de capacidad por completo. No es que lowestPriceMatch "perdió" contra otras apuestas por recursos limitados — es que nunca compitió por esos recursos, porque no pertenece al juego. Esa distinción, bien comunicada, evita el ciclo exacto que Melissa Perri describe en Escaping the Build Trap: equipos que revisan la misma apuesta popular trimestre tras trimestre, sin que nadie documente por qué se rechazó la vez anterior, gastando el mismo esfuerzo de evaluación una y otra vez.

Errores comunes

No decir que NO a la apuesta popular pero fuera de estrategia. Qué pasa: una apuesta con alto RICE y mucho entusiasmo dentro del equipo —como lowestPriceMatch o fasterCheckout— se deja "en revisión" indefinidamente, sin un rechazo explícito, porque decirle que no directamente a algo popular genera fricción incómoda. Por qué pasa: es socialmente más fácil dejar una decisión ambigua que comunicar un rechazo claro a algo que varias personas del equipo defienden con entusiasmo genuino y datos reales. Cómo detectarlo: si una apuesta rechazada por strategicFilter sigue apareciendo, trimestre tras trimestre, en la lista de "candidatos a evaluar" sin que nadie la haya cerrado formalmente, ese es el patrón exacto de este error. Cómo corregirlo: usa el memo de esta lección como plantilla —cada apuesta rechazada necesita una razón escrita y comunicada, no un silencio que se interpreta, con el tiempo, como "todavía no decidido".

Decir que no sin dar la razón estratégica, dejando que suene a capricho. Qué pasa: el rechazo se comunica sin ninguna razón explícita —"decidimos no hacer esto"— dejando que quien propuso la apuesta asuma que fue una decisión arbitraria, de gusto personal, o política interna. Por qué pasa: articular la razón estratégica completa exige más esfuerzo que simplemente comunicar el veredicto, y bajo presión de tiempo, el veredicto solo se siente suficiente. Cómo detectarlo: si alguien pregunta "¿por qué no?" después de un rechazo y la respuesta no incluye ninguna referencia a la estrategia —dimensiones de winOn, avoid, o la posición competitiva de Mercado—, el rechazo no fue comunicado, solo anunciado. Cómo corregirlo: adopta la misma estructura de noReason de esta lección en cualquier conversación real: nombra la dimensión específica en conflicto o la dimensión que no se refuerza, no un juicio genérico de "no es lo correcto para nosotros ahora".

Usar "no tenemos tiempo" cuando la razón real es "no pertenece". Qué pasa: por evitar la conversación estratégica —potencialmente más larga y más difícil de defender con datos duros— el equipo justifica el rechazo con la restricción de capacidad del trimestre, aunque la verdadera razón sea que la apuesta se cayó en el filtro estratégico, no en el corte por capacidad. Por qué pasa: la restricción de capacidad es un hecho objetivo y fácil de verificar (effort disponible menos effort comprometido), mientras que la pertenencia estratégica exige un juicio más cualitativo que alguien podría cuestionar. Cómo detectarlo: pregunta, para cualquier rechazo comunicado como "falta de tiempo", si esa apuesta habría pasado strategicFilter en primer lugar —si la respuesta es no, la razón real nunca fue la capacidad. Cómo corregirlo: separa siempre las dos conversaciones, como hace este módulo frente al módulo 7 de product-thinking-for-engineers-guide: primero, ¿pertenece a la estrategia? —si no, ahí termina la conversación, sin necesidad de hablar de capacidad—. Solo entre las que sí pertenecen tiene sentido discutir si hay tiempo para todas.

Ejercicios

Ejercicio 1 — Escribe el memo completo tú mismo. Usando noReason como plantilla, escribe la razón de rechazo, en una frase, para una apuesta hipotética socialSharingBadges con servesDimensions: ['convenience'], contra la estrategia de Mercado.

Ver solución

"socialSharingBadges no refuerza ninguna dimensión en la que la estrategia eligió ganar (convenience queda fuera de winOn)." Sigue exactamente el patrón de fasterCheckout y improvedSearch en el ejemplo de esta lección: no compite en price (no hay conflicts), pero tampoco aporta a curatedDiscovery ni a sellerTrust — es una apuesta neutral, razonable en abstracto, pero sin lugar en el roadmap de este trimestre según la estrategia vigente.

Ejercicio 2 — Distingue el NO estratégico del NO táctico. Un compañero rechaza sellerTools diciendo "no hay tiempo este trimestre, ya comprometimos toda la capacidad con reviews y recommendations". ¿Es este un rechazo estratégico o táctico? ¿Cambiaría la respuesta si en cambio hubiera dicho "esto no encaja con nuestra apuesta por confianza en el vendedor"?

Ver solución

El primer rechazo es táctico, no estratégico: sellerTools sí pasó strategicFilter (refuerza sellerTrust, sin conflictos) — el problema no es pertenencia, es capacidad limitada del trimestre, exactamente el tipo de decisión que product-thinking-for-engineers-guide (módulo 7) enseña a resolver con costo de oportunidad, no con este módulo. El segundo rechazo hipotético (que sellerTools "no encaja con confianza en el vendedor") sería falso y confuso, porque sellerTools justamente refuerza esa dimensión — mezclar las dos conversaciones aquí generaría una contradicción: rechazar una apuesta alegando que no sirve a la misma dimensión que sí sirve, en vez de decir honestamente que el motivo es capacidad, no pertenencia.

Ejercicio 3 — Redacta el memo para el equipo fundador. Usando los tres rechazos del ejemplo trabajado de esta lección, escribe un párrafo dirigido al equipo fundador de Mercado, explicando por qué el roadmap del trimestre no incluye lowestPriceMatch ni fasterCheckout, a pesar de tener los dos mejores riceScore de todo el backlog.

Ver solución

Un ejemplo de respuesta: "Nuestro backlog de este trimestre incluye seis apuestas candidatas. Dos de ellas —lowestPriceMatch y fasterCheckout— tienen, individualmente, el mejor rendimiento esperado por RICE de todo el conjunto. No las vamos a construir este trimestre, y la razón no es capacidad: es que ninguna de las dos pertenece a la estrategia que elegimos. lowestPriceMatch compite directamente en precio, la dimensión que decidimos explícitamente no pelear desde el módulo 2 de nuestra estrategia, porque ningún jugador de nuestro tamaño le gana en escala a un megastore genérico ahí. fasterCheckout, aunque no compite en nada que hayamos rechazado, tampoco refuerza el descubrimiento curado ni la confianza en el vendedor —las dos dimensiones donde sí elegimos apostar fuerte—. En su lugar, este trimestre construimos reviews, sellerTools y recommendations: tres apuestas con menor RICE individual, pero que juntas profundizan exactamente esas dos dimensiones, reforzando además los moats de red de vendedores y datos de compra que identificamos en el módulo 6. No es que ignoremos la eficiencia — es que la eficiencia, sola, no responde la pregunta de si estamos jugando el juego correcto."

Resumen y siguiente paso

Esta lección tomó las tres apuestas rechazadas por el filtro estratégico y les dio una razón explícita, escrita, distinta de un silencio incómodo o de una excusa de capacidad — noReason distinguió "compite en lo que rechazamos" (lowestPriceMatch) de "no refuerza lo que elegimos" (fasterCheckout, improvedSearch). Viste, además, por qué la excusa de "no hay tiempo" es la más peligrosa de las dos formas de decir que no: deja la puerta abierta a que la misma apuesta popular vuelva, sin memoria, en el próximo ciclo de priorización.

Antes de avanzar deberías poder: distinguir un rechazo estratégico de uno táctico en una conversación real, y escribir la razón exacta de cualquier rechazo sin recurrir a una excusa de capacidad cuando la verdadera razón es pertenencia.

La lección 7 cierra el círculo completo: toma las apuestas que pasaron el filtro y las conecta, explícitamente, con la maquinaria de RICE que ya conoces de product-thinking-for-engineers-guide — el puente exacto entre este módulo y el siguiente paso del roadmap.

Recursos

  • Melissa Perri, Escaping the Build Traporeilly.com/library/view/escaping-the-build/9781491973767. Perri documenta, con casos reales, el costo de los equipos que nunca cierran formalmente una idea rechazada — la misma idea vuelve, trimestre tras trimestre, consumiendo tiempo de evaluación sin que nadie recuerde por qué ya se descartó antes. En inglés.
  • Marty Cagan (Silicon Valley Product Group), "Product Strategy" — svpg.com/product-strategy-overview. Cagan argumenta que buena parte del valor de una estrategia de producto está, precisamente, en permitir decir que no con confianza a ideas objetivamente buenas — el argumento central de esta lección. En inglés.
  • Roger Martin, "Decoding the Strategy Choice Cascade" — rogermartin.medium.com/decoding-the-strategy-choice-cascade-475d40555eb1. Martin insiste en que las elecciones de la cascada deben ser explícitas y comunicables, no implícitas — un NO que nadie puede explicar con las palabras exactas de la estrategia no es, todavía, una elección real. En inglés.