Módulo 6: Moats And Defensibility

Mini-proyecto: la auditoría de moats de Mercado

Descripción

Es momento de juntar el módulo entero en un solo artefacto: la auditoría completa de moats de Mercado. Aprendiste a definir con precisión qué es un moat y qué no lo es (L2), recorriste los cinco tipos que sí pueden llegar a 'moat' —network effects (L3), switching costs (L4), datos y economías de escala (L5)—, viste por qué una feature nunca cruza el umbral sin importar cuánto haya costado construirla (L6), y viste que el tipo de una ventaja no lo decide la estrategia, lo decide una decisión de arquitectura tomada por un ingeniero (L7). En este proyecto corres moatScore sobre el inventario completo de ventajas candidatas de Mercado —ocho en total, recogidas de toda la guía: la visión (módulo 2), la diferenciación (módulo 4), y las que este módulo fue nombrando una por una— y cierras con el veredicto que ese resultado exige: cuáles son moats reales, cuáles apenas alcanzan, y cuáles, con toda honestidad, no lo son todavía.

Tu entregable tiene tres partes, y las tres se verifican con código, no solo se redactan: (1) el inventario completo de ocho candidatos, con su tipo y sus parámetros; (2) la auditoría completa, ejecutada con moatScore; y (3) la clasificación final en tres grupos —moats reales, weak-moats, y lo que no es un moat— con la lectura honesta de qué implica cada grupo para lo que Mercado debería defender y lo que no debería confundir con defensa.

Conexión con el módulo. Este proyecto no introduce ningún tipo nuevo — reúne, en una sola auditoría verificada, los seis tipos que moatScore reconoce desde la lección 2. Es, además, el puente hacia el resto de la guía: el inventario que armas aquí —qué es moat real y qué no— es exactamente el insumo que el módulo 7 necesita para strategicFilter: una apuesta del backlog que profundiza un moat real merece prioridad distinta a una que solo pule una feature copiable.

Una analogía: el ingeniero militar que inspecciona el castillo entero

El módulo abrió con dos castillos que se veían casi idénticos desde el camino. Este proyecto es el momento de mandar a un ingeniero militar a inspeccionar, estructura por estructura, un castillo entero —no solo la torre que todos asumen que es la más fuerte, ni solo el foso que ya se sabe que es real—. El ingeniero recorre cada muro, cada puerta, cada torre, y para cada una hace la misma prueba: golpea la piedra, mide el agua, revisa los cimientos — sin dejarse impresionar por lo bonita que se ve una fachada ni desanimar porque una estructura no tenga nombre elegante. Al final del recorrido, entrega un solo documento: qué partes del castillo resisten un asedio en serio, y qué partes son, con toda honestidad, decoración bien pintada que nunca se puso a prueba.

Eso es exactamente lo que vas a hacer en este proyecto: no vas a auditar solo sellerNetwork y purchaseData —los dos candidatos "obvios" que el módulo repitió una y otra vez—, vas a poner el mismo criterio sobre todo el inventario de Mercado, incluida la diferenciación que el módulo 4 celebró con orgullo. Un ingeniero militar honesto no se salta la torre más fotografiada del castillo solo porque todos asumen que es la más fuerte.

La solución de referencia, verificada

Parte 1 — El inventario completo, ocho candidatos

Reunimos ocho ventajas candidatas de Mercado, recogidas de toda la guía. Cuatro ya las conoces por su nombre: sellerNetwork (la red de vendedores, módulo 1 y lección 2), purchaseData (los datos de compra, lección 2 y 5), fasterCheckout (el ítem de backlog del módulo 1, evaluado como feature en la lección 6) y curatedDiscovery (la diferenciación central del módulo 4, evaluada aquí como el algoritmo puro, sin el ciclo de datos que la lección 6 mostró que le falta). Cuatro son nuevas para la auditoría: logisticsNetwork (la red de bodegas y rutas, tipo scaleEconomies, de la lección 5), sellerToolsWorkflow (la integración profunda del panel de vendedores, tipo switchingCost, de las lecciones 4 y 7), localSellerTrust (la confianza en vendedores locales que la visión de Mercado —módulo 2— nombró explícitamente como uno de sus includes, evaluada aquí como tipo brand) y mercadoBrand (el reconocimiento general de marca de Mercado, sin poder de precio, como caso de control).

