Módulo 3: Target And Positioning

Para quién es esto -- y para quién NO

Descripción

"¿Quién es el usuario de Mercado?" tiene una respuesta fácil y una respuesta útil, y son casi siempre distintas. La respuesta fácil: "cualquiera que compre algo en línea" — técnicamente cierta, y completamente inútil, por el mismo motivo que "cualquier camino sirve" era una respuesta inútil de GPS en el módulo 2. La respuesta útil exige algo más incómodo: nombrar, con precisión, para quién es esto — y decir, en voz alta, para quién NO, aunque esa segunda persona también compre en línea, también tenga dinero, y también sería, en cualquier reunión de ventas, un cliente bienvenido.

Esta lección construye positionFit, el modelo central del módulo: compara a Mercado contra dos alternativas reales —un megastore genérico y una tienda local— pero con los pesos de importancia de un segmento específico, no con un puntaje universal de "quién es mejor". El resultado, ejecutado dos veces con el mismo producto, es la lección entera resumida en dos números: Mercado gana para un tipo de comprador y pierde, con claridad, para otro. Elegir el segmento objetivo no es describir a "tu cliente ideal" en una diapositiva — es aceptar, con datos, que ese mismo producto va a perder frente a otros compradores igual de reales, y elegir esa pérdida a propósito.

Conexión con el módulo. El módulo intro te mostró el resultado final sin explicarlo. Esta lección abre la caja: por qué Mercado gana para explorers y por qué pierde para exactSkuShoppers, dimensión por dimensión. Este mismo par de segmentos —el que gana y el que estructuralmente no puede ganar— va a reaparecer en la lección 3 (para mostrar que ni siquiera "todos los compradores promedio" es un buen objetivo) y en el proyecto de la lección 8, ya con el positioning statement completo encima.

Una analogía cotidiana: el traje a medida y el poncho para todos

Un sastre que hace trajes a medida mide tu cuerpo exacto, corta la tela para tus hombros exactos, y el resultado es un traje que te queda mejor que cualquier cosa comprada en una tienda departamental. Ese mismo traje, puesto en otra persona con hombros distintos, se ve mal — no porque el sastre haya trabajado mal, sino porque un traje a medida, por definición, le queda perfecto a una sola persona y mal a casi todas las demás. Esa es, precisamente, la fuente de su valor: si el sastre intentara cortar un traje que le quedara "razonablemente bien" a cualquier cuerpo, terminaría con un poncho — una prenda que nadie encuentra incómoda, y que tampoco nadie encuentra especialmente buena.

Un producto que intenta servir a "todo el mundo" es ese poncho. No le queda mal a nadie, y por la misma razón, no le queda espectacular a nadie tampoco — y en un mercado con alternativas, "razonablemente bien para todos" pierde contra "perfecto para alguien" cada vez que ese alguien tiene que decidir a quién comprarle. Elegir un segmento objetivo es, literalmente, decidir para qué cuerpo específico vas a cortar la tela — sabiendo, de antemano, que el traje le va a quedar mal a cuerpos distintos, y aceptando esa consecuencia en vez de intentar evitarla con un compromiso a medias.

Ejemplo trabajado: el mismo Mercado, dos veredictos, dimensión por dimensión

positionFit no solo dice si un producto gana o pierde para un segmento — dice por qué, dimensión por dimensión, comparando siempre contra el mejor rival en esa dimensión específica (no contra un promedio). Corremos el modelo completo, con el desglose por dimensión, para los mismos dos segmentos del módulo intro.

