Módulo 2: Vision And Mission

Mini-proyecto: el one-pager de visión y misión de Mercado

Descripción

Es momento de juntar el módulo entero en un solo artefacto: el one-pager de visión y misión de Mercado. Aprendiste a reconocer una visión real (L2), a separarla de la misión (L3), a ubicar las cuatro capas completas (L4), a usar la visión para descartar iniciativas (L5), a distinguir lo aspiracional de lo vacío (L6), y a defenderla incluso contra la tentación del corto plazo (L7). En este proyecto usas los dos modelos que construiste —classifyLayer y visionFilter— sobre el caso completo, no sobre fragmentos aislados como en cada lección.

Tu entregable tiene tres partes, y las tres se verifican con código, no solo se redactan: (1) la visión y la misión de Mercado, con sus includes y excludes explícitos; (2) las cuatro capas mapeadas con un ejemplo concreto de cada una, verificado con classifyLayer; y (3) el backlog completo de Mercado —seis iniciativas reales— filtrado con visionFilter, mostrando cuáles pertenecen a esta dirección y cuáles no, aunque algunas sean buenas ideas.

Conexión con el módulo. Este proyecto no introduce ningún concepto nuevo — reúne, en un solo documento verificado, todo lo que construiste lección por lección. Es, además, el primer eslabón de un arco que sigue en el resto de la guía: la visión que redactas aquí es la que el módulo 3 va a usar para definir el segmento objetivo y el posicionamiento de Mercado, y la misma que el módulo 7 va a usar, ya completa con estrategia y moats, para filtrar el roadmap de verdad.

Una analogía: el plano maestro del jardín

Un jardinero paisajista que lleva años cuidando el mismo jardín no improvisa temporada tras temporada — tiene, en algún lado, un plano maestro: un documento que fija dónde está el roble (la visión, en el centro, casi inamovible), por qué la familia sale a cuidar ese jardín hoy (la misión — "queremos un espacio donde nuestros hijos jueguen seguros esta primavera"), qué cuadrante recibe atención esta temporada y por qué (la estrategia), y una regla simple para evaluar cualquier planta nueva que alguien proponga agregar: ¿alimenta al roble, o le compite por luz y agua? Sin ese plano, cada decisión de jardinería se toma sola, desconectada de las anteriores, y el jardín termina sin ninguna dirección reconocible.

Este mini-proyecto es exactamente ese plano maestro, aplicado a Mercado. No es un ejercicio de redacción bonita — es un documento de trabajo que cualquier persona del equipo debería poder usar, la próxima vez que alguien proponga una iniciativa nueva, para responder en minutos: ¿esto pertenece a nuestro jardín, o es una planta que compite con el roble?

La solución de referencia, verificada

Parte 1 — La visión y la misión de Mercado, con sus incluye/excluye

Esta es la visión y la misión que vienes usando desde la lección 1, ahora reunidas en un solo documento con sus includes y excludes explícitos — el detalle que, según la lección 5, es lo que convierte una visión bonita en una herramienta de decisión real:

const mercadosOnePager = {
  vision: {
    statement: 'El mundo donde cualquier persona descubre en Mercado lo que no sabía que quería.',
    horizon: '10+ años, sin fecha límite',
    includes: ['curatedDiscovery', 'localSellerTrust', 'serendipity'],
    excludes: ['exactSkuSearchEngine', 'lowestPriceRace', 'genericMegastore'],
  },
  mission: {
    statement: 'Existimos para conectar hoy a compradores curiosos con vendedores locales de confianza.',
    horizon: 'hoy, con lo que ya existe',
  },
};

Verifica cada pieza contra los criterios del módulo antes de continuar: la visión describe un estado del mundo, no una acción de la empresa (lección 2); tiene sujeto distinto de Mercado y horizonte sin fecha (lección 3); sus excludes nombran negocios legítimos y rentables a los que Mercado dice que no, no solo cosas obviamente malas (lección 5); y se puede "dibujar" con una escena concreta, con una forma reconocible de fracasar (lección 6).

Parte 2 — La verificación ejecutada en Node

Ahora corremos el módulo entero sobre el caso completo: classifyLayer mapea las cuatro capas con un ejemplo concreto de cada una, y visionFilter filtra el backlog completo de seis iniciativas.