const candidates = [
  { name: 'sellerNetwork', type: 'networkEffect', sides: 2, localDecay: false },
  { name: 'purchaseData', type: 'dataMoat', feedbackLoop: true, uniqueToUs: true },
  { name: 'logisticsNetwork', type: 'scaleEconomies', fixedCostShare: 0.8 },
  { name: 'sellerToolsWorkflow', type: 'switchingCost', depth: 'dataAndWorkflow' },
  { name: 'localSellerTrust', type: 'brand', pricingPower: true },
  { name: 'curatedDiscovery', type: 'feature', timeToCopyWeekends: 3 },
  { name: 'fasterCheckout', type: 'feature', timeToCopyWeekends: 1 },
  { name: 'mercadoBrand', type: 'brand', pricingPower: false },
];

Verifica el inventario contra los criterios del módulo antes de continuar: incluye los cinco tipos que sí pueden llegar a moat (L2 a L5) y el tipo de control (L6), no se detiene solo en las dos ventajas más repetidas del módulo, e incluye explícitamente la diferenciación de M4 en vez de asumir, sin probarlo, que "ya se sabe" que es un moat.

Parte 2 — La auditoría completa, ejecutada en Node

Corremos moatScore sobre el inventario completo y agrupamos el resultado en los tres veredictos posibles.

// Modelo pedagogico: puntua la DURABILIDAD (0-10) de una ventaja competitiva.
// Reutilizado sin cambios desde la leccion 2 -- este proyecto lo corre sobre
// el inventario COMPLETO de candidatos a moat de Mercado.
function moatScore(advantage) {
  const { name, type } = advantage;
  let durability;
  let rationale;

  switch (type) {
    case 'networkEffect': {
      const { sides, localDecay } = advantage;
      durability = sides >= 2 ? 8 : 5;
      if (localDecay) durability -= 3;
      rationale = `network effect ${sides}-sided${localDecay ? ', con decay local' : ', sin decay'}`;
      break;
    }
    case 'switchingCost': {
      const { depth } = advantage;
      const depthScore = { contractual: 3, habit: 5, dataAndWorkflow: 8 };
      durability = depthScore[depth] ?? 3;
      rationale = `switching cost de profundidad '${depth}'`;
      break;
    }
    case 'scaleEconomies': {
      const { fixedCostShare } = advantage;
      durability = Math.round(fixedCostShare * 10);
      rationale = `economias de escala con ${Math.round(fixedCostShare * 100)}% de costo fijo`;
      break;
    }
    case 'dataMoat': {
      const { feedbackLoop, uniqueToUs } = advantage;
      durability = feedbackLoop ? 7 : 2;
      if (feedbackLoop && uniqueToUs) durability += 2;
      rationale = feedbackLoop
        ? `los datos alimentan un loop que mejora el producto${uniqueToUs ? ' y son exclusivos' : ''}`
        : 'los datos se acumulan pero no retroalimentan el producto';
      break;
    }
    case 'brand': {
      const { pricingPower } = advantage;
      durability = pricingPower ? 6 : 2;
      rationale = pricingPower
        ? 'la marca cambia el comportamiento de compra (tolera precio o fricción)'
        : 'la marca es reconocida pero no cambia comportamiento de compra';
      break;
    }
    case 'feature': {
      const { timeToCopyWeekends } = advantage;
      durability = Math.max(0, Math.min(3, timeToCopyWeekends));
      rationale = `feature copiable en ~${timeToCopyWeekends} fin(es) de semana`;
      break;
    }
    default: {
      durability = 0;
      rationale = 'tipo de ventaja desconocido';
    }
  }

  durability = Math.max(0, Math.min(10, durability));
  const verdict = durability >= 7 ? 'moat' : durability >= 4 ? 'weak-moat' : 'not-a-moat';
  return { name, type, durability, verdict, rationale };
}

