Módulo 8: Project Define Mercados Strategy

Cómo ganar

Descripción

La tercera capa del one-pager responde la segunda elección de la cascada: ya que sabemos dónde jugamos, ¿qué nos hace ganar ahí, y frente a quién exactamente? Esta lección junta dos modelos de dos módulos distintos, porque "cómo ganar" siempre tiene dos mitades inseparables: la diferenciación real frente a los rivales de hoy (differentiationMap, módulo 4) y el panorama competitivo completo, incluidos los jugadores que todavía no estabas mirando (competitiveMap, módulo 5). Ninguna de las dos, por separado, responde "cómo ganamos" — la primera te dice qué ventaja tienes; la segunda te dice cuánto tiempo más ese terreno va a seguir siendo tuyo.

Conexión con el módulo. Esta lección reutiliza differentiationMap verbatim del módulo 4 y competitiveMap verbatim del módulo 5, sin cambios en ninguna fórmula ni en ningún dato. El resultado combinado llena la capa howToWin del one-pager, y es la última pieza que la lección 6 necesita para derivar winOn — la mitad más importante del filtro estratégico.

Una analogía cotidiana: el arma y el terreno donde se usa

"Cómo ganamos" en cualquier competencia real tiene siempre dos preguntas separadas, y confundirlas es un error caro. La primera es: ¿cuál es mi ventaja específica, comparada con mis rivales de hoy? La segunda es: ¿ese terreno de competencia va a seguir viéndose igual, o alguien nuevo está por entrar a jugar? Un ajedrecista que domina una apertura específica gana partidas hoy contra los rivales que conoce — pero si nunca revisa qué aperturas nuevas están estudiando los jugadores que todavía no ha enfrentado, puede llegar a un torneo con un arma que ya no sorprende a nadie.

Esta capa del one-pager junta exactamente esas dos preguntas: differentiationMap es el arma —qué ventaja específica tiene Mercado, verificada dimensión por dimensión—; competitiveMap es el terreno —quiénes más están jugando este juego, y hacia dónde se mueve el terreno mismo—. Ninguna estrategia de "cómo ganar" está completa si responde solo una de las dos.

Ejemplo trabajado: la diferenciación real, y el espacio que la sostiene

Primero, differentiationMap sobre las seis dimensiones y los dos competidores del módulo 4:

function differentiationMap(us, competitors, dimensions) {
  const REAL_DIFF_MARGIN = 2;
  return dimensions.map((dim) => {
    const usScore = us.scores[dim.key];
    const rivals = competitors.map((c) => ({ name: c.name, score: c.scores[dim.key] }));
    const best = rivals.reduce((a, b) => (b.score > a.score ? b : a));
    const gap = usScore - best.score;
    let verdict;
    if (gap >= REAL_DIFF_MARGIN) verdict = 'differentiation';
    else if (gap <= -REAL_DIFF_MARGIN) verdict = 'gap';
    else verdict = 'parity';
    return { dimension: dim.key, mattersToSegment: dim.matters, usScore, bestCompetitor: best.name, bestCompetitorScore: best.score, verdict };
  });
}

function competitiveMap(us, players, axes) {
  const [xAxis, yAxis] = axes;
  const place = (player) => {
    const xSide = player.scores[xAxis.key] >= xAxis.midpoint ? xAxis.high : xAxis.low;
    const ySide = player.scores[yAxis.key] >= yAxis.midpoint ? yAxis.high : yAxis.low;
    return `${ySide} / ${xSide}`;
  };
  const usQuadrant = place(us);
  const placed = players.map((p) => ({ name: p.name, type: p.type, quadrant: place(p), sharesQuadrantWithUs: place(p) === usQuadrant }));
  const openSpace = !placed.some((p) => p.sharesQuadrantWithUs);
  return { us: { name: us.name, quadrant: usQuadrant }, players: placed, openSpace };
}

// --- howToWin, mitad 1: differentiationMap (módulo 4) ---
const mercadoDiff = { name: 'Mercado', scores: { catalogBreadth: 3, price: 3, deliverySpeed: 4, curatedDiscovery: 5, localSellerTrust: 5, appAnimationPolish: 5 } };
const genericMegastoreDiff = { name: 'genericMegastore', scores: { catalogBreadth: 5, price: 5, deliverySpeed: 4, curatedDiscovery: 2, localSellerTrust: 2, appAnimationPolish: 2 } };
const neighborhoodShop = { name: 'neighborhoodShop', scores: { catalogBreadth: 1, price: 3, deliverySpeed: 2, curatedDiscovery: 3, localSellerTrust: 3, appAnimationPolish: 1 } };
const dimensions = [
  { key: 'catalogBreadth', matters: false },
  { key: 'price', matters: false },
  { key: 'deliverySpeed', matters: true },
  { key: 'curatedDiscovery', matters: true },
  { key: 'localSellerTrust', matters: true },
  { key: 'appAnimationPolish', matters: false },
];

