Módulo 6: Moats And Defensibility

Network effects: el teléfono que vale más cuantos más lo tienen

Descripción

Un network effect ocurre cuando cada usuario nuevo hace el producto más valioso para los usuarios que ya estaban ahí — no como efecto secundario agradable, sino como el mecanismo central de por qué el producto funciona. No es lo mismo que "tener muchos usuarios". Un sitio de noticias con diez millones de lectores puede ser un gran negocio, pero si la experiencia del lector número 3 no mejora en nada porque el lector número 4 se registró, ahí no hay network effect — hay, simplemente, una audiencia grande. La pregunta que separa una cosa de la otra, y que esta lección instala con precisión: ¿el usuario nuevo hace que el producto mejore para los demás, o solo se suma a la cuenta de usuarios activos?

Esta lección abre el primero de los cinco tipos de moat que moatScore reconoce, el que ya viste puntuado dos veces —en el módulo 1 y en la lección 2— sin que se explicara todavía la mecánica interna de sides y localDecay. Sales de aquí sabiendo distinguir un network effect directo de uno indirecto, por qué se refuerzan solos una vez que arrancan, y por qué esa misma fuerza que los hace casi imposibles de copiar es la que los hace brutalmente difíciles de arrancar.

Conexión con el módulo. La lección 2 mostró sellerNetwork con durability: 8 sin abrir la caja de por qué sides: 2 y localDecay: false producían exactamente ese número. Esta lección abre esa caja, y además le agrega una tercera pregunta que la lección 2 no tocó: ¿qué pasa cuando el mismo tipo de ventaja se fragmenta geográficamente? La lección 4 hace lo mismo con switchingCost, y la lección 5 con dataMoat y scaleEconomies — cada lección de tipo, uno por uno.

Una analogía cotidiana: el teléfono que no sirve si eres el único que lo tiene

Imagina que eres la primera persona en el mundo con un teléfono. Lo pagaste caro, funciona perfecto, la señal es excelente — y es completamente inútil, porque no hay nadie a quien llamar. El día que tu vecino compra el segundo teléfono del mundo, tu teléfono, que no cambió en nada técnicamente, de golpe vale algo: ahora puedes llamar a una persona. El día que cien personas más en tu ciudad tienen uno, tu mismo teléfono —otra vez, sin ningún cambio técnico— vale muchísimo más que el día anterior. Nadie mejoró el aparato. Lo que cambió fue cuántas otras personas lo tienen, y esa es, exactamente, la definición de un network effect: el valor no vive en el producto, vive en la red de gente que lo usa.

Ahora nota la otra cara de la misma moneda, la incómoda: si el valor de tu teléfono depende de que otros lo tengan, entonces el primer teléfono del mundo no vale nada por definición — no porque esté mal diseñado, sino porque la red que le daría valor todavía no existe. Ese es el problema del arranque en frío: la misma propiedad que hace que un network effect, una vez construido, sea casi imposible de copiar —un competidor no puede comprar de la noche a la mañana los millones de personas que ya están en tu red— es la que hace que construirlo desde cero sea, en los primeros días, una apuesta que se siente como venderle teléfonos a nadie.

Ejemplo trabajado: tres redes, la misma pregunta sobre sides y localDecay

Reutilizamos moatScore sin ningún cambio — el mismo modelo completo de la lección 2 — y lo corremos sobre tres ventajas de red distintas de Mercado, elegidas para separar dos preguntas que se confunden fácil: cuántos lados se atraen mutuamente, y si ese efecto se rompe al cruzar una frontera geográfica.

La primera, sellerNetworkNational, es la red de vendedores tal como la conoces: cada comprador nuevo hace que valga más la pena para un vendedor nuevo sumarse (más gente a quien venderle), y cada vendedor nuevo hace que valga más la pena para un comprador nuevo quedarse (más selección, mejores precios por competencia entre vendedores) — dos lados, sides: 2, y el efecto se acumula igual sin importar en qué ciudad del país esté cada usuario, localDecay: false. La segunda, sellerNetworkPerCity, es la misma mecánica de dos lados, pero con una falla estructural: si el algoritmo de Mercado solo conecta compradores con vendedores de su propia ciudad, entonces lanzar en una ciudad nueva significa arrancar la red desde cero ahí, sin que los millones de usuarios que ya existen en el resto del país ayuden en nada — sides: 2, pero localDecay: true. La tercera, sellerOnlyLoyaltyProgram, es un programa de insignias entre vendedores —comparten tips, se referencian clientes entre ellos— que mejora la experiencia de otros vendedores cuando un vendedor nuevo se suma, pero no tiene ningún lado que atraiga compradores de vuelta: un solo lado, sides: 1.