const candidates = [
  { name: 'sellerNetwork', type: 'networkEffect', sides: 2, localDecay: false },
  { name: 'purchaseData', type: 'dataMoat', feedbackLoop: true, uniqueToUs: true },
  { name: 'logisticsNetwork', type: 'scaleEconomies', fixedCostShare: 0.8 },
  { name: 'sellerToolsWorkflow', type: 'switchingCost', depth: 'dataAndWorkflow' },
  { name: 'localSellerTrust', type: 'brand', pricingPower: true },
  { name: 'curatedDiscovery', type: 'feature', timeToCopyWeekends: 3 },
  { name: 'fasterCheckout', type: 'feature', timeToCopyWeekends: 1 },
  { name: 'mercadoBrand', type: 'brand', pricingPower: false },
];

console.log('=== La auditoría de moats de Mercado: 8 candidatos, un solo criterio ===\n');
const audit = candidates.map(moatScore);
console.table(audit);

const realMoats = audit.filter((a) => a.verdict === 'moat');
const weakMoats = audit.filter((a) => a.verdict === 'weak-moat');
const notMoats = audit.filter((a) => a.verdict === 'not-a-moat');

console.log(`\nMoats reales (${realMoats.length}/${candidates.length}): ${realMoats.map((a) => a.name).join(', ')}`);
console.log(`Weak moats (${weakMoats.length}/${candidates.length}): ${weakMoats.map((a) => a.name).join(', ')}`);
console.log(`No son moat (${notMoats.length}/${candidates.length}): ${notMoats.map((a) => a.name).join(', ')}`);

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

=== La auditoría de moats de Mercado: 8 candidatos, un solo criterio ===

┌─────────┬───────────────────────┬──────────────────┬────────────┬──────────────┬──────────────────────────────────────────────────────────────────────────┐
│ (index) │         name          │       type       │ durability │   verdict    │                                rationale                                 │
├─────────┼───────────────────────┼──────────────────┼────────────┼──────────────┼──────────────────────────────────────────────────────────────────────────┤
│    0    │    'sellerNetwork'    │ 'networkEffect'  │     8      │    'moat'    │                   'network effect 2-sided, sin decay'                    │
│    1    │    'purchaseData'     │    'dataMoat'    │     9      │    'moat'    │  'los datos alimentan un loop que mejora el producto y son exclusivos'   │
│    2    │  'logisticsNetwork'   │ 'scaleEconomies' │     8      │    'moat'    │               'economias de escala con 80% de costo fijo'                │
│    3    │ 'sellerToolsWorkflow' │ 'switchingCost'  │     8      │    'moat'    │            "switching cost de profundidad 'dataAndWorkflow'"             │
│    4    │  'localSellerTrust'   │     'brand'      │     6      │ 'weak-moat'  │ 'la marca cambia el comportamiento de compra (tolera precio o fricción)' │
│    5    │  'curatedDiscovery'   │    'feature'     │     3      │ 'not-a-moat' │                'feature copiable en ~3 fin(es) de semana'                │
│    6    │   'fasterCheckout'    │    'feature'     │     1      │ 'not-a-moat' │                'feature copiable en ~1 fin(es) de semana'                │
│    7    │    'mercadoBrand'     │     'brand'      │     2      │ 'not-a-moat' │     'la marca es reconocida pero no cambia comportamiento de compra'     │
└─────────┴───────────────────────┴──────────────────┴────────────┴──────────────┴──────────────────────────────────────────────────────────────────────────┘

Moats reales (4/8): sellerNetwork, purchaseData, logisticsNetwork, sellerToolsWorkflow
Weak moats (1/8): localSellerTrust
No son moat (3/8): curatedDiscovery, fasterCheckout, mercadoBrand