console.log('=== howToWin: differentiationMap ===\n');
const howToWin = differentiationMap(mercadoDiff, [genericMegastoreDiff, neighborhoodShop], dimensions);
console.table(howToWin);
const realDiffs = howToWin.filter((r) => r.verdict === 'differentiation' && r.mattersToSegment);
console.log(`\nDiferenciación real: ${realDiffs.map((r) => r.dimension).join(', ')}`);

// --- howToWin, mitad 2: competitiveMap (módulo 5) ---
const axesDiscovery = [
  { key: 'breadth', label: 'catalog breadth', low: 'niche', high: 'broad', midpoint: 5 },
  { key: 'curation', label: 'curation depth', low: 'raw-search', high: 'curated', midpoint: 5 },
];
const us = { name: 'Mercado', scores: { breadth: 8, curation: 8 } };
const rosterToday = [
  { name: 'MegaStoreGenerico', type: 'direct', scores: { breadth: 9, curation: 2 } },
  { name: 'SuperTiendaExpress', type: 'direct', scores: { breadth: 6, curation: 3 } },
  { name: 'TiendasLocalesOnline', type: 'indirect', scores: { breadth: 3, curation: 4 } },
  { name: 'NicheHandmadeMarketplace', type: 'indirect', scores: { breadth: 3, curation: 8 } },
  { name: 'JustSearchOnGoogle', type: 'substitute', scores: { breadth: 10, curation: 1 } },
];

console.log('\n=== panorama competitivo: competitiveMap, HOY ===\n');
const today = competitiveMap(us, rosterToday, axesDiscovery);
console.table(today.players);
console.log(`openSpace hoy: ${today.openSpace}`);

// --- La propuesta de valor final, respaldada solo por diferenciacion real ---
const valueProp = {
  differentiators: realDiffs.map((r) => r.dimension),
  statement: 'Para compradores que exploran sin saber exactamente qué buscan, Mercado es el marketplace de descubrimiento curado que te conecta con vendedores locales verificados -- a diferencia del gigante genérico, que muestra de todo pero no ayuda a encontrar nada.',
};
console.log('\n=== howToWin, en una frase ===\n');
console.log(valueProp.statement);
console.log(`Pilares verificados: ${valueProp.differentiators.join(' + ')}.`);

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

=== howToWin: differentiationMap ===

┌─────────┬──────────────────────┬──────────────────┬─────────┬────────────────────┬─────────────────────┬───────────────────┐
│ (index) │      dimension       │ mattersToSegment │ usScore │   bestCompetitor   │ bestCompetitorScore │      verdict      │
├─────────┼──────────────────────┼──────────────────┼─────────┼────────────────────┼─────────────────────┼───────────────────┤
│    0    │   'catalogBreadth'   │      false       │    3    │ 'genericMegastore' │          5          │       'gap'       │
│    1    │       'price'        │      false       │    3    │ 'genericMegastore' │          5          │       'gap'       │
│    2    │   'deliverySpeed'    │       true       │    4    │ 'genericMegastore' │          4          │     'parity'      │
│    3    │  'curatedDiscovery'  │       true       │    5    │ 'neighborhoodShop' │          3          │ 'differentiation' │
│    4    │  'localSellerTrust'  │       true       │    5    │ 'neighborhoodShop' │          3          │ 'differentiation' │
│    5    │ 'appAnimationPolish' │      false       │    5    │ 'genericMegastore' │          2          │ 'differentiation' │
└─────────┴──────────────────────┴──────────────────┴─────────┴────────────────────┴─────────────────────┴───────────────────┘

Diferenciación real: curatedDiscovery, localSellerTrust

=== panorama competitivo: competitiveMap, HOY ===

┌─────────┬────────────────────────────┬──────────────┬──────────────────────┬──────────────────────┐
│ (index) │            name            │     type     │       quadrant       │ sharesQuadrantWithUs │
├─────────┼────────────────────────────┼──────────────┼──────────────────────┼──────────────────────┤
│    0    │    'MegaStoreGenerico'     │   'direct'   │ 'raw-search / broad' │        false         │
│    1    │    'SuperTiendaExpress'    │   'direct'   │ 'raw-search / broad' │        false         │
│    2    │   'TiendasLocalesOnline'   │  'indirect'  │ 'raw-search / niche' │        false         │
│    3    │ 'NicheHandmadeMarketplace' │  'indirect'  │  'curated / niche'   │        false         │
│    4    │    'JustSearchOnGoogle'    │ 'substitute' │ 'raw-search / broad' │        false         │
└─────────┴────────────────────────────┴──────────────┴──────────────────────┴──────────────────────┘
openSpace hoy: true