// PROYECTO: el one-pager de vision y mision de Mercado, verificado con
// los dos modelos del modulo -- classifyLayer (L2-L4, L6) y visionFilter
// (L5, L7) -- aplicados al caso completo, no a fragmentos aislados.

function classifyLayer(statement) {
  const text = statement.toLowerCase();
  const signals = {
    tactic: ['lanza', 'implementa', 'agrega', 'sprint', 'este trimestre', ' q1', ' q2', ' q3', ' q4'],
    strategy: ['elegimos', 'en vez de', 'nos enfocamos', 'invertiremos', 'los próximos', 'apostamos', 'ganamos'],
    mission: ['existimos para', 'nuestra misión', 'ayudamos a', ' hoy'],
    vision: ['el mundo donde', 'el lugar donde', 'algún día', 'nuestra visión', 'imaginamos un'],
  };
  const order = ['tactic', 'strategy', 'mission', 'vision'];
  for (const layer of order) {
    if (signals[layer].some((kw) => text.includes(kw))) {
      return layer;
    }
  }
  return 'unclear';
}

function visionFilter(vision, initiatives) {
  return initiatives.map((initiative) => {
    const brokenExclude = vision.excludes.find((rule) => initiative.conflictsWith.includes(rule));
    const matchedInclude = vision.includes.find((rule) => initiative.supports.includes(rule));
    let fitsVision;
    let reason;
    if (brokenExclude) {
      fitsVision = false;
      reason = `choca con lo que la visión descarta: "${brokenExclude}"`;
    } else if (matchedInclude) {
      fitsVision = true;
      reason = `sirve lo que la visión incluye: "${matchedInclude}"`;
    } else {
      fitsVision = false;
      reason = 'no conecta con ningún "sí" de la visión';
    }
    return { initiative: initiative.name, fitsVision, reason };
  });
}

// PARTE 1: el one-pager de Mercado, mapeado en las 4 capas.
const mercadosLayers = [
  { label: 'Visión', text: 'El mundo donde cualquier persona descubre en Mercado lo que no sabía que quería.' },
  { label: 'Misión', text: 'Existimos para conectar hoy a compradores curiosos con vendedores locales de confianza.' },
  { label: 'Estrategia', text: 'Elegimos enfocarnos en compradores que exploran, no en los que buscan un SKU exacto, y ganamos invirtiendo en descubrimiento curado en vez de en el precio más bajo.' },
  { label: 'Táctica', text: 'Este trimestre lanzamos el rediseño del feed de recomendaciones en checkout.' },
];

console.log('=== PARTE 1: las 4 capas del one-pager de Mercado ===\n');
for (const l of mercadosLayers) {
  console.log(`[${l.label}] -> classifyLayer(): ${classifyLayer(l.text)}`);
}

// PARTE 2: el filtro de visión sobre el backlog completo (6 iniciativas).
const mercadosVision = {
  statement: 'El mundo donde cualquier persona descubre en Mercado lo que no sabía que quería.',
  includes: ['curatedDiscovery', 'localSellerTrust', 'serendipity'],
  excludes: ['exactSkuSearchEngine', 'lowestPriceRace', 'genericMegastore'],
};

const backlog = [
  { name: 'recommendationsEngine', supports: ['curatedDiscovery', 'serendipity'], conflictsWith: [] },
  { name: 'sellerTrustBadges', supports: ['localSellerTrust'], conflictsWith: [] },
  { name: 'localArtisanSpotlight', supports: ['localSellerTrust', 'serendipity'], conflictsWith: [] },
  { name: 'lowestPriceGuarantee', supports: [], conflictsWith: ['lowestPriceRace'] },
  { name: 'oneClickReorder', supports: [], conflictsWith: [] },
  { name: 'bulkWholesaleCatalog', supports: [], conflictsWith: ['genericMegastore'] },
];

console.log('\n=== PARTE 2: el filtro de visión sobre el backlog de Mercado ===\n');
const results = visionFilter(mercadosVision, backlog);
console.table(
  results.map((r) => ({
    initiative: r.initiative,
    fitsVision: r.fitsVision,
    reason: r.reason,
  }))
);