Parte 3 — La lectura honesta del resultado

Cuatro moats reales, de cuatro mecanismos distintos. sellerNetwork (network effect de dos lados), purchaseData (datos con ciclo real), logisticsNetwork (economía de escala genuina) y sellerToolsWorkflow (switching cost ganado, no impuesto) cruzan el umbral de 7, cada uno por una razón estructural distinta. Esto, por sí solo, ya es una noticia mejor de lo que un vistazo superficial habría anticipado: Mercado no depende de un solo tipo de ventaja — tiene cuatro mecanismos independientes, y un competidor que lograra erosionar uno seguiría enfrentando los otros tres.

Un weak-moat, exactamente donde una intuición apresurada lo habría llamado fuerte. localSellerTrust —parte explícita de la visión de Mercado desde el módulo 2— saca durability: 6: una marca real, con poder de precio, pero por debajo del umbral de moat completo. No es un resultado para descartar ni para inflar — es información honesta de que esta ventaja, hoy, es real pero frágil, y candidata natural a profundizarse (quizás conectándola a un mecanismo de switching cost o de datos, la misma lógica de la lección 7).

El resultado que más debería hacer pausar a cualquiera del equipo: curatedDiscovery no es un moat. La diferenciación que el módulo 4 celebró como el corazón de la propuesta de valor de Mercado —"descubres lo que no sabías que querías"— saca durability: 3, evaluada como el algoritmo puro de curaduría. Esto no invalida el módulo 4: la diferenciación sigue siendo real y sigue sirviendo al segmento mejor que las alternativas. Lo que este resultado dice, con precisión, es que esa diferenciación todavía no está protegida — hoy vive como código que cualquier competidor con un buen equipo podría replicar en unas semanas, no como un mecanismo estructural. La lección 7 ya mostró el camino: conectar curatedDiscovery al ciclo de purchaseData —que sí es un moat real, durability: 9— movería esa diferenciación de 'feature' a 'dataMoat', y es exactamente la clase de apuesta de ingeniería que el módulo 7 (strategicFilter) va a evaluar contra el resto del backlog de Mercado.

Errores comunes

Auditar solo las ventajas "famosas" del módulo y dejar puntos ciegos. Qué pasa: el equipo repite el análisis de sellerNetwork y purchaseData —los dos candidatos que aparecieron una y otra vez en las lecciones— y da por cerrada la auditoría, sin poner el mismo criterio sobre la diferenciación de otros módulos o sobre la marca, que nunca se sometieron formalmente a moatScore. Por qué pasa: los ejemplos repetidos se sienten "ya resueltos", y es más cómodo confirmar lo que ya se sabe que poner a prueba lo que se asumía sin verificar. Cómo detectarlo: si tu inventario de auditoría tiene menos de seis candidatos, o si excluye la diferenciación central del producto, la auditoría tiene puntos ciegos. Cómo corregirlo: exige que el inventario cubra, como mínimo, una ventaja de cada módulo anterior de la guía —visión, diferenciación, competencia— antes de darla por completa, como hizo este proyecto con curatedDiscovery y localSellerTrust.

Tratar weak-moat como si fuera lo mismo que moat o lo mismo que not-a-moat. Qué pasa: al presentar los resultados, el equipo colapsa localSellerTrust (weak-moat) en la misma categoría que los cuatro moats reales —"tenemos cinco moats"— o, en la dirección contraria, lo descarta junto con las features —"solo tenemos cuatro cosas que valen algo"—, perdiendo la información específica que el veredicto intermedio aporta. Por qué pasa: una clasificación de tres niveles es más incómoda de comunicar que una de dos, y la tentación de simplificar a "sí o no" borra justamente el matiz que el modelo se esforzó en capturar. Cómo detectarlo: si la comunicación de resultados a otros equipos usa solo dos categorías donde el modelo produjo tres, se perdió información real en la traducción. Cómo corregirlo: comunica siempre los tres grupos por separado, con el weak-moat explícitamente marcado como "real pero frágil, candidato a profundizar" — ni moat garantizado, ni feature descartable.