// positionFit(target, product, alternatives): evalua si `product` sirve el
// job de `target` MEJOR que las alternativas, usando los PESOS de ESE
// segmento -- no un puntaje generico. Devuelve tambien el desglose por
// dimension: en cual gana Mercado, en cual gana el rival, y cual rival.
function positionFit(target, product, alternatives) {
  const dims = Object.keys(target.weights).filter((d) => target.weights[d] > 0);
  const weightedScore = (c) => dims.reduce((sum, d) => sum + target.weights[d] * c.scores[d], 0);

  const productScore = weightedScore(product);
  const rivals = alternatives.map((a) => ({ name: a.name, score: weightedScore(a) }));
  const bestRival = rivals.reduce((a, b) => (b.score > a.score ? b : a));

  const byDimension = dims.map((d) => {
    const rivalBest = alternatives.reduce(
      (best, a) => (a.scores[d] > best.score ? { name: a.name, score: a.scores[d] } : best),
      { name: alternatives[0].name, score: -Infinity }
    );
    return {
      dimension: d,
      weight: target.weights[d],
      productScore: product.scores[d],
      bestRivalScore: rivalBest.score,
      bestRivalName: rivalBest.name,
      wins: product.scores[d] > rivalBest.score,
    };
  });

  return {
    segment: target.name,
    productWeightedScore: Number(productScore.toFixed(2)),
    bestRival: bestRival.name,
    bestRivalWeightedScore: Number(bestRival.score.toFixed(2)),
    fitsSegment: productScore > bestRival.score,
    byDimension,
  };
}

const mercado = { name: 'Mercado', scores: { curatedDiscovery: 9, sellerTrust: 8, catalogBreadth: 6, price: 5, deliverySpeed: 5, convenience: 6 } };
const genericMegastore = { name: 'genericMegastore', scores: { curatedDiscovery: 3, sellerTrust: 4, catalogBreadth: 9, price: 8, deliverySpeed: 9, convenience: 8 } };
const localShop = { name: 'localShop', scores: { curatedDiscovery: 6, sellerTrust: 9, catalogBreadth: 2, price: 4, deliverySpeed: 3, convenience: 3 } };
const alternatives = [genericMegastore, localShop];

const explorers = { name: 'explorers', weights: { curatedDiscovery: 0.4, sellerTrust: 0.3, catalogBreadth: 0.1, price: 0.1, deliverySpeed: 0.05, convenience: 0.05 } };
const exactSkuShoppers = { name: 'exactSkuShoppers', weights: { curatedDiscovery: 0, sellerTrust: 0, catalogBreadth: 0.1, price: 0.35, deliverySpeed: 0.35, convenience: 0.2 } };

console.log('=== positionFit: explorers ===\n');
const r1 = positionFit(explorers, mercado, alternatives);
console.log(`segment: ${r1.segment} | productWeightedScore: ${r1.productWeightedScore} | bestRival: ${r1.bestRival} (${r1.bestRivalWeightedScore}) | fitsSegment: ${r1.fitsSegment}\n`);
console.table(r1.byDimension.map((d) => ({ dimension: d.dimension, weight: d.weight, product: d.productScore, bestRival: `${d.bestRivalName}:${d.bestRivalScore}`, wins: d.wins })));

console.log('\n=== positionFit: exactSkuShoppers ===\n');
const r2 = positionFit(exactSkuShoppers, mercado, alternatives);
console.log(`segment: ${r2.segment} | productWeightedScore: ${r2.productWeightedScore} | bestRival: ${r2.bestRival} (${r2.bestRivalWeightedScore}) | fitsSegment: ${r2.fitsSegment}\n`);
console.table(r2.byDimension.map((d) => ({ dimension: d.dimension, weight: d.weight, product: d.productScore, bestRival: `${d.bestRivalName}:${d.bestRivalScore}`, wins: d.wins })));

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

=== positionFit: explorers ===

segment: explorers | productWeightedScore: 7.65 | bestRival: localShop (6) | fitsSegment: true

┌─────────┬────────────────────┬────────┬─────────┬──────────────────────┬───────┐
│ (index) │     dimension      │ weight │ product │      bestRival       │ wins  │
├─────────┼────────────────────┼────────┼─────────┼──────────────────────┼───────┤
│    0    │ 'curatedDiscovery' │  0.4   │    9    │    'localShop:6'     │ true  │
│    1    │   'sellerTrust'    │  0.3   │    8    │    'localShop:9'     │ false │
│    2    │  'catalogBreadth'  │  0.1   │    6    │ 'genericMegastore:9' │ false │
│    3    │      'price'       │  0.1   │    5    │ 'genericMegastore:8' │ false │
│    4    │  'deliverySpeed'   │  0.05  │    5    │ 'genericMegastore:9' │ false │
│    5    │   'convenience'    │  0.05  │    6    │ 'genericMegastore:8' │ false │
└─────────┴────────────────────┴────────┴─────────┴──────────────────────┴───────┘