// Modelo pedagogico: puntua la DURABILIDAD (0-10) de una ventaja competitiva.
// Reutilizado sin cambios desde la leccion 2 -- esta leccion NO modifica
// moatScore, solo profundiza en los parametros de type: 'networkEffect'.
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: 'sellerNetworkNational', type: 'networkEffect', sides: 2, localDecay: false },
  { name: 'sellerNetworkPerCity', type: 'networkEffect', sides: 2, localDecay: true },
  { name: 'sellerOnlyLoyaltyProgram', type: 'networkEffect', sides: 1, localDecay: false },
];

console.log('=== Tres redes, misma pregunta: ¿el efecto sobrevive si Mercado se distrae un trimestre? ===\n');
console.table(candidates.map(moatScore));

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

=== Tres redes, misma pregunta: ¿el efecto sobrevive si Mercado se distrae un trimestre? ===

┌─────────┬────────────────────────────┬─────────────────┬────────────┬─────────────┬───────────────────────────────────────────┐
│ (index) │            name            │      type       │ durability │   verdict   │                 rationale                 │
├─────────┼────────────────────────────┼─────────────────┼────────────┼─────────────┼───────────────────────────────────────────┤
│    0    │  'sellerNetworkNational'   │ 'networkEffect' │     8      │   'moat'    │    'network effect 2-sided, sin decay'    │
│    1    │   'sellerNetworkPerCity'   │ 'networkEffect' │     5      │ 'weak-moat' │ 'network effect 2-sided, con decay local' │
│    2    │ 'sellerOnlyLoyaltyProgram' │ 'networkEffect' │     5      │ 'weak-moat' │    'network effect 1-sided, sin decay'    │
└─────────┴────────────────────────────┴─────────────────┴────────────┴─────────────┴───────────────────────────────────────────┘

Mira el resultado con cuidado, porque el empate entre la fila 1 y la fila 2 no es casualidad — es el punto central de la lección, escrito en la fórmula. sellerNetworkPerCity empieza con el mismo potencial que sellerNetworkNational — dos lados, compradores y vendedores atrayéndose mutuamente —, pero el localDecay le resta exactamente 3 puntos, y termina en el mismo durability: 5 que sellerOnlyLoyaltyProgram, una red que nunca tuvo un segundo lado para empezar. La lectura es incómoda pero precisa: un network effect de dos lados que se rompe en cada frontera geográfica vale, en la práctica, lo mismo que un network effect que nunca fue de dos lados. No es "casi tan bueno como" el nacional — es, en términos de durabilidad, un tipo de ventaja distinto y más débil, aunque técnicamente ambos lados existan en el papel.

Profundización: la misma fuerza que lo hace difícil de copiar, lo hace difícil de arrancar

Los network effects tienen una paradoja que vale la pena nombrar en voz alta, porque explica por qué tantos productos con una idea de red genuina mueren antes de que el efecto se note. La fórmula de sides distingue dos formas de compounding: el directo (o de un lado), donde el mismo tipo de usuario se beneficia de que se sumen más usuarios de su mismo tipo —piensa en una libreta de contactos: cada amigo tuyo que se une a la misma app de mensajería te beneficia a ti directamente—, y el indirecto (o cruzado, de dos o más lados), donde un tipo de usuario se beneficia de que se sume el otro tipo — el caso de Mercado: los compradores no se benefician directamente de más compradores, se benefician de más vendedores, y viceversa. Los efectos indirectos suelen ser los más fuertes —por eso sides >= 2 parte de una base de 8, no de 5— pero también son los más difíciles de arrancar, porque necesitas los dos lados a la vez: un marketplace con muchos compradores y pocos vendedores no le sirve a nadie, y uno con muchos vendedores y pocos compradores, tampoco.

Esa dificultad de arranque no es una falla del modelo — es la contracara exacta de la durabilidad. Un competidor bien financiado puede comprar tráfico, contratar al mejor equipo de ingeniería, copiar cada pantalla de tu producto en un fin de semana (el tema de la lección 6) — pero no puede comprar, de un día para otro, que tus mismos vendedores ya confíen en tu plataforma y tus mismos compradores ya la tengan instalada. Cada competidor nuevo tiene que resolver su propio arranque en frío desde cero, sin importar cuánto capital tenga, porque el dinero compra usuarios, no la red de valor cruzado que esos usuarios ya construyeron entre sí en la plataforma existente. Esa es, en el fondo, la razón estructural de por qué networkEffect puede llegar a durability: 8 mientras que feature tiene un techo de 3: no es que un network effect sea "más difícil de programar" — es que ni siquiera el dinero, por sí solo, lo compra.