=== howToWin, en una frase ===

Para compradores que exploran sin saber exactamente qué buscan, Mercado es el marketplace de descubrimiento curado que te conecta con vendedores locales verificados -- a diferencia del gigante genérico, que muestra de todo pero no ayuda a encontrar nada.
Pilares verificados: curatedDiscovery + localSellerTrust.

Dos hallazgos completan esta capa. El primero: de seis dimensiones, solo dos son diferenciación real que además le importa al segmento (curatedDiscovery, localSellerTrust) — appAnimationPolish también sale 'differentiation', pero a nadie del segmento le importa, así que no cuenta como parte de "cómo ganamos". El segundo, del panorama competitivo: hoy, ninguno de los cinco jugadores del roster —ni los dos directos, ni los dos indirectos, ni el sustituto más grande de todos— ocupa el mismo cuadrante que Mercado. openSpace: true no es una coincidencia de estos dos competidores puntuales; es la confirmación, sobre el roster completo, de que la diferenciación real que differentiationMap encontró tiene, hoy, un espacio despejado donde vivir.

Profundización: por qué "hoy" es la palabra más importante de esta capa

El módulo 5 ya te enseñó esto con detalle, y esta capa del one-pager lo hereda sin diluirlo: openSpace: true describe el panorama de hoy, con los scores de curaduría actuales de cada jugador. Si proyectaras el mismo competitiveMap tres años hacia adelante —con JustSearchOnGoogle subiendo su curaduría de 1 a 7, la misma tendencia de asistentes de compra con IA que el módulo 5 ya modeló—, openSpace caería a false, sin que ningún competidor nuevo entrara al roster. La capa howToWin de este one-pager, entonces, no dice "Mercado gana para siempre" — dice "Mercado gana hoy, con una ventaja real y un espacio despejado, y ese espacio tiene fecha de vencimiento si nadie lo defiende". Esa fecha de vencimiento es, exactamente, la pregunta que abre la siguiente capa: ¿qué hace que esta ventaja sea difícil de copiar, no solo que hoy nadie la haya copiado todavía?

Errores comunes

Presentar differentiationMap sin competitiveMap, como si "ganar hoy" fuera suficiente. Qué pasa: el one-pager incluye la tabla completa de seis dimensiones —diferenciación real confirmada— y se detiene ahí, sin mencionar el panorama competitivo más amplio ni su proyección hacia el futuro. Por qué pasa: la diferenciación se siente como la conclusión completa de "cómo ganamos", y el panorama competitivo se siente como un tema aparte, más de "vigilancia del mercado" que de estrategia central. Cómo detectarlo: si tu capa howToWin no incluye ninguna mención de openSpace ni de hacia dónde se mueve el mercado, solo tienes la mitad del arma sin el terreno. Cómo corregirlo: exige siempre las dos mitades juntas, como en esta lección — la diferenciación real y el espacio competitivo que la sostiene, no una sin la otra.

Incluir appAnimationPolish en la propuesta de valor porque técnicamente "gana". Qué pasa: alguien nota que appAnimationPolish también tiene verdict: 'differentiation' en la tabla, y propone incluirlo en el statement final de "cómo ganamos", porque "también es una ventaja real, ¿no?". Por qué pasa: el ojo se detiene en la columna verdict, no en mattersToSegment — y una fila marcada 'differentiation' se ve, a primera vista, igual de válida que cualquier otra. Cómo detectarlo: si tu lista final de "cómo ganamos" incluye alguna dimensión con mattersToSegment: false, alguien leyó solo una columna de la tabla. Cómo corregirlo: la regla del módulo 4 no cambió al llegar aquí — diferenciación real y que le importe al segmento, las dos condiciones a la vez, o no entra a la propuesta de valor final.

Tratar openSpace: true como garantía permanente, sin mencionar la proyección. Qué pasa: el one-pager cita openSpace: true como si fuera un hecho fijo del negocio, sin ninguna mención de que ese mismo modelo, proyectado apenas tres años, produce false. Por qué pasa: un resultado positivo invita a cerrar el tema ahí, y calcular la proyección se siente como buscar problemas donde hoy no los hay. Cómo detectarlo: si tu capa howToWin no menciona ninguna fecha de vencimiento ni ninguna tendencia que podría cerrar el espacio, omitiste el hallazgo más importante del módulo 5. Cómo corregirlo: cita siempre el resultado de hoy junto con su proyección — la lección 5 (moats) es, precisamente, la respuesta de ingeniería a esa fecha de vencimiento.