=== positionFit: exactSkuShoppers ===

segment: exactSkuShoppers | productWeightedScore: 5.3 | bestRival: genericMegastore (8.45) | fitsSegment: false

┌─────────┬──────────────────┬────────┬─────────┬──────────────────────┬───────┐
│ (index) │    dimension     │ weight │ product │      bestRival       │ wins  │
├─────────┼──────────────────┼────────┼─────────┼──────────────────────┼───────┤
│    0    │ 'catalogBreadth' │  0.1   │    6    │ 'genericMegastore:9' │ false │
│    1    │     'price'      │  0.35  │    5    │ 'genericMegastore:8' │ false │
│    2    │ 'deliverySpeed'  │  0.35  │    5    │ 'genericMegastore:9' │ false │
│    3    │  'convenience'   │  0.2   │    6    │ 'genericMegastore:8' │ false │
└─────────┴──────────────────┴────────┴─────────┴──────────────────────┴───────┘

Mira con calma lo que revela el desglose, porque es el punto entero de la lección: para explorers, Mercado solo gana en UNA de las seis dimensiones — curatedDiscovery, con 9 contra el mejor rival, 6. En las otras cinco, Mercado pierde, algunas por márgenes grandes (catalogBreadth: 6 contra 9). Y aun así, fitsSegment: true — Mercado gana el segmento completo. ¿Por qué? Porque esa única dimensión donde gana tiene peso 0.4 — el 40% de lo que le importa a este comprador —, mientras que las cinco dimensiones donde pierde suman apenas 0.6 de peso combinado, repartido en trozos chicos. Ganar mucho en lo que más importa vale más que perder poco en cinco cosas que casi no importan.

Para exactSkuShoppers, la historia se invierte por completo. Mercado ni siquiera aparece en curatedDiscovery o sellerTrust — este segmento les asigna peso 0, literalmente no le importan, así que el modelo ni las evalúa. Lo que sí le importa (price, deliverySpeed, con 0.35 cada una) es exactamente donde Mercado es más débil frente al megastore genérico. No hay ninguna dimensión donde Mercado gane para este comprador — pierde las cuatro, y pierde el segmento completo, 5.3 contra 8.45. Este no es un empate cerrado que un poco más de esfuerzo resolvería: es una derrota estructural, porque el producto nunca se construyó pensando en este job.

Profundización: "podría comprarlo" no es lo mismo que "es nuestro segmento"

Casi cualquier persona con una tarjeta de crédito podría, técnicamente, comprar en Mercado. Eso es mercado potencial (total addressable market), y es una cifra real que le importa a un inversionista. Pero "podría comprar" no es la pregunta que este módulo responde — la pregunta es "¿para quién funciona mejor Mercado que las alternativas, hoy, tal como está construido?" — y esa pregunta, como acabas de ver ejecutada, tiene una respuesta muy distinta según el comprador. exactSkuShoppers podría comprar en Mercado. Podría, incluso, tener una experiencia aceptable. Pero mientras el megastore genérico exista y le gane con claridad en las cuatro dimensiones que a este comprador le importan, cada peso que Mercado invierta en intentar convencerlo es un peso mal invertido — hay un rival estructuralmente mejor posicionado para ese job específico.

Elegir el segmento objetivo, entonces, no es una descripción demográfica ("mujeres de 25 a 40 años, urbanas, con ingreso medio") — es una elección de para qué job específico vas a ser la mejor opción del mercado, sabiendo que eso implica no serlo para otros jobs igual de legítimos. La lección 4 profundiza esta idea con el vocabulario completo de jobs-to-be-done; por ahora, quédate con la pregunta que positionFit responde: no "¿quién podría comprarlo?", sino "¿para quién ganamos?".

Errores comunes

