Módulo 5: Competition And Market
Mini-proyecto: el mapa competitivo completo de Mercado
Descripción
Es momento de juntar el módulo entero en un solo artefacto: el mapa competitivo de Mercado, completo y proyectado hacia adelante. Aprendiste a mapear la competencia sin quedarte en el rival obvio (L2), a categorizar directos, indirectos y sustitutos con el mismo rigor (L3), a darle nombre y tamaño al competidor más subestimado —"no hacer nada"— (L4), a proyectar el mapa hacia el futuro en vez de tratarlo como una fotografía fija (L5), a elegir ejes que de verdad discriminan (L6), y a reconocer cuándo un mapa mide la guerra equivocada (L7). En este proyecto corres competitiveMap sobre el roster completo de Mercado —cinco jugadores, las tres categorías representadas— en dos momentos del tiempo, y cierras con la recomendación que ese resultado exige.
Tu entregable tiene tres partes, y las tres se verifican con código, no solo se redactan: (1) el roster completo de Mercado, categorizado por tipo; (2) el panorama competitivo de hoy, verificado con competitiveMap; y (3) el mismo panorama, proyectado a tres años según la tendencia tecnológica que ya viste en la lección 5, mostrando si el espacio despejado de hoy sigue despejado mañana.
Conexión con el módulo. Este proyecto no introduce ningún concepto nuevo — reúne, en un solo mapa verificado, todo lo que construiste lección por lección. Es, además, el puente hacia el resto de la guía: el panorama que armas aquí es el mismo que el módulo 6 va a usar para preguntar qué tan defendible es el espacio despejado de Mercado frente a cualquiera de estos jugadores —moats, no solo posición—, y el mismo que el módulo 7 va a cruzar contra el backlog de Mercado para decidir qué apuestas construir primero.
Una analogía: el puente de mando, con la carta de navegación completa
El módulo abrió con el radar de un capitán, barriendo 360 grados en vez de mirar solo hacia el frente. Este proyecto es el momento en que ese capitán deja el radar y sube al puente de mando, donde está la carta de navegación completa desplegada sobre la mesa: no solo los barcos que hay alrededor ahora mismo, sino las rutas marcadas, las corrientes conocidas, y una segunda carta —transparente, superpuesta sobre la primera— que muestra hacia dónde se espera que se muevan esas corrientes en los próximos años. Un capitán que solo mira el radar navega bien el minuto presente. Un capitán que sube al puente con las dos cartas desplegadas puede trazar un rumbo que siga siendo bueno dentro de tres años, no solo hoy.
Este mini-proyecto es exactamente esa mesa de mando: todo lo que el módulo enseñó, en un solo lugar, listo para que cualquier persona del equipo de Mercado —no solo quien lo escribió— pueda mirarlo y responder, en minutos, la pregunta que abre cualquier conversación de estrategia: ¿dónde estamos parados, y por cuánto tiempo más va a seguir siendo un buen lugar?
La solución de referencia, verificada
Parte 1 — El roster completo de Mercado, categorizado
Este es el roster completo que construiste, pieza por pieza, a lo largo del módulo: dos competidores directos (L2), dos indirectos y un sustituto (L3), con el sustituto identificado como el jugador de mayor attentionShare de todos (L4).
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 } },
];
Verifica el roster contra los criterios del módulo antes de continuar: tiene representadas las tres categorías (L3), no se detuvo en el competidor directo más famoso (L2), e incluye explícitamente al sustituto "no hacer nada" en vez de descartarlo por no tener forma de empresa reconocible (L4).
Parte 2 — El panorama de hoy y la proyección a tres años, ejecutados en Node
Corremos competitiveMap sobre el roster completo dos veces: con los datos de hoy, y con la proyección de la lección 5 —los asistentes de compra con IA subiendo la curaduría de JustSearchOnGoogle de 1 a 7—, usando siempre los ejes correctos de la estrategia de Mercado (L6), no los de la guerra que ya decidió no pelear (L7).
// 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 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 } },
];
const rosterIn3Years = rosterToday.map((p) =>
p.name === 'JustSearchOnGoogle' ? { ...p, scores: { ...p.scores, curation: 7 } } : p
);
const today = competitiveMap(us, rosterToday, axesDiscovery);
const in3Years = competitiveMap(us, rosterIn3Years, axesDiscovery);
console.log('=== PARTE 1: el panorama competitivo de Mercado, HOY ===\n');
console.table(today.players);
console.log(`openSpace hoy: ${today.openSpace}`);
console.log('\n=== PARTE 2: el mismo panorama, proyectado a 3 años ===\n');
console.table(in3Years.players);
console.log(`openSpace en 3 años: ${in3Years.openSpace}`);
const directCount = rosterToday.filter((p) => p.type === 'direct').length;
const indirectCount = rosterToday.filter((p) => p.type === 'indirect').length;
const substituteCount = rosterToday.filter((p) => p.type === 'substitute').length;
console.log(`\nResumen del roster: ${directCount} directos, ${indirectCount} indirectos, ${substituteCount} sustituto(s).`);
Qué esperar. Al correr el archivo con Node, la salida es exactamente esta:
=== PARTE 1: el panorama competitivo de Mercado, 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
=== PARTE 2: el mismo panorama, proyectado a 3 años ===
┌─────────┬────────────────────────────┬──────────────┬──────────────────────┬──────────────────────┐
│ (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' │ 'curated / broad' │ true │
└─────────┴────────────────────────────┴──────────────┴──────────────────────┴──────────────────────┘
openSpace en 3 años: false
Resumen del roster: 2 directos, 2 indirectos, 1 sustituto(s).
El resultado: el panorama de hoy está despejado; el de dentro de tres años, no. De los cinco jugadores del roster completo, ninguno ocupa el cuadrante de Mercado hoy — ni los dos directos, ni los dos indirectos, ni el sustituto. Es la confirmación numérica de todo lo que el módulo construyó: un mapeo disciplinado (L2, L3), que no ignoró al competidor más subestimado (L4), sobre los ejes correctos de la estrategia de Mercado (L6, L7), muestra un espacio propio real, no una ilusión.
Pero la segunda tabla es la que convierte este mapa en algo más que una fotografía tranquilizadora. Con un único cambio —la curaduría de JustSearchOnGoogle subiendo de 1 a 7, la misma tendencia tecnológica ya visible de la lección 5—, ese mismo jugador se muda al cuadrante de Mercado, y openSpace cae a false. Ningún competidor nuevo entró al roster: el terreno se movió debajo del jugador que ya estaba ahí, exactamente como advirtió la lección 5. La recomendación que se desprende de las dos tablas juntas no es "estamos bien" ni "estamos en peligro" — es más precisa que cualquiera de las dos: el espacio está despejado hoy, y el reloj para defenderlo antes de que se cierre ya empezó a correr. Qué tan defendible es ese espacio una vez que alguien intenta ocuparlo —no solo si está vacío hoy— es exactamente la pregunta del módulo 6, moats, que empieza justo donde termina este proyecto.
Errores comunes
Entregar solo el mapa de hoy y llamarlo "el panorama completo". Qué pasa: el equipo arma un competitiveMap cuidadoso, con el roster completo y los ejes correctos, lo presenta como el análisis competitivo terminado, y nunca corre la proyección hacia adelante que la lección 5 enseñó. Por qué pasa: el mapa de hoy se siente completo porque responde con precisión la pregunta "¿dónde estamos parados ahora?" — y esa sensación de completitud oculta que dejó sin responder una pregunta igual de importante: por cuánto tiempo. Cómo detectarlo: si tu entrega de análisis competitivo no incluye ninguna versión proyectada del mapa, con al menos una tendencia razonada, te falta la mitad del trabajo de este módulo. Cómo corregirlo: no cierres ningún mapa competitivo sin correr al menos un escenario de proyección, anclado en una tendencia real, como hiciste en la Parte 2 de este proyecto.
Presentar openSpace: false en la proyección como un fracaso del proyecto. Qué pasa: al ver que el espacio se cierra en la proyección a tres años, el equipo trata el resultado como si el proyecto hubiera "fallado" en encontrar una buena posición para Mercado, en vez de como el hallazgo más valioso del ejercicio completo. Por qué pasa: se espera, sin decirlo, que un buen análisis competitivo siempre termine en buenas noticias — y un resultado que anticipa un problema se siente como un análisis mal hecho, en vez de un análisis bien hecho que encontró un problema real. Cómo detectarlo: si la reacción del equipo ante openSpace: false en la proyección es descartar el modelo en vez de planificar una respuesta, están confundiendo la calidad del mapa con la comodidad de su resultado. Cómo corregirlo: recuerda el punto exacto de la lección 5 — una proyección que anticipa un problema con tiempo de sobra es la version del análisis competitivo que más vale, no la que menos.
Tratar el mapa competitivo como la decisión final, sin conectarlo con moats ni con el roadmap. Qué pasa: el equipo cierra el proyecto con la conclusión "tenemos espacio despejado hoy, que se cierra en tres años" y ahí se detiene, sin traducir ese hallazgo en ninguna acción concreta sobre qué construir o qué defender. Por qué pasa: el mapa responde "dónde" con mucha claridad, pero no responde "qué hacer al respecto" — y sin ese siguiente paso, el análisis se queda en diagnóstico puro, sin conectar con decisiones reales. Cómo detectarlo: si nadie en el equipo puede nombrar una sola acción concreta que se desprenda del resultado de este proyecto, el mapa se quedó como ejercicio académico. Cómo corregirlo: usa el resultado de este proyecto como el insumo de entrada del módulo 6 —¿qué hace que la curaduría de Mercado sea difícil de copiar, no solo estar ahí primero?— y del módulo 7 —¿qué apuestas del backlog defienden justamente ese espacio antes de que se cierre?
Ejercicios
Ejercicio 1 — Agrega un sexto jugador al roster. Un competidor nuevo entra al mercado: una app de recomendaciones sociales donde amigos se recomiendan productos entre sí, sin ninguna función de venta directa. Escribe su objeto de datos (name, type, scores.breadth, scores.curation) siguiendo el patrón del roster, agrégalo a rosterToday, y predice en qué cuadrante caería y si comparte cuadrante con Mercado hoy.
Ver solución
Una versión razonable:
{ name: 'FriendRecommendationApp', type: 'indirect', scores: { breadth: 4, curation: 7 } }
Es indirect porque resuelve el mismo job de descubrimiento que Mercado, pero sin ser un marketplace. Con breadth: 4 (< 5 → 'niche', un catálogo implícito acotado a lo que los amigos recomiendan) y curation: 7 (≥ 5 → 'curated', las recomendaciones sociales son una forma alta de curaduría), caería en el cuadrante 'curated / niche' — el mismo que NicheHandmadeMarketplace, no el de Mercado. sharesQuadrantWithUs daría false, y openSpace seguiría en true: un competidor más en el radar, pero todavía sin invadir el espacio despejado de Mercado.
Ejercicio 2 — Combina las dos amenazas de la lección 5 y la 7. Corre el modelo proyectando al mismo tiempo el avance del sustituto (JustSearchOnGoogle con curation: 7, lección 5) y MegaStoreGenerico invirtiendo en curaduría (curation: 6, ejercicio 2 de la lección 5). ¿Qué le pasa a openSpace, y cuántos jugadores comparten el cuadrante de Mercado en ese escenario combinado?
Ver solución
Con ambos cambios aplicados (JustSearchOnGoogle: curation 7 y MegaStoreGenerico: curation 6, ambos ≥ 5 → 'curated', y ambos con breadth ≥ 5 → 'broad'), los dos caerían en el cuadrante 'curated / broad' — el mismo de Mercado. openSpace seguiría en false, pero ahora con dos jugadores compartiendo el cuadrante en vez de uno: un competidor directo y un sustituto, invadiendo el mismo terreno por caminos distintos (inversión deliberada uno, tendencia tecnológica externa el otro). Este escenario combinado es el más severo de todos los que viste en el módulo, y es exactamente el tipo de pregunta que un mapa competitivo bien construido debería poder responder antes de que ambas amenazas se vuelvan reales al mismo tiempo.
Ejercicio 3 — Presenta el mapa completo al equipo fundador de Mercado. Escribe, en un párrafo, cómo presentarías las dos tablas de este proyecto —hoy y en tres años— a el equipo fundador de Mercado, incluyendo qué recomendación concreta harías con el tiempo que queda antes de que el espacio se cierre.
Ver solución
Un ejemplo de respuesta: "Mapeamos el panorama completo: dos competidores directos, dos indirectos y el sustituto más grande de todos —simplemente buscar en Google—, los cinco sobre los ejes que reflejan nuestra estrategia real, no los del retail genérico. La buena noticia: hoy, ninguno de los cinco ocupa nuestro terreno — tenemos un espacio propio, real y verificado, no solo una sensación. La noticia que exige acción: ese espacio no está garantizado. Si los asistentes de compra con IA siguen la trayectoria que ya es visible hoy, dentro de tres años el sustituto que más atención se lleva de todo el panorama va a estar parado exactamente donde nosotros estamos. No proponemos entrar en pánico ni cambiar de estrategia — proponemos usar estos tres años para profundizar lo que hoy nos separa de todos: nuestra curaduría necesita ser lo bastante buena, lo bastante rápido, para que copiarla no sea trivial ni siquiera para un asistente de IA. Esa es exactamente la pregunta del próximo módulo: qué hace que esta ventaja sea difícil de copiar, no solo que hoy nadie la haya copiado todavía."
Resumen y siguiente paso
En este mini-proyecto reuniste el módulo completo en un solo mapa: el roster de Mercado con las tres categorías de competencia representadas, el panorama de hoy verificado con competitiveMap sobre los ejes correctos de la estrategia (espacio despejado, openSpace: true), y la proyección a tres años que muestra ese mismo espacio cerrándose cuando el sustituto más grande del roster absorbe la tendencia tecnológica que ya es visible hoy (openSpace: false). Con esto cierras el módulo 5.
Ahora tienes, para cualquier producto que analices en tu propio trabajo, un instrumento completo de dos preguntas: "¿dónde estamos parados hoy, frente a todos los jugadores —incluido el que no tiene logo?" y "¿por cuánto tiempo más va a seguir siendo un buen lugar?" — y sabes que la segunda pregunta es la que casi ningún equipo se hace a tiempo.
Hacia dónde sigues. Ya sabes dónde está el espacio despejado de Mercado, y ya sabes que ese espacio tiene fecha de vencimiento si nadie lo defiende. La pregunta que sigue es exactamente esa: ¿qué hace que ese espacio sea difícil de ocupar, incluso para alguien que lo intente en serio? Esa es la pregunta del módulo 6 (module-06-moats-and-defensibility): los moats — network effects, switching costs, escala, datos, marca — frente a una feature copiable en un fin de semana.
Recursos
- Michael Porter, "The Five Competitive Forces That Shape Strategy" — hbr.org/2008/01/the-five-competitive-forces-that-shape-strategy. El marco completo del módulo —rivales directos, sustitutos, y las fuerzas que los mueven— vuelto a leer ahora que tienes el caso completo de Mercado como ejemplo propio. En inglés.
- Clayton Christensen, Scott Cook y Taddy Hall, "Marketing Malpractice: The Cause and the Cure" — hbr.org/2005/12/marketing-malpractice-the-cause-and-the-cure. El estudio del milkshake, para releer con el sustituto de Mercado (
JustSearchOnGoogle) ya identificado, cuantificado y proyectado hacia adelante. En inglés. - Clayton Christensen, Michael Raynor y Rory McDonald, "What Is Disruptive Innovation?" — hbr.org/2015/12/what-is-disruptive-innovation. El marco detrás de la proyección a tres años de este proyecto: un jugador que hoy parece marginal puede desplazar el mapa entero sin que nadie lo ataque directamente. En inglés.
- Jeff Jordan (a16z), "So You Want to Compete Against Amazon?" — a16z.com/so-you-want-to-compete-against-amazon. El puente natural hacia el módulo 6: Jordan no solo explica cómo posicionarse frente a un gigante, sino qué hace que esa posición sea sostenible en el tiempo, no solo una ventaja momentánea. En inglés.