El localDecay de esta lección agrega una segunda trampa, más sutil que el arranque en frío inicial: un producto puede resolver el arranque en frío una vez, a nivel nacional, y aun así seguir enfrentando arranques en frío locales cada vez que entra a un mercado nuevo — si, como en sellerNetworkPerCity, la arquitectura del producto no deja que el valor de la red ya construida se transfiera a la ciudad nueva. En ese caso, Mercado no tiene un network effect fuerte — tiene, en realidad, cientos de network effects chicos y frágiles, uno por ciudad, cada uno con su propio problema de arranque, disfrazados de un solo moat grande en el reporte trimestral.

Errores comunes

Confundir "muchos usuarios" con un network effect. Qué pasa: alguien mira una métrica de usuarios activos grande y concluye "tenemos un network effect" sin verificar si un usuario nuevo realmente mejora la experiencia de los demás. Por qué pasa: escala y network effect suelen aparecer juntos en los negocios exitosos, y es fácil confundir correlación con mecanismo — un producto puede tener millones de usuarios por un buen embudo de marketing, sin que ninguno de ellos se beneficie de que el otro esté ahí. Cómo detectarlo: pregunta "si mañana la mitad de nuestros usuarios se fuera, ¿la experiencia del otro 50% empeoraría, o seguiría exactamente igual?" — si la respuesta es "seguiría igual", no hay network effect, aunque la cifra de usuarios sea enorme (puede que haya una economía de escala real, tema de la lección 5, pero es un mecanismo distinto). Cómo corregirlo: exige que cualquier afirmación de network effect señale el mecanismo cruzado exacto —¿quién atrae a quién, y por qué canal?— antes de asignarle type: 'networkEffect' en el modelo.

Ignorar el arranque en frío hasta que ya duele. Qué pasa: el equipo diseña la estrategia de lanzamiento de una ciudad nueva copiando exactamente lo que funcionó a nivel nacional, y se sorprende cuando el crecimiento en la ciudad nueva es lento las primeras semanas, interpretándolo como una señal de que "el producto no gusta ahí". Por qué pasa: es fácil olvidar, viendo la red nacional ya madura y fuerte, que cada segmento nuevo —geográfico, de categoría, de tipo de usuario— empieza desde el mismo punto cero que el producto entero empezó alguna vez. Cómo detectarlo: si la conversación sobre una ciudad nueva usa las mismas métricas de éxito que la red nacional madura, sin ajustar expectativas por el tamaño de red local, falta este paso. Cómo corregirlo: trata cada segmento con localDecay real como su propio arranque en frío — con su propia estrategia de bootstrapping (subsidiar un lado primero, dar valor de un solo jugador mientras el otro lado crece), no como una versión más chica del producto ya maduro.

Tratar el network effect nacional como si cubriera automáticamente cada expansión. Qué pasa: el equipo asume que, porque Mercado "ya tiene" un network effect fuerte a nivel país, cualquier categoría o ciudad nueva hereda esa fuerza automáticamente, sin revisar si la arquitectura de matching realmente conecta esa expansión con la red existente. Por qué pasa: durability: 8 en el reporte trimestral se siente como una propiedad permanente del producto, no como el resultado de una arquitectura específica que puede o no aplicar al segmento nuevo. Cómo detectarlo: para cada expansión, pregunta explícitamente si localDecay sería true o false — es decir, si el algoritmo de recomendación, búsqueda o matching realmente cruza el nuevo segmento con la base existente, o lo aísla. Cómo corregirlo: corre moatScore por separado para cada segmento con datos reales de conectividad, en vez de asumir que el durability: 8 nacional se copia y pega.

Ejercicios

Ejercicio 1 — ¿Network effect, o solo audiencia? Un compañero dice: "nuestra app de recetas tiene 2 millones de usuarios activos, así que tenemos un network effect fuerte." Usando la prueba de esta lección, ¿esa afirmación describe, por sí sola, un network effect? Si la app permitiera además que los usuarios comenten y valoren las recetas de otros usuarios, ¿cambiaría tu respuesta? Justifica ambos casos.

Ver solución

No, "2 millones de usuarios" por sí sola no describe un network effect — describe una audiencia grande, que puede ser resultado de un buen producto o buen marketing, sin que un usuario nuevo mejore la experiencia de los demás. La prueba de esta lección lo confirma: si la mitad de esos 2 millones se fuera mañana, ¿empeoraría la experiencia de cocinar con las recetas existentes para el otro millón? No — cada receta sigue funcionando igual de bien sin importar cuántos otros usuarios existan. Si se agrega la función de comentar y valorar recetas, la respuesta cambia: ahora un usuario nuevo que deja una reseña útil mejora la decisión de todos los demás usuarios que ven esa receta después — eso sí es un mecanismo de network effect (probablemente sides: 1, porque todos los usuarios son del mismo tipo, aportando y consumiendo el mismo tipo de valor entre ellos).

