Module 4: Differentiation And Value Prop
Mini-project: Mercado's differentiation map
Description
It's time to bring the whole module together into a single artifact: Mercado's differentiation map, verified with code, not just written out. You learned to tell parity from real differentiation (L2), to audit a value proposition instead of writing it by feel (L3), to defend it face to face against a named rival (L4), to estimate how fast it gets copied (L5), to organize it in the Value Proposition Canvas (L6), and to recognize the traps a confident team falls into with no bad intent (L7). In this project you run differentiationMap on the six dimensions that showed up throughout the module, against the two competitors from module 3's positioning, and close with the final value proposition — the only version that should leave this room.
Your deliverable has two parts, and both are verified with code: (1) the complete differentiation map, with all six dimensions and their verdicts; and (2) Mercado's value proposition, built exclusively on the dimensions the map confirms as real differentiation — without a single claim that fails the audit.
Connection to the module. This project introduces no new concept — it gathers, in a single verified document, everything you built lesson by lesson. It's also the second link in an arc that started in module 3 (the segment and positioning that made this map possible) and continues in module 5, where the competitive landscape widens beyond the two rivals you used here.
An analogy: the case before the jury
A lawyer closing a trial doesn't stand in front of the jury and say "my client is innocent, trust me" — they present evidence, exhibit by exhibit, each with its number and clear origin: testimony A confirms point X, exhibit B rules out hypothesis Y. The jury doesn't decide based on how confident the lawyer sounds — it decides based on evidence it can review for itself, piece by piece.
This mini-project is exactly that: the complete case for "why Mercado, and not the generic giant or the neighborhood shop," built the way a lawyer would build a closing argument — not with adjectives, but with six pieces of evidence (the six dimensions), each with its verifiable verdict. In the end, the value proposition you write isn't an opinion about Mercado: it's the conclusion that logically follows from the evidence you just presented.
The reference solution, verified
Part 1 — The complete differentiation map, in Node
We run differentiationMap on the six dimensions that showed up across the module — including appAnimationPolish, lesson 7's trap, so it stays documented and nobody presents it again as a business differentiator — against module 3's two competitors.
// PROJECT: Mercado's complete differentiation map, verified with
// differentiationMap -- the module's only model -- on the 6 dimensions
// that appeared throughout the lessons, against the two competitors
// from the positioning (module 3): the generic giant and the neighborhood shop.
function differentiationMap(us, competitors, dimensions) {
const REAL_DIFF_MARGIN = 2;
return dimensions.map((dim) => {
const usScore = us.scores[dim.key];
const rivals = competitors.map((c) => ({ name: c.name, score: c.scores[dim.key] }));
const best = rivals.reduce((a, b) => (b.score > a.score ? b : a));
const gap = usScore - best.score;
let verdict;
if (gap >= REAL_DIFF_MARGIN) verdict = 'differentiation';
else if (gap <= -REAL_DIFF_MARGIN) verdict = 'gap';
else verdict = 'parity';
return {
dimension: dim.key,
mattersToSegment: dim.matters,
usScore,
bestCompetitor: best.name,
bestCompetitorScore: best.score,
verdict,
};
});
}
const mercado = {
name: 'Mercado',
scores: {
catalogBreadth: 3,
price: 3,
deliverySpeed: 4,
curatedDiscovery: 5,
localSellerTrust: 5,
appAnimationPolish: 5,
},
};
const genericMegastore = {
name: 'genericMegastore',
scores: {
catalogBreadth: 5,
price: 5,
deliverySpeed: 4,
curatedDiscovery: 2,
localSellerTrust: 2,
appAnimationPolish: 2,
},
};
const neighborhoodShop = {
name: 'neighborhoodShop',
scores: {
catalogBreadth: 1,
price: 3,
deliverySpeed: 2,
curatedDiscovery: 3,
localSellerTrust: 3,
appAnimationPolish: 1,
},
};
const dimensions = [
{ key: 'catalogBreadth', matters: false },
{ key: 'price', matters: false },
{ key: 'deliverySpeed', matters: true },
{ key: 'curatedDiscovery', matters: true },
{ key: 'localSellerTrust', matters: true },
{ key: 'appAnimationPolish', matters: false },
];
console.log('=== Mercado\'s complete differentiation map ===\n');
const results = differentiationMap(mercado, [genericMegastore, neighborhoodShop], dimensions);
console.table(results);
const realDiffs = results.filter((r) => r.verdict === 'differentiation' && r.mattersToSegment);
const fakeDiffs = results.filter((r) => r.verdict === 'differentiation' && !r.mattersToSegment);
const tableStakes = results.filter((r) => r.verdict === 'parity');
const concededGaps = results.filter((r) => r.verdict === 'gap' && !r.mattersToSegment);
console.log(`\nReal differentiation (goes in the value proposition): ${realDiffs.map((r) => r.dimension).join(', ') || 'none'}`);
console.log(`Real but irrelevant differentiation (does not go in the value proposition): ${fakeDiffs.map((r) => r.dimension).join(', ') || 'none'}`);
console.log(`Table stakes: ${tableStakes.map((r) => r.dimension).join(', ') || 'none'}`);
console.log(`Gaps conceded on purpose: ${concededGaps.map((r) => r.dimension).join(', ') || 'none'}`);
What to expect. Running the file with Node, the output is exactly this:
=== Mercado's complete differentiation map ===
┌─────────┬──────────────────────┬──────────────────┬─────────┬────────────────────┬─────────────────────┬───────────────────┐
│ (index) │ dimension │ mattersToSegment │ usScore │ bestCompetitor │ bestCompetitorScore │ verdict │
├─────────┼──────────────────────┼──────────────────┼─────────┼────────────────────┼─────────────────────┼───────────────────┤
│ 0 │ 'catalogBreadth' │ false │ 3 │ 'genericMegastore' │ 5 │ 'gap' │
│ 1 │ 'price' │ false │ 3 │ 'genericMegastore' │ 5 │ 'gap' │
│ 2 │ 'deliverySpeed' │ true │ 4 │ 'genericMegastore' │ 4 │ 'parity' │
│ 3 │ 'curatedDiscovery' │ true │ 5 │ 'neighborhoodShop' │ 3 │ 'differentiation' │
│ 4 │ 'localSellerTrust' │ true │ 5 │ 'neighborhoodShop' │ 3 │ 'differentiation' │
│ 5 │ 'appAnimationPolish' │ false │ 5 │ 'genericMegastore' │ 2 │ 'differentiation' │
└─────────┴──────────────────────┴──────────────────┴─────────┴────────────────────┴─────────────────────┴───────────────────┘
Real differentiation (goes in the value proposition): curatedDiscovery, localSellerTrust
Real but irrelevant differentiation (does not go in the value proposition): appAnimationPolish
Table stakes: deliverySpeed
Gaps conceded on purpose: catalogBreadth, price
The six dimensions sort into the four categories the whole module built, and each one has a different recommended action: invest more in curatedDiscovery and localSellerTrust (they're the real reason Mercado wins); maintain, without overspending, on deliverySpeed (table stakes: keep the tie, no need to win there); ignore on purpose catalogBreadth and price (gaps that cost nothing with the segment Mercado chose to serve); and don't promote as a business differentiator, even though it stays worthwhile technical work, appAnimationPolish (it wins, but nobody in the segment cares).
Part 2 — The final value proposition, backed by evidence
const valueProp = {
segment: 'buyers who browse, not those searching for an exact SKU',
category: 'curated-discovery marketplace',
differentiators: realDiffs.map((r) => r.dimension),
statement:
'For buyers who browse without knowing exactly what they\'re looking for, Mercado is the curated-discovery marketplace that connects you with verified local sellers -- unlike the generic giant, which shows you everything but doesn\'t help you find anything, and unlike the neighborhood shop, which you do know but can\'t explore beyond its four walls.',
};
console.log('\n=== The value proposition, backed only by real differentiation ===\n');
console.log(valueProp.statement);
console.log(`\nVerified pillars: ${valueProp.differentiators.join(' + ')}.`);
What to expect.
=== The value proposition, backed only by real differentiation ===
For buyers who browse without knowing exactly what they're looking for, Mercado is the curated-discovery marketplace that connects you with verified local sellers -- unlike the generic giant, which shows you everything but doesn't help you find anything, and unlike the neighborhood shop, which you do know but can't explore beyond its four walls.
Verified pillars: curatedDiscovery + localSellerTrust.
Notice what the final value proposition does not say: it says nothing about catalog, it says nothing about price, it doesn't mention delivery speed as an advantage, and it doesn't mention how polished the animations are — even though all four are real things about Mercado. Every word of this statement can be traced back to a specific row in Part 1's table marked differentiation and mattersToSegment: true. That is what it means, in practice, for a value proposition to be "verified with code": it isn't a writing exercise — it's the conclusion of a case already built, piece of evidence by piece of evidence, exactly like in the jury analogy.
Common mistakes
Delivering the map without the final value proposition. What happens: the team presents the complete six-dimension table — the analysis work — and stops there, without taking the final step of writing the statement a real buyer needs to read. Why it happens: the table feels like "the hard work already done," and writing the final sentence seems like a minor, almost administrative step compared to the analysis. How to spot it: if your deliverable ends in a table and not in a single-line sentence anyone outside the team can read and understand in ten seconds, the project is halfway done. How to fix it: no differentiation audit is complete without its final translation into human language — Part 2 isn't optional, it's the whole point of having done Part 1.
Treating the map as a fixed document, forever. What happens: this lesson's map gets saved as Mercado's definitive differentiation version, and nobody reruns it — not even after, as you saw in lesson 5, a rival could copy curatedDiscovery and erode that advantage down to parity. Why it happens: a delivered project feels finished, and there isn't, yet, a formal process forcing a recalculation. How to spot it: if you can't say when differentiationMap was last run with up-to-date data, your "definitive" map probably isn't anymore. How to fix it: treat this project as a reusable template, not a final document — every time the competitive landscape changes (module 5's topic), rerun it with current scores.
Using the map's result as the final decision on what to build. What happens: "curatedDiscovery and localSellerTrust are real differentiation" gets interpreted as "let's build more of that, in any order, without evaluating anything else." Why it happens: a clear, verified result feels like full authorization to act, when it actually answers a single question: which bets deserve to compete for priority, not in what order or with what effort. How to spot it: if your build plan uses the differentiation map as its only input, without going through impact or effort, you're missing a step — that's RICE's job, from product-thinking-for-engineers-guide, applied after knowing which dimensions matter. How to fix it: remember module 1 and module 4's boundary — this map decides which dimensions can sustain a real value proposition; the complete strategic filter that connects this to the real roadmap, including moats (module 6) and prioritization, is module 7.
Exercises
Exercise 1 — Add a seventh dimension. The support team proposes measuring customerSupportQuality (customer support quality), and it does matter to the segment (matters: true). The scores are: Mercado = 4, genericMegastore = 2, neighborhoodShop = 5. Without running anything, predict the verdict, and decide whether this dimension should go into the final value proposition.
See solution
The best rival is neighborhoodShop at 5. Mercado's gap is 4 - 5 = -1, which satisfies neither gap <= -REAL_DIFF_MARGIN (it would need to be <= -2) nor gap >= REAL_DIFF_MARGIN, so the verdict is 'parity'. It shouldn't go into the final value proposition: even though it matters to the segment, Mercado doesn't win there with a real margin — in fact, it sits one point below the best rival, without becoming a concerning gap. It's table stakes with a slight disadvantage, the kind of result that warrants watching (if the gap grew, it would become a real vulnerability, the dangerous combination lesson 2 named) but not a public advantage announcement.
Exercise 2 — Anticipate module 5. This project's map only compares Mercado against two direct competitors. Module 5 is going to widen the landscape with indirect competitors and substitutes — alternatives that aren't marketplaces at all, like searching directly on social media or asking a friend. Without calculating anything yet, write in 2-3 sentences what you'd expect to happen to curatedDiscovery's verdict if the substitute were "asking a trusted WhatsApp group for recommendations" — would it still be real differentiation, or would the comparison ground change entirely?
See solution
There's no single correct answer — the exercise evaluates strategic intuition, not a calculation. A reasonable answer: a trusted WhatsApp group could, in fact, offer a very high "score" on curation and trust — maybe even higher than Mercado itself, because the recommendation comes from someone real you know — which would turn what's today real differentiation against the generic giant and the neighborhood shop into, potentially, parity or even a gap against this substitute. This is exactly the kind of uncomfortable finding the "the market isn't just your direct competitors" lesson (module 5) is designed to expose: sometimes the most dangerous rival isn't even a company.
Exercise 3 — Present the complete map to a skeptical investor. An investor, after seeing the full six-dimension table, asks: "why aren't you aggressively chasing catalog and price, if that's where the market volume is?" Using the module's complete vocabulary (parity, table stakes, conceded gap, real differentiation), write in one paragraph how you'd respond, without sounding like Mercado is afraid to compete.
See solution
An example answer: "It's not that we can't compete on catalog and price — it's that we choose not to, because the segment we decided to serve doesn't choose based on those: losing those two dimensions doesn't cost us a single buyer that matters to us, per our own verified map. If we chased catalog and price, we'd be spending budget paying a higher ante than necessary, instead of deepening the two dimensions where we genuinely win with a real margin: curated discovery and local seller trust — there we're a full two points ahead of the best rival, not a technical tie. That's the ground that isn't saturated yet, and it's exactly where we're putting every additional dollar." Notice the structure: it doesn't deny the catalog-and-price opportunity, it explains it was an evidence-based choice (not fear-based), and it closes by pointing to where investment is actually going, backed by the map's own numbers.
Summary and next step
In this mini-project you brought the whole module together into a single verified differentiation map: six dimensions, two competitors, four result categories — real differentiation, irrelevant differentiation, table stakes, and conceded gaps — and, at the end, a value proposition that doesn't say a single word the map can't prove. With this you close module 4.
You now have, for any product you audit in your own work, a complete process: run the map, separate the real from the apparent, and build the value proposition only with what survives.
Where you go next. You now know who you serve (module 3) and why they choose you within that ground (module 4). The question that follows is broader: that whole ground — the generic giant, the neighborhood shop, and every other player you haven't considered yet — what does it look like as a whole, and where is it heading? That's the question for module 5 (module-05-competition-and-market): mapping the complete competitive landscape, including substitutes that aren't even marketplaces, and understanding where the market is headed before the war you're fighting today stops being the one that matters tomorrow.
Resources
- April Dunford, "The 'No Differentiation' Illusion" — aprildunford.substack.com/p/the-no-differentiation-illusion. Worth rereading now that you've built Mercado's complete map: the difference between having no differentiation and not knowing how to see it precisely. In English.
- Strategyzer, "The Value Proposition Canvas" — strategyzer.com/library/the-value-proposition-canvas. The complete framework behind this project's Part 2, for anyone who wants to formalize the result in the industry-standard format. In English.
- Ben Thompson, "Differentiation and Value Capture in the Internet Age" — stratechery.com/2014/differentiation-value-creation-internet-age. The underlying argument for why it's worth defending a map like this project's instead of chasing generic scale. In English.
- Roger Martin, "Why the How-to-Win Strategy Choice Is So Hard" — rogermartin.medium.com/why-the-how-to-win-strategy-choice-is-so-hard-8de222d62f5c. The module's natural close: why the work of auditing, not just executing with effort, is what separates a real advantage from an illusion the whole team shares. In English.