const inCount = results.filter((r) => r.fitsVision).length;
console.log(`${inCount}/${backlog.length} iniciativas del backlog caben en la visión de Mercado.`);

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

=== PARTE 1: las 4 capas del one-pager de Mercado ===

[Visión] -> classifyLayer(): vision
[Misión] -> classifyLayer(): mission
[Estrategia] -> classifyLayer(): strategy
[Táctica] -> classifyLayer(): tactic

=== PARTE 2: el filtro de visión sobre el backlog de Mercado ===

┌─────────┬─────────────────────────┬────────────┬───────────────────────────────────────────────────────────┐
│ (index) │       initiative        │ fitsVision │                          reason                           │
├─────────┼─────────────────────────┼────────────┼───────────────────────────────────────────────────────────┤
│    0    │ 'recommendationsEngine' │    true    │   'sirve lo que la visión incluye: "curatedDiscovery"'    │
│    1    │   'sellerTrustBadges'   │    true    │   'sirve lo que la visión incluye: "localSellerTrust"'    │
│    2    │ 'localArtisanSpotlight' │    true    │   'sirve lo que la visión incluye: "localSellerTrust"'    │
│    3    │ 'lowestPriceGuarantee'  │   false    │ 'choca con lo que la visión descarta: "lowestPriceRace"'  │
│    4    │    'oneClickReorder'    │   false    │         'no conecta con ningún "sí" de la visión'         │
│    5    │ 'bulkWholesaleCatalog'  │   false    │ 'choca con lo que la visión descarta: "genericMegastore"' │
└─────────┴─────────────────────────┴────────────┴───────────────────────────────────────────────────────────┘
3/6 iniciativas del backlog caben en la visión de Mercado.

El resultado: 3 de 6 iniciativas del backlog caben en la visión de Mercado — exactamente mitad y mitad. Esto no es un fracaso de planeación ni una señal de que el equipo propone mal — es exactamente lo que el plano maestro está diseñado para encontrar. Mira las tres que quedan fuera, una por una, con el vocabulario exacto del módulo:

  • lowestPriceGuarantee choca con un exclude explícito (lowestPriceRace). Es una idea de negocio legítima, en otra empresa; en Mercado, es la enredadera que compite por la misma luz que el roble.
  • oneClickReorder no choca con nada, pero tampoco sirve a nada — no basta con "no ser dañina" (lección 5). Es una mejora de conveniencia razonable que, sin conexión a curatedDiscovery, localSellerTrust ni serendipity, no tiene lugar en este plano maestro específico — podría, eso sí, vivir tranquilamente en el backlog de otra empresa con otra visión.
  • bulkWholesaleCatalog choca con genericMegastore — el destino exactamente opuesto al que Mercado eligió. Es la iniciativa que más se parece a "crecer por crecer", el tipo de apuesta que el módulo 7 (strategy-to-roadmap) va a nombrar con más detalle cuando la estrategia completa entre en juego.

Y las tres que sí caben —recommendationsEngine, sellerTrustBadges, localArtisanSpotlight— no solo "no violan" nada: cada una conecta activamente con al menos uno de los tres includes. Ese es el estándar real de un plano maestro que funciona: no es suficiente evitar lo prohibido, hay que construir lo que sirve a la dirección.

Errores comunes

Entregar visión y misión sin excludes, porque "ya se siente completo". Qué pasa: el equipo redacta una visión y una misión que suenan bien, las presenta como el one-pager terminado, y nunca llega a escribir explícitamente qué se descarta — la parte que, según la lección 5, es la que hace que el documento sirva para algo. Por qué pasa: los includes se sienten como "el trabajo real" (son la parte inspiradora), y los excludes se sienten como un anexo opcional. Cómo detectarlo: si tu one-pager no tiene una lista explícita de excludes tan concreta como la de includes, no está terminado — solo se ve terminado. Cómo corregirlo: no cierres el documento hasta poder nombrar, para cada include, su opuesto directo como exclude, con la misma especificidad — exactamente el ejercicio de la lección 5.