Ejercicio 2 — Predice antes de ejecutar. Sin correr código, con la fórmula de networkEffect de esta lección (durability = sides >= 2 ? 8 : 5; if (localDecay) durability -= 3;), predice la durability y el verdict de esta ventaja: { name: 'crossCityBuyerReviews', type: 'networkEffect', sides: 2, localDecay: true } si además el modelo aplicara un segundo localDecay (por ejemplo, decay tanto geográfico como por categoría de producto) restando otros 3 puntos adicionales. Verifica corriendo una versión modificada de moatScore.

Ver solución

Con un solo localDecay: true: sides: 2 da una base de 8, menos 3 por el decay, durability = 5, verdict: 'weak-moat' — el mismo resultado que sellerNetworkPerCity en el ejemplo trabajado. Si se aplicara un segundo decay de otros 3 puntos (una versión modificada de la fórmula que sume dos penalizaciones), durability = 8 - 3 - 3 = 2, y 2 < 4 da verdict: 'not-a-moat'. El punto del ejercicio: los decays se acumulan, no se limitan a uno — un network effect que se fragmenta por ciudad Y por categoría de producto a la vez puede terminar, en la práctica, sin ninguna fuerza real, aunque en el papel siga siendo "un network effect de dos lados".

Ejercicio 3 — Diseña el arranque en frío. Mercado quiere lanzar en una ciudad nueva donde no tiene ni compradores ni vendedores todavía. Propón, en dos o tres frases, una táctica concreta de arranque en frío (por ejemplo, subsidiar un lado primero, dar valor de un solo jugador mientras crece el otro lado, o importar oferta de otra fuente). Luego explica qué parámetro de moatScoresides o localDecay— esperarías que cambiara, y en qué dirección, seis meses después de que la táctica funcione.

Ver solución

No hay una única respuesta correcta. Una táctica razonable: Mercado podría empezar reclutando activamente a un grupo inicial de vendedores locales con incentivos (comisión reducida los primeros meses), y mientras ese lado crece, mostrarles a los compradores de esa ciudad el catálogo completo nacional con envío disponible, para que la plataforma tenga valor incluso antes de que exista una red local madura — resolviendo el problema de "compradores sin nada que ver" sin depender todavía del lado local de vendedores. El parámetro que se esperaría que cambiara no es sides (sigue siendo 2, compradores y vendedores locales seguirán atrayéndose mutuamente) — es localDecay, que debería pasar de true a false conforme el matching local madura y la ciudad deja de depender de importar oferta de otras regiones, acercando su durability a la del network effect nacional.

Resumen y siguiente paso

En esta lección abriste el primero de los cinco tipos de moat: el network effect, donde el valor no vive en el producto sino en la red de gente que lo usa. Viste la diferencia entre efectos directos (mismo tipo de usuario) e indirectos (dos lados que se atraen mutuamente, el caso de Mercado), por qué los indirectos parten de una base más alta en moatScore, y por qué el localDecay puede reducir un network effect nacional fuerte al mismo nivel de durabilidad que uno que nunca tuvo un segundo lado. También viste la paradoja central del tipo: la misma fuerza que hace un network effect casi imposible de copiar es la que hace que arrancarlo desde cero se sienta, al principio, como no tener ningún producto en absoluto.

Antes de avanzar deberías poder: distinguir un network effect real de una audiencia grande, explicar la diferencia entre efectos directos e indirectos con tus propias palabras, y calcular a mano el efecto de sides y localDecay sobre durability sin correr el código.

La lección 4 abre el segundo tipo: switching costs — no lo que cuesta llegar a un producto, sino lo que cuesta, en tiempo, datos o hábito, dejarlo.

Recursos

  • NfX, The Network Effects Biblenfx.com/post/network-effects-bible. La referencia más completa sobre network effects que existe en estrategia de producto: cubre los distintos tipos, la mecánica de nodos y densidad de red, y dedica una sección entera al problema del arranque en frío que esta lección introdujo. En inglés.
  • Hamilton Helmer, 7 Powers: The Foundations of Business Strategy7powers.com. "Network economies" es una de las siete fuentes de poder del libro — el mismo mecanismo de compounding que moatScore modela como networkEffect, con el mismo énfasis en que la ventaja crece sola una vez que arranca. En inglés.