Módulo 7: Strategy To Roadmap
Coherencia estratégica
Descripción
El filtro estratégico responde una pregunta binaria: ¿esta apuesta pertenece o no? Pero pasar el filtro, una por una, no garantiza que el conjunto de apuestas que pasaron forme algo coherente. Tres apuestas pueden pertenecer, cada una por separado, a la estrategia, y aun así no reforzarse entre sí — o, peor, competir por la misma atención del usuario sin sumar nada extra. Esta lección da un paso más allá del filtro individual: mide si las apuestas que sobrevivieron se apalancan unas en otras, o si simplemente comparten la casualidad de haber pasado la misma prueba.
Conexión con el módulo. Las lecciones 3 y 4 trabajaron apuesta por apuesta: ¿esta pasa? ¿por qué esta otra no? Esta lección mira, por primera vez, al conjunto completo de las que pasaron —reviews, sellerTools, recommendations— y pregunta si, juntas, construyen algo más grande que la suma de sus partes, o si son tres iniciativas sueltas que casualmente no chocaron con avoid.
Una analogía cotidiana: el menú que se complementa, no cincuenta platos sueltos
Un buen restaurante no tiene un menú de cincuenta platos elegidos al azar, cada uno bueno por separado. Tiene un menú donde el vino de la casa combina con el plato principal, el entrante prepara el paladar para lo que viene después, y el postre cierra la comida en el mismo registro donde empezó — un menú coherente, donde cada elección refuerza a las demás, aunque individualmente cada plato también sería aceptable servido solo. Un restaurante con cincuenta platos sueltos, cada uno "bueno" en aislamiento pero sin ninguna relación entre sí, no se siente como una experiencia diseñada — se siente como una lista de posibilidades sin ningún criterio detrás.
La coherencia estratégica es exactamente esa diferencia. Que cada apuesta individual pase el filtro estratégico (que "sea un buen plato") no basta — la pregunta que esta lección enseña a hacer es si, juntas, las apuestas aprobadas construyen una comida completa alrededor de las mismas dos o tres dimensiones donde la estrategia decidió apostar fuerte, o si simplemente comparten la casualidad de no haber sido rechazadas.
Ejemplo trabajado: dónde se concentran las apuestas que pasaron el filtro
Extendemos strategicFilter con un reporte pequeño, coherenceReport, que cuenta cuántas de las apuestas aprobadas refuerzan cada dimensión de winOn. Si esas apuestas se concentran en las mismas pocas dimensiones, hay coherencia. Si se dispersan sin ningún patrón, no la hay.
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: cuenta cuantas apuestas APROBADAS refuerzan cada
// dimension de strategy.winOn. Coherencia = las apuestas se concentran en
// las mismas pocas dimensiones, no se dispersan en dimensiones sin relacion.
function coherenceReport(filteredResults, strategy) {
const passed = filteredResults.filter((b) => b.inStrategy);
const coverage = {};
strategy.winOn.forEach((d) => { coverage[d] = []; });
passed.forEach((b) => b.reinforces.forEach((d) => coverage[d].push(b.feature)));
return coverage;
}
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);
const coverage = coherenceReport(filtered, mercadoStrategy);
console.log('=== Cobertura: que apuestas APROBADAS refuerzan cada dimension de la estrategia ===\n');
for (const dim of Object.keys(coverage)) {
console.log(' ' + dim + ' (' + coverage[dim].length + '): ' + (coverage[dim].join(', ') || '(ninguna)'));
}
const rejected = filtered.filter((b) => !b.inStrategy);
console.log('\n=== Las que se cayeron, y a que dimension (sin relacion entre si) pertenecen ===\n');
rejected.forEach((b) => console.log(' ' + b.feature + ' -> ' + b.servesDimensions.join(', ')));
Qué esperar. Al correr el archivo con Node, la salida es exactamente esta:
=== Cobertura: que apuestas APROBADAS refuerzan cada dimension de la estrategia ===
curatedDiscovery (1): recommendations
sellerTrust (2): sellerTools, reviews
=== Las que se cayeron, y a que dimension (sin relacion entre si) pertenecen ===
fasterCheckout -> convenience
improvedSearch -> catalogBreadth
lowestPriceMatch -> price
Ahí está la coherencia, medida y no solo intuida. Las tres apuestas aprobadas —recommendations, sellerTools, reviews— se concentran en exactamente las dos dimensiones de winOn: una refuerza curatedDiscovery, dos refuerzan sellerTrust. No hay ninguna dimensión aprobada que quede sin apuesta, ni ninguna apuesta que caiga en un tercer lugar disperso — el conjunto entero converge. Compara eso con las tres apuestas rechazadas: convenience, catalogBreadth y price no tienen ninguna relación entre sí — son tres dimensiones distintas, sin ningún hilo conductor, cada una empujando en una dirección diferente. Ese contraste —convergencia contra dispersión— es, en una palabra, la diferencia entre un roadmap coherente y un roadmap que es solo una lista de features que, individualmente, no le hacen daño a nadie.
Fíjate, además, en algo que conecta directamente con el módulo 6: sellerTools y reviews, las dos apuestas que refuerzan sellerTrust, no solo cumplen el filtro — profundizan, cada una a su manera, exactamente los moats que identificaste ahí: la red de vendedores (sellerTools la fortalece directamente) y los datos de compra (reviews genera una señal de confianza que se acumula con cada transacción). La coherencia estratégica no es solo una propiedad estética del roadmap — es, con frecuencia, el mecanismo concreto por el cual un conjunto de apuestas construye un moat que ninguna apuesta suelta podría construir por sí sola.
Profundización: coherencia no es lo mismo que "muchas apuestas aprobadas"
Es tentador medir coherencia por cantidad: "aprobamos tres de seis apuestas, eso es coherencia". No lo es — es solo el resultado del filtro de la lección 3, aplicado apuesta por apuesta. La coherencia real está en la distribución de esas apuestas aprobadas sobre las dimensiones de winOn, no en su cantidad total. Un backlog hipotético donde tres apuestas aprobadas refuerzan, cada una, una dimensión distinta de un winOn de tres dimensiones tendría el mismo número de aprobadas que el backlog de Mercado (tres), y sin embargo sería menos coherente: cada dimensión tendría exactamente una apuesta detrás, ninguna estaría reforzada por más de un ángulo, y perder cualquiera de las tres dejaría esa dimensión completamente sin respaldo.
El patrón de Mercado —una apuesta en curatedDiscovery, dos en sellerTrust— no es perfectamente simétrico, y esa asimetría es información real: le está diciendo al equipo, con datos, que su apuesta más fuerte del trimestre está concentrada en la confianza del vendedor, y que el descubrimiento curado, aunque también reforzado, tiene menos respaldo relativo dentro de este backlog específico. Esa es exactamente la clase de lectura que un coherenceReport bien construido debería permitir: no solo "¿pasó o no pasó?", sino "¿dónde estamos invirtiendo de verdad, y dónde nos falta profundidad?".
Errores comunes
Apuestas que se canibalizan en vez de reforzarse. Qué pasa: dos apuestas aprobadas por el filtro terminan compitiendo por la misma atención o el mismo espacio del usuario en vez de sumar — por ejemplo, dos features distintas que intentan resolver el mismo momento del recorrido de compra, de formas que se pisan entre sí en vez de complementarse. Por qué pasa: el filtro estratégico, tal como está construido, verifica que cada apuesta refuerce una dimensión de winOn — pero no verifica si dos apuestas aprobadas, al construirse juntas, terminan estorbándose una a la otra en la experiencia real del usuario. Cómo detectarlo: para cualquier par de apuestas aprobadas, pregunta "si un usuario usa ambas en la misma sesión, ¿la segunda añade algo que la primera no daba, o compite por la misma decisión?" — si la respuesta es "compite", hay canibalización, no refuerzo. Cómo corregirlo: usa el coherenceReport de esta lección como punto de partida, no como veredicto final — la concentración en las mismas dimensiones es una condición necesaria para la coherencia, pero verificar que las apuestas se complementen en la experiencia concreta del usuario exige, además, el mismo criterio cualitativo con el que revisaste diferenciación real contra paridad en el módulo 4.
Confundir cantidad de apuestas aprobadas con coherencia real. Qué pasa: el equipo celebra que "la mitad del backlog pasó el filtro" como si el número por sí solo demostrara una estrategia coherente, sin mirar en qué dimensiones se concentraron esas apuestas aprobadas. Por qué pasa: un ratio de aprobación —"3 de 6"— es un número fácil de comunicar y se siente como una métrica de éxito, mientras que examinar la distribución exacta por dimensión exige un paso adicional que muchos equipos se saltan. Cómo detectarlo: si tu equipo reporta "aprobamos X apuestas" sin poder decir, de memoria, cuántas refuerzan cada dimensión específica de winOn, probablemente están confundiendo cantidad con coherencia. Cómo corregirlo: reporta siempre la distribución completa, como en la tabla de esta lección —dimensión por dimensión, no solo el total—, y trata cualquier dimensión de winOn sin ninguna apuesta detrás como una señal de alarma, sin importar cuántas apuestas hayan pasado en total.
Construir un roadmap donde cada apuesta refuerza una dimensión distinta, sin ninguna que se apalanque en otra. Qué pasa: el equipo, buscando "cubrir todas las bases", distribuye deliberadamente sus apuestas aprobadas para que cada una toque una dimensión distinta de la estrategia, en vez de concentrar esfuerzo en profundizar la misma dimensión desde varios ángulos. Por qué pasa: cubrir todas las dimensiones se siente más "completo" y más defendible en una presentación que concentrar todo el esfuerzo en una sola — nadie puede acusar al equipo de "descuidar" ninguna parte de la estrategia. Cómo detectarlo: revisa si alguna dimensión de tu winOn tiene, sistemáticamente, cero o una sola apuesta detrás, trimestre tras trimestre, mientras el resto reparte el esfuerzo en partes iguales — esa distribución pareja rara vez construye la ventaja concentrada que viste en el módulo 3 (positionFit) que gana por más margen que una inversión repartida. Cómo corregirlo: recuerda el patrón del módulo 3: un producto "parejo, sin debilidades" ganaba con menos margen que uno concentrado en su fortaleza real — lo mismo aplica al roadmap. Está bien, y con frecuencia es lo correcto, que la mayoría de las apuestas de un trimestre se concentren en una sola dimensión, si esa es la dimensión donde más urge profundizar.
Ejercicios
Ejercicio 1 — Detecta la canibalización sin correr código. Dos apuestas aprobadas, ambas con servesDimensions: ['curatedDiscovery']: una es "recomendaciones basadas en compras anteriores" y la otra es "recomendaciones basadas en lo que compran usuarios similares". ¿Estas dos apuestas se refuerzan o se canibalizan? Justifica en una frase.
Ver solución
Depende del diseño concreto, pero el riesgo de canibalización es real: si ambas terminan mostrando, en la práctica, resultados casi idénticos al mismo usuario en el mismo momento (porque las compras anteriores de alguien y las compras de usuarios similares a menudo se superponen mucho), la segunda apuesta añade poco valor incremental sobre la primera, aunque las dos "pasen" el filtro con la misma etiqueta. Se refuerzan de verdad solo si están diseñadas para cubrir casos distintos —por ejemplo, la primera para compradores recurrentes con historial, la segunda específicamente para compradores nuevos sin historial propio, donde la señal de usuarios similares es la única disponible—. El ejercicio ilustra el límite exacto de strategicFilter: aprobar la misma dimensión dos veces no garantiza que las dos apuestas se complementen; hace falta revisar el diseño concreto.
Ejercicio 2 — Calcula la cobertura de un backlog hipotético. Un backlog alternativo tiene cuatro apuestas aprobadas: dos con servesDimensions: ['curatedDiscovery'], una con ['sellerTrust'], y una con ['curatedDiscovery', 'sellerTrust'] (refuerza ambas a la vez). Calcula la cobertura de cada dimensión con la lógica de coherenceReport.
Ver solución
curatedDiscovery tendría cobertura 3: las dos apuestas que solo refuerzan esa dimensión, más la cuarta apuesta que refuerza ambas (se cuenta en las dos). sellerTrust tendría cobertura 2: la apuesta que solo refuerza sellerTrust, más la misma cuarta apuesta. La cuarta apuesta —la que refuerza ambas dimensiones a la vez— es, en cierto sentido, la más valiosa desde la perspectiva de coherencia: no solo pertenece a la estrategia, sino que conecta las dos dimensiones ganadoras en una sola iniciativa, en vez de tratarlas como esfuerzos separados.
Ejercicio 3 — Presenta la cobertura a un stakeholder que pide "más variedad". Un stakeholder, al ver que dos de las tres apuestas aprobadas refuerzan sellerTrust y solo una refuerza curatedDiscovery, pide "más variedad" y sugiere agregar una apuesta que sirva catalogBreadth para "equilibrar el roadmap". Escribe, en un párrafo, cómo responderías usando el argumento de esta lección.
Ver solución
Un ejemplo de respuesta: "Entiendo el instinto de buscar variedad, pero 'equilibrado' no es el objetivo de un roadmap estratégico — coherente sí lo es, y no son lo mismo. Nuestras tres apuestas de este trimestre se concentran, a propósito, en las dos dimensiones donde elegimos ganar: descubrimiento curado y confianza en el vendedor. Agregar una apuesta en catalogBreadth no la equilibraría hacia algo mejor — la dispersaría hacia una tercera dimensión donde no elegimos competir, exactamente el mismo patrón que vimos con improvedSearch en la lección 4, que no pasó el filtro por esa misma razón. Preferimos dos apuestas profundizando sellerTrust desde ángulos distintos —herramientas para vendedores y reseñas de compradores— que tres apuestas dispersas en tres dimensiones sin relación entre sí. La variedad que suma es la que refuerza el mismo juego desde varios ángulos, no la que agrega juegos nuevos."
Resumen y siguiente paso
Esta lección fue más allá del filtro apuesta por apuesta y midió el conjunto completo: coherenceReport mostró que las tres apuestas aprobadas del backlog de Mercado se concentran exactamente en las dos dimensiones de winOn —una en curatedDiscovery, dos en sellerTrust—, mientras que las tres rechazadas se dispersan sin ninguna relación entre sí en convenience, catalogBreadth y price. Esa concentración, no la cantidad de apuestas aprobadas, es lo que separa un roadmap coherente de una simple lista de features individualmente aceptables.
Antes de avanzar deberías poder: distinguir "muchas apuestas pasaron el filtro" de "las apuestas que pasaron se refuerzan entre sí", y reconocer cuándo una demanda de "más variedad" en realidad está pidiendo dispersión, no coherencia.
La lección 6 toma el otro lado de la misma tabla —las tres apuestas que no pasaron el filtro— y enseña a comunicar ese NO con una razón explícita, en vez de dejarlo como un silencio incómodo en la próxima reunión de roadmap.
Recursos
- Roger Martin, "Decoding the Strategy Choice Cascade" — rogermartin.medium.com/decoding-the-strategy-choice-cascade-475d40555eb1. Martin insiste en que las cinco elecciones de la cascada deben ser mutuamente reforzantes —cada elección hace más fuertes a las demás—, no solo individualmente defendibles; el mismo criterio de coherencia de esta lección, aplicado a la estrategia completa. En inglés.
- Marty Cagan (Silicon Valley Product Group), "Product Strategy" — svpg.com/product-strategy-overview. Cagan describe una buena estrategia de producto como un conjunto de apuestas que se acumulan hacia el mismo resultado, no una colección de mejoras independientes entre sí. En inglés.
- Melissa Perri, Escaping the Build Trap — oreilly.com/library/view/escaping-the-build/9781491973767. Perri advierte contra los roadmaps que parecen productivos por su volumen de entregas, sin que nadie verifique si esas entregas se acumulan hacia una ventaja competitiva real o se dispersan sin dejar nada consolidado. En inglés.