Redactar visión y misión distintas cada vez que alguien las necesita. Qué pasa: en una presentación a inversionistas la visión suena de una forma, en el README interno suena de otra, y en la última reunión de equipo alguien improvisó una tercera versión — todas parecidas, ninguna idéntica. Por qué pasa: sin un documento único de referencia (el one-pager de este proyecto), cada persona redacta de memoria, y la memoria varía. Cómo detectarlo: pídele a tres personas del equipo que escriban la visión de memoria, sin mirar ningún documento — si las tres versiones dicen cosas sustancialmente distintas, no hay un plano maestro real, hay tres borradores compitiendo. Cómo corregirlo: el one-pager de este proyecto debería ser la única fuente de verdad, citada textualmente (no parafraseada de memoria) cada vez que alguien necesita la visión o la misión en un documento, una presentación o una decisión.

Tratar el resultado del filtro como la decisión final de qué construir. Qué pasa: se interpreta "3/6 caben en la visión" como "construyamos exactamente esas 3, en ese orden, y descartemos las otras 3 para siempre". Por qué pasa: un resultado binario (fitsVision: true/false) se siente como un veredicto completo, cuando en realidad responde una sola pregunta previa: pertenece o no pertenece a esta dirección. Cómo detectarlo: si tu plan de construcción usa el orden de la tabla de visionFilter como prioridad, sin considerar impacto ni esfuerzo, te falta un paso — ese es el trabajo de RICE en product-thinking-for-engineers-guide, que se aplica después de este filtro, no en su lugar. Cómo corregirlo: recuerda la frontera del módulo 1 — este filtro decide qué puede competir por prioridad; no decide el orden. Las 3 iniciativas que sí caben en la visión todavía necesitan pasar por priorización real antes de aparecer en un roadmap.

Ejercicios

Ejercicio 1 — Agrega una séptima iniciativa. El equipo de Mercado propone una séptima iniciativa: "un programa de embajadores que invitan amigos a descubrir vendedores nuevos". Escribe su objeto (name, supports, conflictsWith) siguiendo el patrón del backlog del proyecto, agrégalo, y predice si visionFilter lo marcaría fitsVision: true o false.

Ver solución

Una versión razonable:

{ name: 'friendReferralDiscoveryProgram', supports: ['serendipity', 'curatedDiscovery'], conflictsWith: [] }

Con estos supports, visionFilter encontraría matchedInclude: 'serendipity' (el primer include que coincide, según el orden de vision.includes) y marcaría fitsVision: true. Un programa de embajadores enfocado en descubrir vendedores nuevos —no en descuentos por referido, que sería otra historia— conecta directamente con el corazón de la visión de Mercado.

Ejercicio 2 — Traza una táctica nueva por las 4 capas. Elige una de las tres iniciativas que sí cupieron en la visión (recommendationsEngine, sellerTrustBadges o localArtisanSpotlight). Escribe, en una frase cada una, la estrategia y la misión que la conectan hacia arriba —como hiciste en el ejercicio 2 de la lección 4—, y verifica con classifyLayer que cada frase caiga en su capa correcta.

Ver solución

Para sellerTrustBadges (insignias de confianza para vendedores):

  • Táctica: "Este trimestre lanzamos las insignias de confianza en el perfil de vendedores locales." → classifyLayer(): tactic (contiene "lanzamos" → coincide con 'lanza', y "este trimestre").
  • Estrategia: "Elegimos enfocarnos en compradores que exploran, no en los que buscan un SKU exacto, y ganamos invirtiendo en descubrimiento curado en vez de en el precio más bajo." → classifyLayer(): strategy (la misma estrategia de todo el módulo — las insignias son una forma concreta de invertir en confianza, parte de esa apuesta).
  • Misión: "Existimos para conectar hoy a compradores curiosos con vendedores locales de confianza." → classifyLayer(): mission (las insignias sirven, hoy mismo, exactamente ese propósito: ayudar a que la confianza sea visible).

La cadena completa confirma lo que viste en la lección 4: cada capa justifica a la de abajo, y ninguna se puede saltar sin que la justificación se debilite.