Querer ser "para todos" y terminar no siendo para nadie. Qué pasa: en la definición del segmento objetivo, el equipo evita nombrar exclusiones porque "no queremos cerrarle la puerta a nadie", y termina con una descripción tan amplia ("cualquiera que quiera comprar algo en línea") que cabe cualquier persona del planeta. Por qué pasa: nombrar a quién NO le sirves se siente como perder ventas potenciales, aunque en la práctica esas ventas nunca estaban aseguradas — solo se sentía más cómodo no decirlo en voz alta. Cómo detectarlo: pregunta si tu segmento objetivo podría describir, sin cambiar una palabra, a la competencia entera de tu industria. Si "cualquiera que compre en línea" también describe perfectamente al cliente del megastore genérico, no elegiste nada — describiste el mercado completo. Cómo corregirlo: usa positionFit como prueba de fuego — si no puedes nombrar al menos un segmento real para el cual tu producto pierda con claridad (como exactSkuShoppers pierde aquí), tu definición de "para quién es" probablemente todavía es un poncho, no un traje a medida.

Confundir "podría comprarlo" (mercado potencial) con "es nuestro segmento" (a quién servimos mejor). Qué pasa: se presenta el tamaño del mercado potencial (todos los compradores en línea de la región) como si fuera el segmento objetivo, sin distinguir entre "quién podría entrar por la puerta" y "para quién construimos la tienda". Por qué pasa: un mercado potencial grande suena mejor en una presentación a inversionistas que un segmento angosto, aunque el segmento angosto sea la única parte de ese mercado donde el producto de verdad gana. Cómo detectarlo: viste exactSkuShoppers en el ejemplo trabajado — es, sin duda, parte del mercado potencial de Mercado (compra en línea, tiene dinero, existe), y aun así positionFit lo descarta con claridad como segmento objetivo. Si tu "segmento objetivo" no distingue entre estas dos cosas, confundiste el tamaño del océano con el lugar exacto donde tu bote flota mejor. Cómo corregirlo: reserva "mercado potencial" para el tamaño de la oportunidad, y "segmento objetivo" solo para la porción de ese mercado donde positionFit (o su equivalente en juicio humano) devolvería true.

Definir el segmento con tanta vaguedad que no se puede nombrar, con la misma claridad, a quién excluye. Qué pasa: el segmento objetivo se redacta con adjetivos ("compradores exigentes", "clientes de calidad") que suenan específicos pero no permiten decir, sin ambigüedad, quién queda fuera. Por qué pasa: los adjetivos vagos son fáciles de escribir y difíciles de objetar — nadie discute "queremos clientes exigentes", porque la frase no compromete a nada verificable. Cómo detectarlo: pídele a alguien del equipo que, a partir de la definición del segmento, te diga qué comprador específico quedaría excluido. Si duda, o si nombra algo tan obvio como "alguien sin dinero", la definición no tiene el filo necesario. Cómo corregirlo: define el segmento por el job que resuelve mejor (como en el ejemplo trabajado: explorers, gente que no sabe exactamente qué busca) y nombra explícitamente su opuesto (exactSkuShoppers, gente que sabe exactamente qué SKU quiere). Un segmento sin un opuesto nombrado no es una elección — es una aspiración sin filo, el mismo error que el módulo 1 llamó bad strategy.

Ejercicios

Ejercicio 1 — Predice antes de correr. Un tercer segmento, bargainHunters (cazadores de ofertas), define sus pesos así: { curatedDiscovery: 0, sellerTrust: 0, catalogBreadth: 0.15, price: 0.55, deliverySpeed: 0.15, convenience: 0.15 }. Sin ejecutar nada, predice: ¿positionFit devolvería fitsSegment: true o false para Mercado contra este segmento? Justifica con al menos una dimensión específica.

Ver solución

fitsSegment: false. El peso dominante (0.55) recae en price, la dimensión donde Mercado es más débil frente al megastore genérico (5 contra 8) — y curatedDiscovery, la única dimensión donde Mercado gana, tiene peso 0 para este segmento, así que ni siquiera se evalúa. Es, en esencia, una variación de exactSkuShoppers: otro comprador para quien Mercado pierde estructuralmente, porque lo que le importa (precio) es justo donde el megastore genérico domina.

Ejercicio 2 — Diseña un segmento nuevo donde Mercado gane aún más. Escribe los weights de un cuarto segmento, distinto de explorers, para el cual positionFit devolvería fitsSegment: true con un margen todavía mayor que 1.65 (7.65 − 6, el margen de explorers). Pista: mira qué dimensión tiene el peor rival más débil comparado con Mercado.

Ver solución

