Módulo 5: Competition And Market
El mapa estratégico 2×2: cómo elegir ejes que sí discriminan
Descripción
Desde la lección 1 vienes usando el mapa 2×2 de competitiveMap sin detenerte en una pregunta que esta lección responde de frente: ¿por qué esos dos ejes —amplitud del catálogo y profundidad de curaduría— y no otros dos cualquiera? No cualquier par de ejes produce un mapa útil. Un 2×2 con los ejes equivocados puede verse igual de profesional que uno bien construido —los cuatro cuadrantes, la cuadrícula, los jugadores puestos con cuidado— y sin embargo no decir absolutamente nada, porque los ejes elegidos no distinguen entre los jugadores de ninguna forma que importe. Esta lección enseña a reconocer la diferencia antes de confiar en cualquier mapa.
Conexión con el módulo. Las lecciones 2 a 5 dieron por sentado que breadth y curation eran los ejes correctos para el caso de Mercado — y lo son, porque son, literalmente, los dos ejes de la estrategia que Mercado eligió desde el módulo 2. Esta lección hace explícito el criterio detrás de esa elección, para que puedas aplicarlo a cualquier mapa nuevo que armes, no solo al de Mercado. La lección 7 toma este mismo criterio y lo usa al revés: qué pasa cuando los ejes elegidos, aunque sí discriminan, ya no son los ejes de la batalla que importa.
Una analogía cotidiana: el termómetro y el tensiómetro
En un chequeo médico, el doctor te toma la temperatura y también te mide la presión arterial — dos números, dos instrumentos distintos. Cada uno mide algo que el otro no puede ver: la temperatura no dice nada sobre tu presión, y la presión no dice nada sobre si tienes fiebre. Juntos, los dos números le dan al doctor una lectura mucho más rica que cualquiera de los dos por separado, precisamente porque son independientes — cada uno aporta información que el otro no tiene.
Ahora imagina un doctor que, en vez de eso, te toma la temperatura dos veces con dos termómetros distintos, y llama a eso "un chequeo completo de dos mediciones". Técnicamente hizo dos mediciones — pero las dos te van a decir casi lo mismo, porque miden la misma cosa con instrumentos distintos. No aprendió nada que no supiera con la primera medición. Un mapa 2×2 con ejes que no discriminan es exactamente ese segundo doctor: parece más riguroso por tener dos ejes en vez de uno, pero si los dos ejes terminan agrupando a todo el mundo de la misma forma, el segundo eje no aportó ninguna información nueva — es un termómetro repetido, disfrazado de tensiómetro.
Ejemplo trabajado: dos mapas del mismo roster, dos resultados muy distintos
Corremos competitiveMap dos veces sobre exactamente el mismo roster de cuatro jugadores — pero con dos pares de ejes distintos. El primer par (hasApp × foundedRecently) suena a un análisis "de producto" razonable a primera vista. El segundo par es el que vienes usando desde la lección 1 (breadth × curation):
// Modelo pedagogico: ubica cada jugador en un mapa 2x2 segun dos ejes
// ESTRATEGICOS (no metricas de mercado objetivas) y senala si el
// cuadrante de "nosotros" queda despejado -- el espacio donde Mercado
// puede ganar sin chocar de frente contra otro jugador.
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 };
}
const players = [
{ name: 'MegaStoreGenerico', type: 'direct', scores: { breadth: 9, curation: 2, hasApp: 1, foundedRecently: 0 } },
{ name: 'TiendasLocalesOnline', type: 'indirect', scores: { breadth: 3, curation: 4, hasApp: 1, foundedRecently: 0 } },
{ name: 'NicheHandmadeMarketplace', type: 'indirect', scores: { breadth: 3, curation: 8, hasApp: 1, foundedRecently: 1 } },
{ name: 'JustSearchOnGoogle', type: 'substitute', scores: { breadth: 10, curation: 1, hasApp: 1, foundedRecently: 0 } },
];
const us = { name: 'Mercado', scores: { breadth: 8, curation: 8, hasApp: 1, foundedRecently: 0 } };
const badAxes = [
{ key: 'hasApp', label: 'has a mobile app', low: 'no', high: 'yes', midpoint: 1 },
{ key: 'foundedRecently', label: 'founded after 2020', low: 'no', high: 'yes', midpoint: 1 },
];
const badMap = competitiveMap(us, players, badAxes);
console.log('=== competitiveMap con ejes que NO discriminan (hasApp x foundedRecently) ===\n');
console.log(`[us] ${badMap.us.name} -> quadrant: "${badMap.us.quadrant}"`);
console.table(badMap.players);
console.log(`openSpace: ${badMap.openSpace}`);
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 goodMap = competitiveMap(us, players, axesDiscovery);
console.log('\n=== competitiveMap con ejes que SÍ discriminan (breadth x curation) ===\n');
console.log(`[us] ${goodMap.us.name} -> quadrant: "${goodMap.us.quadrant}"`);
console.table(goodMap.players);
console.log(`openSpace: ${goodMap.openSpace}`);
Qué esperar. Al correr el archivo con Node, la salida es exactamente esta:
=== competitiveMap con ejes que NO discriminan (hasApp x foundedRecently) ===
[us] Mercado -> quadrant: "no / yes"
┌─────────┬────────────────────────────┬──────────────┬─────────────┬──────────────────────┐
│ (index) │ name │ type │ quadrant │ sharesQuadrantWithUs │
├─────────┼────────────────────────────┼──────────────┼─────────────┼──────────────────────┤
│ 0 │ 'MegaStoreGenerico' │ 'direct' │ 'no / yes' │ true │
│ 1 │ 'TiendasLocalesOnline' │ 'indirect' │ 'no / yes' │ true │
│ 2 │ 'NicheHandmadeMarketplace' │ 'indirect' │ 'yes / yes' │ false │
│ 3 │ 'JustSearchOnGoogle' │ 'substitute' │ 'no / yes' │ true │
└─────────┴────────────────────────────┴──────────────┴─────────────┴──────────────────────┘
openSpace: false
=== competitiveMap con ejes que SÍ discriminan (breadth x curation) ===
[us] Mercado -> quadrant: "curated / broad"
┌─────────┬────────────────────────────┬──────────────┬──────────────────────┬──────────────────────┐
│ (index) │ name │ type │ quadrant │ sharesQuadrantWithUs │
├─────────┼────────────────────────────┼──────────────┼──────────────────────┼──────────────────────┤
│ 0 │ 'MegaStoreGenerico' │ 'direct' │ 'raw-search / broad' │ false │
│ 1 │ 'TiendasLocalesOnline' │ 'indirect' │ 'raw-search / niche' │ false │
│ 2 │ 'NicheHandmadeMarketplace' │ 'indirect' │ 'curated / niche' │ false │
│ 3 │ 'JustSearchOnGoogle' │ 'substitute' │ 'raw-search / broad' │ false │
└─────────┴────────────────────────────┴──────────────┴──────────────────────┴──────────────────────┘
openSpace: true
Mismo roster de cuatro jugadores, misma función, dos conclusiones opuestas. Con hasApp × foundedRecently, tres jugadores completamente distintos entre sí —un megastore gigante, una red de tiendas de barrio, y un buscador que ni siquiera es una empresa de e-commerce— caen exactamente en el mismo cuadrante que Mercado. El resultado (openSpace: false) no te dice absolutamente nada útil, porque casi cualquier jugador digital moderno "tiene una app": ese eje no separa a nadie de nadie. Es el termómetro repetido de la analogía — parece un segundo eje, pero no aporta ninguna distinción real. Con breadth × curation, en cambio, los mismos cuatro jugadores se reparten en tres cuadrantes distintos, y el de Mercado queda claramente despejado — porque estos dos ejes sí capturan una diferencia real de estrategia entre los jugadores.
Profundización: la prueba de los dos ejes independientes
Antes de confiar en cualquier mapa 2×2, aplica esta prueba de tres preguntas a los ejes que estás por usar:
- ¿El eje separa realmente a los jugadores, o casi todos caen del mismo lado? Si nueve de cada diez jugadores de tu categoría comparten el mismo valor en un eje (como "tiene una app" en el ejemplo de esta lección), ese eje no está discriminando nada — está casi constante, y una variable casi constante no aporta información.
- ¿Los dos ejes miden cosas realmente distintas, o son la misma idea con otro nombre? Un eje de "calidad del producto" y otro de "satisfacción del cliente" a menudo se mueven juntos —si uno sube, el otro casi siempre sube también— y terminan funcionando como un solo eje disfrazado de dos. Los ejes útiles suelen poder subir en direcciones opuestas: un jugador puede ser amplio y sin curaduría (
MegaStoreGenerico), o angosto y curado (NicheHandmadeMarketplace) — las cuatro combinaciones son posibles, no solo dos. - ¿El eje conecta con una elección estratégica real, o es solo un dato fácil de conseguir?
hasAppes fácil de verificar con una búsqueda de cinco minutos — por eso es tentador usarlo. Pero facilidad de medición no es lo mismo que relevancia estratégica. Los ejes correctos son los que reflejan la elección que la estrategia hizo (en el caso de Mercado, del módulo 2: descubrimiento curado en vez de precio bajo, catálogo amplio en vez de nicho estrecho), no los que están más a la mano.
Un mapa que pasa las tres preguntas no garantiza que la estrategia sea correcta — pero garantiza que el mapa, al menos, es capaz de mostrarte la verdad si la estrategia estuviera equivocada. Un mapa que falla las tres preguntas no te puede mostrar nada, ni bueno ni malo, porque no distingue.
Errores comunes
Construir un 2×2 con ejes que no discriminan. Qué pasa: se eligen dos ejes fáciles de medir o que suenan profesionales en una presentación —como hasApp o foundedRecently— sin verificar primero si realmente separan a los jugadores de forma útil, y el mapa resultante agrupa a rivales completamente distintos en el mismo cuadrante, generando conclusiones sin sentido (como la de este ejemplo: un megastore, una red de tiendas de barrio y un buscador genérico "compitiendo en el mismo cuadrante" que Mercado). Por qué pasa: cualquier par de ejes produce una cuadrícula que se ve rigurosa, y esa apariencia visual se confunde con validez real, sin que nadie se detenga a preguntar si el eje discrimina. Cómo detectarlo: aplica la prueba de los dos ejes independientes de esta lección antes de presentar cualquier mapa — si más de dos tercios de los jugadores caen en el mismo cuadrante, el eje probablemente no está discriminando. Cómo corregirlo: reemplaza cualquier eje que falle la prueba por uno anclado en una elección estratégica real, como hiciste al pasar de hasApp a curation.
Elegir ejes por lo fácil de medir, no por lo estratégicamente relevante. Qué pasa: el equipo termina usando datos que ya tenía a la mano —antigüedad de la empresa, si tiene o no una funcionalidad puntual, número de empleados— simplemente porque conseguir esos datos es rápido, aunque no tengan ninguna relación con la estrategia que se está evaluando. Por qué pasa: recolectar el dato correcto a veces requiere criterio y estimación (como curation, que no viene en ningún reporte público), mientras que el dato fácil viene listo — y la conveniencia gana silenciosamente sobre la relevancia. Cómo detectarlo: pregúntate, para cada eje candidato, "¿este eje aparece en la definición de nuestra estrategia (módulo 2), o solo aparece en la hoja de datos que ya teníamos?" Cómo corregirlo: parte siempre de las palabras exactas de la estrategia —"dónde jugar" y "cómo ganar"— y convierte esas palabras en ejes, aunque haga falta estimar los valores con criterio en vez de copiarlos de una base de datos.
Confiar en un mapa 2×2 sin verificar si los ejes son independientes entre sí. Qué pasa: se eligen dos ejes que, sin que nadie lo note, tienden a moverse juntos —por ejemplo, "calidad percibida" y "precio premium"— y el mapa termina mostrando solo dos cuadrantes ocupados de los cuatro posibles, dando la falsa sensación de que hay menos variedad estratégica de la que en realidad existe. Por qué pasa: dos ejes correlacionados no se ven distintos de dos ejes independientes en el momento de elegirlos —el problema solo se hace visible después, cuando el mapa resultante tiene cuadrantes vacíos que "no tendrían por qué estar vacíos". Cómo detectarlo: si, después de ubicar a todos los jugadores, dos de los cuatro cuadrantes quedan completamente vacíos y nadie puede explicar por qué ningún jugador —ni siquiera hipotético— podría ocupar esas combinaciones, sospecha de los ejes. Cómo corregirlo: antes de construir el mapa, pregunta si es conceptualmente posible que un jugador sea alto en un eje y bajo en el otro, y viceversa — si no puedes imaginar un jugador así, los ejes probablemente están midiendo la misma cosa.
Ejercicios
Ejercicio 1 — Diagnostica un eje sin correr el código. Un colega propone mapear el panorama competitivo con los ejes "tiene sede en la misma ciudad que Mercado" y "acepta pagos con tarjeta de crédito". Aplica la prueba de los dos ejes independientes de esta lección y explica, en un párrafo, por qué probablemente ninguno de los dos sirve.
Ver solución
Ambos ejes fallan la prueba de "¿el eje separa realmente a los jugadores?": en el e-commerce actual, la enorme mayoría de las plataformas relevantes aceptan tarjeta de crédito —ese eje va a agrupar a casi todos del mismo lado, exactamente como pasó con hasApp en el ejemplo de la lección—, y "sede en la misma ciudad" probablemente tampoco importa para un marketplace digital, que no compite por cercanía geográfica de sus oficinas sino por alcance de catálogo y confianza. Ninguno de los dos ejes conecta con una elección estratégica real de Mercado (curaduría, amplitud, confianza local en el vendedor, no en la ubicación de la empresa) — son datos fáciles de conseguir, pero irrelevantes para la pregunta que el mapa necesita responder.
Ejercicio 2 — Propón un tercer par de ejes válido. Adicional a breadth × curation, propón otro par de ejes que también podría ser útil para mapear el mismo panorama de Mercado, y verifica mentalmente que pase las tres preguntas de la prueba de esta lección.
Ver solución
Un par razonable: priceSensitivity (qué tan orientado a precio bajo está el jugador) × sellerTrustDepth (qué tan profunda es la relación de confianza con el vendedor, más allá de solo "tiene un perfil verificado"). Pasa la prueba: (1) discrimina — un jugador puede ser agresivo en precio con relación superficial al vendedor (MegaStoreGenerico) o cuidadoso en precio con relación profunda (TiendasLocalesOnline), las cuatro combinaciones son plausibles; (2) son independientes — no hay ninguna razón para que precio bajo y confianza profunda con el vendedor suban o bajen juntos; (3) conectan con la estrategia — el módulo 2 y 4 hablan explícitamente de "confianza en vendedores locales" como parte de la diferenciación de Mercado, así que este eje refleja una elección real, no un dato de conveniencia.
Ejercicio 3 — Explica el resultado a alguien que solo vio el mapa malo. Un stakeholder vio únicamente el mapa con hasApp × foundedRecently (donde openSpace: false) y concluyó que Mercado no tiene ningún espacio propio en el mercado. Escribe, en un párrafo, cómo le explicarías que esa conclusión depende enteramente de los ejes elegidos, sin sonar como si estuvieras descartando el hallazgo solo porque no te gusta.
Ver solución
Un ejemplo de respuesta: "Es cierto que con esos dos ejes el resultado dice que no hay espacio propio — pero antes de aceptar esa conclusión, hay que preguntar qué tan bien esos ejes distinguen entre los jugadores. hasApp agrupa a un megastore gigante, una red de tiendas de barrio y un buscador genérico en el mismo cuadrante que nosotros — tres negocios completamente distintos, unidos solo porque los cuatro 'tienen una app', algo que hoy tiene casi cualquier jugador digital. Ese eje no está midiendo nada estratégico, solo algo tan común que no separa a nadie. Cuando usamos los ejes que sí reflejan nuestra estrategia real —amplitud de catálogo y profundidad de curaduría—, el mismo roster de jugadores se reparte en tres cuadrantes distintos, y el nuestro queda claramente despejado. No es que estemos descartando el primer mapa porque no nos gusta el resultado — es que ese mapa, con esos ejes, no tenía forma de decirnos nada útil, ni a favor ni en contra."
Resumen y siguiente paso
Esta lección formalizó el criterio detrás del instrumento que vienes usando desde la lección 1: un mapa 2×2 solo es útil si sus ejes discriminan entre jugadores, son independientes entre sí, y conectan con una elección estratégica real, no con un dato de conveniencia. Viste el mismo roster producir conclusiones opuestas —openSpace: false con ejes triviales, openSpace: true con ejes estratégicos— sin que ningún jugador ni ninguna línea de la función cambiara.
Antes de avanzar deberías poder: aplicar la prueba de los dos ejes independientes a cualquier par de ejes antes de confiar en un mapa 2×2, y explicar por qué "el mapa se ve riguroso" no es lo mismo que "el mapa dice algo verdadero".
Ya sabes cómo elegir ejes que discriminan hoy. La lección 7 introduce un peligro distinto, más sutil: ejes que sí discriminaban perfectamente bien — pero en la batalla de ayer, no en la de hoy.
Recursos
- Ben Thompson, "Aggregation Theory" — stratechery.com/2015/aggregation-theory. Thompson construye buena parte de su análisis competitivo eligiendo con mucho cuidado los ejes correctos (control de la relación con el usuario, costo marginal de servir a un usuario más) — un ejemplo real de la disciplina de esta lección aplicada a mercados digitales completos. En inglés.
- Jeff Jordan (a16z), "So You Want to Compete Against Amazon?" — a16z.com/so-you-want-to-compete-against-amazon. Jordan nombra explícitamente la "curaduría" como un eje de competencia distinto —y más defendible— que el precio o el catálogo, el mismo par de ejes que usaste en el ejemplo de esta lección. En inglés.