Cerrar la auditoría sin conectarla con qué construir después. Qué pasa: el equipo entrega la tabla completa de moatScore, la presenta en una reunión, y ahí se detiene — sin traducir el resultado en una recomendación concreta sobre qué iniciativas del backlog priorizar para defender los moats reales o profundizar los débiles. Por qué pasa: la auditoría en sí misma se siente como un entregable completo —hay una tabla, hay números, hay veredictos—, y falta el paso de conectar ese diagnóstico con una decisión real de ingeniería. Cómo detectarlo: si nadie en el equipo puede nombrar, después de ver esta auditoría, una sola apuesta del backlog que debería subir de prioridad por profundizar un moat real, el análisis se quedó en diagnóstico puro. Cómo corregirlo: usa el resultado de este proyecto como el insumo de entrada del módulo 7 —strategicFilter sobre el mismo backlog de Mercado que ya conoces (fasterCheckout, recommendations, sellerTools, reviews, improvedSearch)— para decidir, con este inventario de moats ya hecho, qué apuestas sirven la estrategia y cuáles no, aunque tengan buen RICE.

Ejercicios

Ejercicio 1 — Agrega un noveno candidato. Mercado está evaluando lanzar un programa de certificación para vendedores destacados —una insignia visible que requiere cumplir ciertos estándares de calidad y tiempo de respuesta—. Antes de que nadie construya nada, ¿qué tipo de moatScore le asignarías, y con qué parámetros? Escribe el objeto de datos siguiendo el patrón del inventario, agrégalo al arreglo candidates, y predice su durability y verdict antes de correr el código.

Ver solución

No hay una única respuesta correcta — depende de cómo se construya el programa, que es justo el punto de la lección 7. Una versión razonable, evaluada como está descrita (una insignia visible, sin mecanismo adicional): { name: 'sellerCertificationBadge', type: 'brand', pricingPower: false } — es una señal de confianza para el comprador, pero tal como está descrita no dice si cambia el comportamiento de compra (¿los compradores pagan más o eligen más seguido a un vendedor certificado?) ni si retroalimenta ningún otro sistema. Con pricingPower: false, durability: 2, verdict: 'not-a-moat' — el mismo resultado que mercadoBrand. Si, en cambio, la certificación alimentara el ranking de búsqueda (como el ejercicio 3 de la lección 5 propuso para las reseñas), el tipo correcto pasaría a dataMoat con feedbackLoop: true, y el resultado cambiaría por completo — la misma lección de la 7, aplicada a un candidato nuevo.

Ejercicio 2 — El escenario de erosión. Imagina que, dentro de dos años, MegaStoreGenerico lanza su propio sistema de logística con bodegas propias, reduciendo su costo de envío casi al nivel del de Mercado. Si eso ocurriera, ¿qué candidato de este inventario perdería su veredicto de 'moat', y a qué nuevo fixedCostShare correspondería, aproximadamente, para que el verdict cayera a 'weak-moat'?

Ver solución

El candidato afectado es logisticsNetwork. Que un competidor construya su propia infraestructura no cambia el fixedCostShare de Mercado directamente —Mercado seguiría teniendo la misma estructura de costo—, pero si el ejercicio se interpreta como "la ventaja relativa de Mercado se erosiona porque ya no es el único con esa estructura de costo", la forma correcta de modelarlo en moatScore sería reconocer que la durabilidad real de una economía de escala depende de que un competidor no pueda replicarla fácilmente — y aquí sí puede. Usando la fórmula literal, para que durability caiga de 8 a un 'weak-moat' (durability entre 4 y 6), fixedCostShare tendría que bajar a un valor entre 0.4 y 0.6 — por ejemplo, fixedCostShare: 0.5 da durability: 5. La lección práctica: el modelo puntúa la estructura de costo de Mercado, pero la pregunta de si esa estructura sigue siendo una ventaja relativa frente a un competidor específico es una capa de análisis adicional que el equipo de estrategia sigue teniendo que hacer con criterio, no solo con la fórmula.