Ejercicio 3 — Presenta el resultado a un stakeholder escéptico. Un gerente de crecimiento, que no participó en este módulo, ve la tabla de resultados y pregunta: "¿por qué estamos dejando sobre la mesa lowestPriceGuarantee y bulkWholesaleCatalog — dos ideas que claramente moverían el número este trimestre?". Escribe, en un párrafo, cómo le explicarías el resultado completo del proyecto, usando el vocabulario del módulo (visión, excludes, horizonte, roble) sin sonar como si estuvieras en contra de crecer.

Ver solución

Un ejemplo de respuesta: "No estamos en contra de mover el número — de hecho, 3 de las 6 iniciativas del backlog sí lo hacen, y esas las priorizamos con RICE como siempre. Las dos que mencionas chocan directamente con lo que nuestra visión descarta explícitamente: no competimos por precio ni nos volvemos un catálogo genérico — competimos por ayudar a la gente a descubrir algo que no sabía que quería, con vendedores locales de confianza. Son ideas que funcionarían en otra empresa, con otra visión. Aquí, aceptarlas 'solo por este trimestre' es exactamente el tipo de decisión que, mirada en diez años, nos convierte en una tienda de descuentos genérica en vez del lugar de descubrimiento que estamos construyendo. Y esa reputación, una vez perdida, es mucho más cara de recuperar que cualquier número de este trimestre."

Fíjate en la estructura: reconoce el mérito de ambas ideas (evita sonar anti-crecimiento), cita los excludes específicos con precisión, conecta la decisión con el horizonte de largo plazo en términos concretos (reputación, no solo "la visión" como abstracción), y deja claro que el filtro no bloqueó todo — 3 de 6 iniciativas siguen su curso normal de priorización.

Resumen y siguiente paso

En este mini-proyecto reuniste el módulo completo en un solo plano maestro: la visión y la misión de Mercado, con sus includes y excludes explícitos; las cuatro capas mapeadas y verificadas con classifyLayer; y el backlog completo filtrado con visionFilter — con 3 de 6 iniciativas cayendo fuera, no por ser malas ideas, sino por no pertenecer a esta dirección de diez años. Con esto cierras el módulo 2.

Ahora tienes, para cualquier iniciativa que aparezca en tu propio trabajo, dos preguntas de precisión que antes no tenías: "¿en qué capa vive este enunciado?" y "¿esto sirve a nuestra visión, o solo no le hace daño?" — y sabes que la segunda pregunta exige más que la primera.

Hacia dónde sigues. Ya sabes a dónde va Mercado y por qué. La pregunta que sigue, ahora que la dirección general está fija, es mucho más concreta: de toda la gente que podría comprar en un marketplace, ¿para quién específicamente es esto — y para quién NO? Esa es exactamente la pregunta del módulo 3 (module-03-target-and-positioning): el segmento objetivo y el posicionamiento, la siguiente capa de precisión después de la visión que acabas de definir.

Recursos

  • Roger Martin, "Decoding the Strategy Choice Cascade" — rogermartin.medium.com/decoding-the-strategy-choice-cascade-475d40555eb1. El marco completo de Playing to Win, ahora que tienes tu propia versión de la primera elección de la cascada —la aspiración ganadora— vale la pena releerlo con el ejercicio fresco. En inglés.
  • Richard Rumelt, Good Strategy Bad Strategygoodbadstrategy.com. El libro que nombra, a nivel de estrategia completa, el mismo patrón que practicaste a nivel de visión: un enunciado que solo sirve si de verdad restringe la acción. En inglés.
  • Jim Collins, "BHAG (Big Hairy Audacious Goal)" — jimcollins.com/concepts/bhag.html. Para comparar el one-pager que acabas de construir contra BHAGs reales de empresas que sostuvieron su visión durante décadas. En inglés.
  • Marty Cagan (SVPG), "Product Vision vs. Mission" — svpg.com/product-vision-vs-mission. El artículo de referencia de todo el módulo, para releer ahora que tienes el caso completo de Mercado como ejemplo propio. En inglés.
  • Gibson Biddle, "Intro to Product Strategy" — gibsonbiddle.medium.com/intro-to-product-strategy-60bdf72b17e3. El puente natural hacia el módulo 3: cómo una visión de producto ya definida se convierte en decisiones concretas de a quién servir primero. En inglés.