Una opción razonable: un segmento que valore casi exclusivamente sellerTrust y curatedDiscovery (donde Mercado saca 8 y 9) y casi nada las demás dimensiones, por ejemplo { curatedDiscovery: 0.5, sellerTrust: 0.4, catalogBreadth: 0.05, price: 0.05, deliverySpeed: 0, convenience: 0 }. El peor rival en sellerTrust es localShop con 9 (Mercado pierde ahí, 8 contra 9), pero el peso dominante sigue en curatedDiscovery, donde Mercado gana por el margen más grande de las seis dimensiones (9 contra 6). Correr positionFit con estos pesos debería dar un productWeightedScore más alto que 7.65, confirmando la intuición: concentrar el peso en la dimensión donde el margen de victoria es mayor produce el ajuste más fuerte.

Ejercicio 3 — Defiende la exclusión frente a ventas. Un compañero del equipo de ventas de Mercado pregunta por qué el equipo de producto no está invirtiendo en atraer a exactSkuShoppers, "si total, ya están comprando en línea de todos modos". Escribe, en 2-3 frases, tu respuesta usando el vocabulario exacto de esta lección (segmento vs. mercado potencial, la dimensión con peso 0, la derrota estructural).

Ver solución

Un ejemplo de respuesta: "Tienes razón en que son parte de nuestro mercado potencial — cualquiera con tarjeta de crédito lo es. Pero no es nuestro segmento objetivo: para alguien que busca un SKU exacto, curatedDiscovery y sellerTrust —justo donde Mercado es más fuerte— valen cero, y lo que sí le importa —precio y velocidad de entrega— es exactamente donde el megastore genérico nos gana con claridad. No es que nos falte esfuerzo de marketing ahí — es una derrota estructural del producto tal como está construido. Cada peso que gastemos en ese comprador es un peso que no invertimos en explorers, donde sí ganamos con margen real."

Resumen y siguiente paso

El segmento objetivo no es una lista de quién podría comprar tu producto — es una elección, con datos detrás, de para quién tu producto gana frente a las alternativas reales, aceptando que esa misma elección implica perder frente a otros compradores igual de legítimos. Viste positionFit ejecutado dos veces sobre el mismo Mercado: gana con claridad para explorers (ganando en una sola dimensión, pero la que más pesa), y pierde con claridad para exactSkuShoppers (perdiendo en las cuatro dimensiones que a ese comprador le importan). Esa asimetría, no una descripción demográfica bonita, es lo que define un segmento objetivo real.

Antes de avanzar deberías poder: explicar por qué "podría comprarlo" no es lo mismo que "es nuestro segmento"; y nombrar, para cualquier producto que conozcas, un comprador real para el cual ese producto pierde estructuralmente.

La lección 3 toma este mismo par de segmentos y agrega una tercera comparación — el comprador "promedio", sin ningún segmento específico — para mostrar algo todavía más incómodo: ni siquiera apuntar a "todos los compradores por igual" es una apuesta ganadora. Ahí conoces el beachhead de Geoffrey Moore: por qué angosto, elegido con precisión, le gana a amplio, elegido por default.

Recursos

  • April Dunford, Obviously Awesomeaprildunford.com/books. El capítulo sobre "mejor competitive alternative" es, en esencia, el mismo ejercicio que positionFit automatiza: comparar contra lo que el segmento usaría si tu producto no existiera. En inglés.
  • Clayton M. Christensen y Taddy Hall, "Know Your Customers' Jobs to Be Done" — hbr.org/2016/09/know-your-customers-jobs-to-be-done. La distinción entre "quién" (demografía) y "qué job" es el argumento central de este artículo, y anticipa exactamente el error común #3 de esta lección. En inglés.
  • Marty Cagan (SVPG), "Product Market Fit" — svpg.com/product-market-fit. Cagan describe el mismo patrón desde el lado de producto: ganar un segmento (persona o vertical) a la vez, en vez de perseguir a todos simultáneamente. En inglés.
  • Roger Martin, "Decoding the Strategy Choice Cascade" — rogermartin.medium.com/decoding-the-strategy-choice-cascade-475d40555eb1. "¿Dónde jugamos?" es, en el vocabulario de Martin, la misma pregunta que esta lección responde a nivel de segmento — y "dónde jugamos" siempre implica, con la misma fuerza, dónde no. En inglés.