Module 6: Moats And Defensibility
What a moat is (and what it isn't)
Description
The word "moat" gets used, in almost every strategy meeting, to describe anything that sounds like an advantage: "our moat is product quality," "our moat is that we got there first," "our moat is the team." None of those three sentences is necessarily false —quality, being first, and a good team are real things—, but none of them, as stated, is yet a complete answer. A moat isn't "something good we have." A moat is a specific property, with a specific test, and this lesson installs that test with precision, before the whole module applies it type by type.
Connection to the module. Module 1 opened with two of Mercado's advantages scored —sellerNetwork with durability: 8, fasterCheckout with durability: 1— without yet explaining why the model treats them so differently. This lesson opens that box: it defines durability precisely, presents the five moat types the rest of the module will cover one by one (network effects in L3, switching costs in L4, data and scale in L5), and establishes the criterion that separates a real moat from an advantage that just feels like one.
An everyday analogy: the moat, again, but with the exact question
In the previous lesson you saw the moat and the decorated door as two ways of defending yourself. This lesson asks a sharper question, the one that actually separates a real moat from a puddle painted to look like one: is the water still there if nobody's watching it? A real moat doesn't need a soldier to check on it every day — it's water, it surrounds the castle, and it'll keep surrounding it tomorrow whether anyone does anything or not. A puddle painted blue, on the other hand, needs constant maintenance: someone has to repaint it, nobody can accidentally step in it, and the first day of heavy rain reveals it was never water.
That question —is it still there without anyone actively watching it?— is, in essence, the durability test you're going to apply for the rest of the module. An advantage that only exists because the Mercado team checks on it every week, updates it every month, and prays nobody notices, isn't a moat: it's a painted puddle, with human maintenance disguising the absence of any real structure underneath.
Worked example: three advantages, three types, a first complete look
We run moatScore on three of Mercado's advantages that represent three different model outcomes — before diving, lesson by lesson, into the internal mechanics of each type. The first is sellerNetwork, the seller network (type networkEffect). The second is purchaseData, the purchase data Mercado accumulates every time someone completes a transaction (type dataMoat). The third is fasterCheckout, already familiar, from the original backlog.
// Pedagogical model: scores the DURABILITY (0-10) of a competitive advantage,
// not how good it is TODAY but how hard it is for a well-funded competitor
// to erode it in 1-2 years. The five categories -- networkEffect,
// switchingCost, scaleEconomies, dataMoat, brand -- are POTENTIAL moats;
// 'feature' is the control category: it never crosses the moat threshold.
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 ? ', with local decay' : ', no decay'}`;
break;
}
case 'switchingCost': {
const { depth } = advantage;
const depthScore = { contractual: 3, habit: 5, dataAndWorkflow: 8 };
durability = depthScore[depth] ?? 3;
rationale = `switching cost of depth '${depth}'`;
break;
}
case 'scaleEconomies': {
const { fixedCostShare } = advantage;
durability = Math.round(fixedCostShare * 10);
rationale = `economies of scale with ${Math.round(fixedCostShare * 100)}% fixed cost`;
break;
}
case 'dataMoat': {
const { feedbackLoop, uniqueToUs } = advantage;
durability = feedbackLoop ? 7 : 2;
if (feedbackLoop && uniqueToUs) durability += 2;
rationale = feedbackLoop
? `the data feeds a loop that improves the product${uniqueToUs ? ' and is exclusive' : ''}`
: 'the data accumulates but doesn\'t feed back into the product';
break;
}
case 'brand': {
const { pricingPower } = advantage;
durability = pricingPower ? 6 : 2;
rationale = pricingPower
? 'the brand changes purchase behavior (tolerates price or friction)'
: 'the brand is recognized but doesn\'t change purchase behavior';
break;
}
case 'feature': {
const { timeToCopyWeekends } = advantage;
durability = Math.max(0, Math.min(3, timeToCopyWeekends));
rationale = `feature copyable in ~${timeToCopyWeekends} weekend(s)`;
break;
}
default: {
durability = 0;
rationale = 'unknown advantage type';
}
}
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: 'fasterCheckout', type: 'feature', timeToCopyWeekends: 1 },
];
console.log('=== Three of Mercado\'s advantages, the same question: does it survive a serious attack? ===\n');
console.table(candidates.map(moatScore));
What to expect. Running the file with Node produces exactly this output:
=== Three of Mercado's advantages, the same question: does it survive a serious attack? ===
┌─────────┬──────────────────┬─────────────────┬────────────┬──────────────┬───────────────────────────────────────────────────────────────────────┐
│ (index) │ name │ type │ durability │ verdict │ rationale │
├─────────┼──────────────────┼─────────────────┼────────────┼──────────────┼───────────────────────────────────────────────────────────────────────┤
│ 0 │ 'sellerNetwork' │ 'networkEffect' │ 8 │ 'moat' │ 'network effect 2-sided, no decay' │
│ 1 │ 'purchaseData' │ 'dataMoat' │ 9 │ 'moat' │ 'the data feeds a loop that improves the product and is exclusive' │
│ 2 │ 'fasterCheckout' │ 'feature' │ 1 │ 'not-a-moat' │ 'feature copyable in ~1 weekend(s)' │
└─────────┴──────────────────┴─────────────────┴────────────┴──────────────┴───────────────────────────────────────────────────────────────────────┘
Look at the model's complete structure, now that you're seeing all of it. There are five types that can reach 'moat' —networkEffect, switchingCost, scaleEconomies, dataMoat, brand— each with its own logic for why something becomes hard to erode. And there's one type, 'feature', that acts as a control group: no matter how many weeks it takes to copy, its formula caps it at a ceiling of 3, below the 'weak-moat' threshold (4). That asymmetry isn't a coding accident — it's the module's complete thesis, written in code: a feature, by the model's definition, is never a moat on its own. You're going to see exactly why in lesson 6, in full detail.
sellerNetwork and purchaseData both get 'moat' for different reasons —one from the geometry of who attracts whom (two sides feeding each other), the other because the data feeds a loop that improves the product—, and that distinction between mechanisms is exactly what lessons 3, 4, and 5 develop one by one. For now, hold onto the structure: five possible paths to durability, and a sixth type that, quite deliberately, never gets there.
Deep dive: durability isn't the same as quality
The most common mistake when talking about moats isn't technical — it's about vocabulary. "Good" and "durable" are two different questions, and confusing them is exactly what produces sentences like "our moat is product quality." Three distinctions worth fixing before moving on:
- Durability doesn't ask "how good is it today?", it asks "is it still an advantage after someone tries to copy it?" An excellent product built with none of the five mechanisms —just good design, good execution, no network, no data, no switching cost— can be the best product on the market today and lose that position in a quarter, if "best product" is, underneath, just a list of well-made features.
- Durability isn't the same as "being first." Being the first to launch something gives you a temporary advantage —time in market, maybe some brand—, but "we got there first" doesn't appear in any of the model's five types. Being first only turns into a moat if, while it lasts, you build one of the five real mechanisms — the first-mover window is an opportunity to build a moat, not the moat itself.
- A moat can be had without knowing it, and lost without meaning to.
sellerNetworkis a moat even though nobody at Mercado designed it on purpose from day one — it emerged from how a two-sided marketplace works. And a data moat (lesson 5) can be lost through an architecture decision as simple as disconnecting purchase data from the recommendation system — without anyone noticing until that advantage'smoatScoredrops from 9 to 2.
The practical consequence of these three distinctions: when someone in a meeting says "this is our moat," the right question isn't "are you sure?" — it's "which of the five types, and what evidence do we have for each?" If the answer doesn't fit any of the five, it's probably not a moat — it's a real, valuable advantage today, with no mechanism defending it tomorrow.
Common mistakes
Calling anything that feels like an advantage a "moat." What happens: in a strategy review, someone says "our moat is the team" or "our moat is the brand" without running that claim through any criterion — the word gets used as an elegant synonym for "something good we have." Why it happens: "moat" sounds like a serious technical term, and using it gives any claim an air of rigor it may not actually have. How to spot it: if nobody in the room can say which of the five types the advantage they just named belongs to, the word is probably being used as decoration, not analysis. How to fix it: require every declared "moat" to be translated into one of this lesson's five types, with the data moatScore needs to evaluate it — if it can't be translated, the claim can't be defended.
Confusing "we're the best today" with "we're going to stay the best." What happens: the team measures its current position —best NPS, best retention, best app store rating— and concludes that position is secure going forward, without asking what structural mechanism holds it up. Why it happens: a metric that looks good today creates a sense of security that doesn't distinguish between "we're winning because of a structural advantage" and "we're winning because nobody has seriously copied us yet." How to spot it: ask the team "if MegaStoreGenerico copied this exactly next quarter, with its full budget, would we still be winning for the same reason?" — if the answer is "we don't know" or "probably not," today's metric has no moat under it. How to fix it: always separate current state (a metric, a moment) from durability (a mechanism, this lesson's five types) — they're different questions and both matter, but only the second one predicts the future.
Treating the five types as if they were interchangeable or additive without scrutiny. What happens: the team counts how many "moats" it can name —"we have network, we have data, we have brand, three moats!"— without checking whether each one really meets its type's definition, and without noticing that two poorly built moats don't add up to one good one. Why it happens: counting feels simpler and more reassuring than evaluating — it's easier to make a list than to run the model on every item on the list. How to spot it: if the conversation stays at "how many moats do we have" instead of "what's the durability of each one, and why," the verification step is missing. How to fix it: run moatScore on each candidate, one by one, with real data — lesson 8's project does exactly this over Mercado's complete inventory, and you'll see that not every "moat" the team thinks it has even reaches 'weak-moat'.
Exercises
Exercise 1 — Classify the claim. A colleague says in a meeting: "our moat is that we were the first marketplace in the region to launch a native mobile app, two years before MegaStoreGenerico." Using this lesson's criterion, does that claim, on its own, describe one of the five moat types? Justify.
See solution
No, on its own it doesn't describe any of the five types. "We were first" is a time advantage, not a mechanism — it doesn't say whether those two years of lead were used to build a two-sided network, a switching cost, data with a loop, real scale, or a brand with pricing power. It's exactly the mistake from the deep dive: the first-mover window is an opportunity, not the moat itself. The right follow-up question would be: "what did we build with those two years of lead that a competitor can't quickly replicate today?" — if the answer is "a mobile app with the same features anyone could build in a quarter," those two years were spent on door decoration, not on a moat.
Exercise 2 — Predict before running it. Without running code, using this lesson's dataMoat formula (durability = feedbackLoop ? 7 : 2; if (feedbackLoop && uniqueToUs) durability += 2;), predict the durability and verdict for this advantage: { name: 'wishlistData', type: 'dataMoat', feedbackLoop: true, uniqueToUs: false }. Then verify by running moatScore on that object.
See solution
feedbackLoop: true → durability = 7. Since uniqueToUs is false, the condition feedbackLoop && uniqueToUs isn't met, so the extra +2 isn't added. durability stays at 7, and since 7 >= 7, the verdict is 'moat' — right at the edge. This result matters: it shows that non-exclusive data —others could collect it too— can still be a real moat, as long as it feeds back into the product (feedbackLoop: true). Exclusivity (uniqueToUs) is a bonus that strengthens a data moat, not a requirement for one to exist.
Exercise 3 — The painted puddle. Describe, in two or three sentences, a hypothetical example of a Mercado advantage that feels like a moat in a team meeting, but is actually "a painted puddle" —needing constant human maintenance to keep looking like an advantage, instead of holding up on its own through a structural mechanism. Use the moat analogy to justify why it doesn't qualify.
See solution
There's no single correct answer — the exercise evaluates the reasoning. A reasonable example: "our catalog has the lowest prices in the category" — if that low price depends on the pricing team manually reviewing it every week to keep matching the most aggressive competitor, it's not a moat: it's a puddle someone has to keep repainting. The day that team gets distracted with another priority, or the competitor drops its price faster than Mercado can react, the "advantage" disappears with nothing structural holding it up. A real moat —for example, a genuine economy of scale in logistics, lesson 5's topic— would keep sustaining a lower price even if the pricing team took a month off, because structural cost, not human vigilance, is what holds it up.
Summary and next step
In this lesson you installed the precise definition the whole module uses: a moat isn't "something good we have," it's an advantage that survives someone attacking it seriously, and that survival only happens through one of five structural mechanisms —network effects, switching costs, economies of scale, data with a loop, or brand with pricing power. You saw the complete moatScore model for the first time, with its five "moat-capable" types and the sixth control type ('feature') that, by design, never crosses the threshold.
Before moving on you should be able to: explain the difference between durability and quality in your own words, name the five moat types the model recognizes, and explain why "we were first" isn't, on its own, any of the five.
Lesson 3 opens the first of the five types in depth: network effects — the mechanism behind sellerNetwork, and the exact reason a phone is worth more the more contacts have one.
Resources
- Hamilton Helmer, 7 Powers: The Foundations of Business Strategy — 7powers.com. The source of the "power" vocabulary that, under a different name, is the same concept of structural durability this lesson just formalized in code. In English.
- Investopedia, "Economic Moat" — investopedia.com/terms/e/economicmoat.asp. The exact origin of the moat metaphor applied to business, popularized by Warren Buffett in Berkshire Hathaway's annual letters — the direct source of this lesson's and the previous one's whole analogy. In English.
- Richard Rumelt, Good Strategy Bad Strategy: The Difference and Why It Matters — penguinrandomhouse.com/books/208668. The same book that opened module 1: Rumelt's warning that a "good strategy" names real choices with real cost applies, word for word, to a real moat — something that requires having built a mechanism, not just having been lucky for a while. In English.