Ejercicio 3 — Presenta la auditoría al equipo fundador de Mercado. Escribe, en un párrafo, cómo presentarías esta auditoría completa al equipo fundador, incluyendo qué recomendación concreta harías sobre curatedDiscovery —el resultado más incómodo de la tabla— y sobre qué hacer con localSellerTrust, el único weak-moat.

Ver solución

Un ejemplo de respuesta: "Auditamos las ocho ventajas que más se mencionan cuando hablamos de por qué Mercado va a ganar, con el mismo criterio para cada una: ¿esto sobrevive a que alguien lo ataque en serio? La buena noticia: tenemos cuatro moats reales, por cuatro mecanismos distintos e independientes —nuestra red de vendedores, nuestros datos de compra, nuestra logística y la profundidad de integración de nuestras herramientas para vendedores—. La noticia que exige una decisión: nuestra curaduría, la pieza central de por qué decimos que somos distintos, hoy no es un moat — es un algoritmo bueno que cualquier competidor con un buen equipo de ingeniería podría replicar en unas semanas. No proponemos abandonar la curaduría; proponemos priorizar, en el próximo trimestre, conectarla al mismo ciclo de datos de compra que ya sabemos que funciona, para que deje de ser una feature y se convierta en la quinta pieza defendible. Y la confianza en vendedores locales, aunque real, está a medio camino — vale la pena invertir en profundizarla antes de contar con ella como si ya fuera un moat completo."

Resumen y siguiente paso

En este mini-proyecto reuniste el módulo completo en una sola auditoría: ocho candidatos de moat de Mercado, recogidos de toda la guía, evaluados con el mismo criterio —moatScore— sin excepciones ni favoritismos por lo repetido o lo célebre. El resultado: cuatro moats reales por cuatro mecanismos distintos, un weak-moat real pero frágil, y el hallazgo más importante del proyecto — la diferenciación que el módulo 4 celebró como el corazón de Mercado todavía no está protegida por ningún mecanismo estructural. Con esto cierras el módulo 6.

Ahora tienes, para cualquier producto que analices en tu propio trabajo, un instrumento completo para responder la pregunta que abrió el módulo: "¿esto es foso, o es decoración?" — con un criterio ejecutable, no una impresión.

Hacia dónde sigues. Ya sabes qué defiende a Mercado de verdad y qué todavía no. La pregunta que sigue: ¿cómo se traduce todo esto —visión, posicionamiento, diferenciación, competencia y ahora moats— en qué construir primero? Esa es la pregunta del módulo 7 (strategy-to-roadmap): el filtro estratégico, strategicFilter, que cruza este mismo inventario de moats contra el backlog de Mercado que ya conoces (fasterCheckout, recommendations, sellerTools, reviews, improvedSearch) para decidir qué apuestas sirven la estrategia —y profundizan un moat real— y cuáles se caen, aunque tengan buen RICE.

Recursos

  • Hamilton Helmer, 7 Powers: The Foundations of Business Strategy7powers.com. El libro que le dio su vocabulario técnico a todo el módulo — network economies, switching costs, scale economies y branding, los mismos cuatro mecanismos que resultaron ser moats reales en esta auditoría. En inglés.
  • Investopedia, "Economic Moat" — investopedia.com/terms/e/economicmoat.asp. La metáfora completa del foso, de Warren Buffett a la calificación de Morningstar, para releer ahora que tienes el inventario completo de Mercado clasificado con el mismo criterio. En inglés.
  • Roger Martin, "Playing to Win" — rogerlmartin.com/lets-read/playing-to-win. El marco de "dónde jugar / cómo ganar" del módulo 1, para recordar que un inventario de moats sin conexión a una decisión de "cómo ganar" se queda en diagnóstico — el puente exacto hacia el módulo 7. En inglés.