Ejercicios

Ejercicio 1 — Agrega una séptima dimensión a differentiationMap. El equipo de logística propone medir deliveryReliability (confiabilidad de entrega, no velocidad), que sí le importa al segmento. Los puntajes son: Mercado = 6, genericMegastore = 4, neighborhoodShop = 5. Sin ejecutar nada, calcula el verdict y decide si entraría en la propuesta de valor final.

Ver solución

Entre los dos competidores, neighborhoodShop (5) puntúa más alto que genericMegastore (4) en esta dimensión, así que el mejor rival es neighborhoodShop con 5. El gap de Mercado es 6 - 5 = 1, que no alcanza REAL_DIFF_MARGIN (2), así que el verdict es 'parity'. No entraría en la propuesta de valor final — le importa al segmento, pero Mercado no gana ahí con margen suficiente para llamarlo diferenciación real, solo mesa de apuestas con una ligera ventaja.

Ejercicio 2 — Predice el efecto de un competidor nuevo en competitiveMap. Un competidor nuevo, AIShoppingAssistant, entra con scores: { breadth: 9, curation: 9 }. Sin ejecutar nada, ¿en qué cuadrante caería, y compartiría cuadrante con Mercado?

Ver solución

Con breadth: 9 (≥ 5 → 'broad') y curation: 9 (≥ 5 → 'curated'), caería en el cuadrante 'curated / broad' — exactamente el mismo cuadrante que Mercado (us.scores = { breadth: 8, curation: 8 }, también 'curated / broad'). sharesQuadrantWithUs sería true, y openSpace caería a false de inmediato, sin necesidad de esperar ninguna proyección a tres años — un competidor que entra directamente con alta amplitud y alta curaduría ocuparía el espacio despejado de Mercado desde el primer día.

Ejercicio 3 — Explica a un inversionista por qué "ganamos hoy" no es la historia completa. Un inversionista, después de ver la tabla de diferenciación y el mapa openSpace: true, pregunta: "entonces, ¿ya ganaron, no hay nada más que hacer aquí?". Escribe, en un párrafo, tu respuesta usando el vocabulario de esta lección.

Ver solución

Un ejemplo de respuesta: "Ganamos hoy, con evidencia clara: dos dimensiones de diferenciación real que le importan a nuestro segmento, y un espacio competitivo completamente despejado frente a los cinco jugadores más relevantes del panorama, incluido el sustituto más grande de todos. Pero 'ganar hoy' y 'seguir ganando' son preguntas distintas — el mismo modelo que confirma el espacio despejado hoy, proyectado apenas tres años con una tendencia tecnológica que ya es visible, muestra ese espacio cerrándose. No es una señal de alarma, es la razón exacta por la que la siguiente parte de nuestra estrategia — qué tan defendible es esta ventaja, no solo si existe hoy — es tan importante como la que acabamos de mostrarte."

Resumen y siguiente paso

En esta lección llenaste la tercera capa del one-pager: howToWin, con dos mitades verificadas — differentiationMap confirmó que solo curatedDiscovery y localSellerTrust son diferenciación real que le importa al segmento, y competitiveMap confirmó que ese terreno está despejado hoy frente a los cinco jugadores del panorama completo, aunque con una fecha de vencimiento visible en la proyección a tres años.

Antes de avanzar deberías poder: explicar por qué "cómo ganamos" necesita dos modelos y no uno, y distinguir diferenciación real e irrelevante (appAnimationPolish) de diferenciación real y valiosa.

La lección 5 llena la cuarta capa: moats — qué tan defendible es, de verdad, la ventaja que acabas de confirmar, con moatScore sobre el inventario completo de Mercado.

Recursos

  • April Dunford, "The 'No Differentiation' Illusion" — aprildunford.substack.com/p/the-no-differentiation-illusion. La diferencia entre no tener diferenciación y no saber verla con precisión — la misma disciplina que separó appAnimationPolish de curatedDiscovery en esta lección. En inglés.
  • Michael Porter, "What Is Strategy?" (Harvard Business Review, 1996) — hbr.org/1996/11/what-is-strategy. El artículo original que distingue efectividad operacional (competir mejorando lo mismo que todos) de posicionamiento estratégico real (competir siendo distinto) — el argumento detrás de la línea verdict === 'differentiation' de esta capa. En inglés.
  • Jeff Jordan (a16z), "So You Want to Compete Against Amazon?" — a16z.com/so-you-want-to-compete-against-amazon. Sobre qué significa competir con un gigante genérico sin copiar su juego — el mismo argumento que separa a Mercado de genericMegastore en el panorama de esta lección. En inglés.