Module 3: Target And Positioning
The positioning statement
Description
Lessons 2 through 5 gave you all the pieces: a segment defined by its job (explorers), a model that confirms Mercado wins that segment (positionFit), and the idea that winning means owning a category, not adding up points. What's left is bringing all of that together into a single tool anyone on the team — engineering, sales, design — can read and use the same day: the positioning statement.
The template this lesson uses comes from Geoffrey Moore, later refined by April Dunford, and it has a fixed structure on purpose, not out of formal whim: "For [target segment] who [need/job], [product] is a [category] that [key benefit]. Unlike [competitive alternative], we [main differentiator]." Every blank in that template forces you to answer something you already built with data in previous lessons — it isn't a template for writing prettily, it's a template for forcing every piece of the reasoning to stay explicit and verified, none of it implicit.
Connection to the module. This lesson introduces no new model concept — it takes lesson 2's segment (explorers), lesson 4's job, and lesson 5's "own a category" logic, and turns them into a single written sentence, which then gets verified again with positionFit, exactly as in lesson 2. The difference is that now the sentence exists first, with all its internal logic explicit, and the code puts it to the test afterward — the reverse of the order you built the module in up to here.
An everyday analogy: a movie's logline
Any screenwriter who's tried to sell a movie to a studio knows a brutal rule: if you can't summarize the entire film in a single sentence — the logline — that says what genre it is, for what audience, and what makes it different from everything else in theaters, nobody's going to read the full script, no matter how good it is. "A story about people who live things and learn things" isn't a logline — it's a description so broad it would fit any movie ever filmed. "A shark attacks a tourist beach and a small-town cop has to stop it before the 4th of July weekend" is a logline: in one sentence, it states the genre (thriller), the setting (a tourist beach), the conflict (a deadly threat), and a concrete deadline that creates urgency.
A positioning statement does that exact job for a product. It isn't an ad or an inspirational sentence for the office wall — it's the most compressed possible version of "who this is for, what category it occupies, and why it isn't the same as the obvious alternative," written with a logline's same discipline: if you need a paragraph to explain it, you haven't compressed it enough yet.
Worked example: Mercado's positioning statement, written and verified
With the template in hand, and using exactly the data you already built — explorers as the segment (lesson 2), the discovery job (lesson 4), and curatedDiscovery + sellerTrust as the owned category (lesson 5) — here's Mercado's positioning statement:
For buyers who browse without knowing exactly what they're looking for [segment, lesson 2], who are tired of running the same search on a generic search engine and only finding more of the same [job, lesson 4], Mercado is the curated-discovery marketplace [category] that surprises you with something you didn't know you wanted, backed by trusted local sellers [key benefit,
curatedDiscovery+sellerTrust]. Unlike a generic megastore, optimized for quickly finding what you already know you want [competitive alternative, lesson 2], Mercado optimizes for the moment when you don't yet know what you want [main differentiator].
Every sentence in that paragraph has a piece of code behind it that already verified it in an earlier lesson. Now let's run positionFit once more, with the same data, but this time reading it as the statement's proof, not as a new experiment:
function positionFit(target, product, alternatives) {
const dims = Object.keys(target.weights).filter((d) => target.weights[d] > 0);
const weightedScore = (c) => dims.reduce((sum, d) => sum + target.weights[d] * c.scores[d], 0);
const productScore = weightedScore(product);
const rivals = alternatives.map((a) => ({ name: a.name, score: weightedScore(a) }));
const bestRival = rivals.reduce((a, b) => (b.score > a.score ? b : a));
const byDimension = dims.map((d) => {
const rivalBest = alternatives.reduce(
(best, a) => (a.scores[d] > best.score ? { name: a.name, score: a.scores[d] } : best),
{ name: alternatives[0].name, score: -Infinity }
);
return { dimension: d, weight: target.weights[d], productScore: product.scores[d], bestRivalScore: rivalBest.score, bestRivalName: rivalBest.name, wins: product.scores[d] > rivalBest.score };
});
return { segment: target.name, productWeightedScore: Number(productScore.toFixed(2)), bestRival: bestRival.name, bestRivalWeightedScore: Number(bestRival.score.toFixed(2)), fitsSegment: productScore > bestRival.score, byDimension };
}
const mercado = { name: 'Mercado', scores: { curatedDiscovery: 9, sellerTrust: 8, catalogBreadth: 6, price: 5, deliverySpeed: 5, convenience: 6 } };
const genericMegastore = { name: 'genericMegastore', scores: { curatedDiscovery: 3, sellerTrust: 4, catalogBreadth: 9, price: 8, deliverySpeed: 9, convenience: 8 } };
const localShop = { name: 'localShop', scores: { curatedDiscovery: 6, sellerTrust: 9, catalogBreadth: 2, price: 4, deliverySpeed: 3, convenience: 3 } };
// The "competitive alternative" named in the statement is genericMegastore --
// but the positioning statement also has to hold up against localShop.
const alternatives = [genericMegastore, localShop];
const explorers = { name: 'explorers', weights: { curatedDiscovery: 0.4, sellerTrust: 0.3, catalogBreadth: 0.1, price: 0.1, deliverySpeed: 0.05, convenience: 0.05 } };
console.log('=== Verifying Mercado\'s positioning statement with data ===\n');
const result = positionFit(explorers, mercado, alternatives);
console.log(`segment: ${result.segment} | productWeightedScore: ${result.productWeightedScore} | bestRival: ${result.bestRival} (${result.bestRivalWeightedScore}) | fitsSegment: ${result.fitsSegment}\n`);
console.table(result.byDimension.map((d) => ({ dimension: d.dimension, weight: d.weight, product: d.productScore, bestRival: `${d.bestRivalName}:${d.bestRivalScore}`, wins: d.wins })));
What to expect. Running the file with Node, the output is exactly this:
=== Verifying Mercado's positioning statement with data ===
segment: explorers | productWeightedScore: 7.65 | bestRival: localShop (6) | fitsSegment: true
┌─────────┬────────────────────┬────────┬─────────┬──────────────────────┬───────┐
│ (index) │ dimension │ weight │ product │ bestRival │ wins │
├─────────┼────────────────────┼────────┼─────────┼──────────────────────┼───────┤
│ 0 │ 'curatedDiscovery' │ 0.4 │ 9 │ 'localShop:6' │ true │
│ 1 │ 'sellerTrust' │ 0.3 │ 8 │ 'localShop:9' │ false │
│ 2 │ 'catalogBreadth' │ 0.1 │ 6 │ 'genericMegastore:9' │ false │
│ 3 │ 'price' │ 0.1 │ 5 │ 'genericMegastore:8' │ false │
│ 4 │ 'deliverySpeed' │ 0.05 │ 5 │ 'genericMegastore:9' │ false │
│ 5 │ 'convenience' │ 0.05 │ 6 │ 'genericMegastore:8' │ false │
└─────────┴────────────────────┴────────┴─────────┴──────────────────────┴───────┘
Notice an important detail a well-written statement can't hide: Mercado's positioning statement explicitly names the generic megastore as "the competitive alternative" (the phrase "unlike a generic megastore..."), but alternatives in the code also includes localShop — and it turns out localShop, not the megastore, is the real bestRival for this segment (6 against the megastore's weighted 4.55, if you calculated it separately). This doesn't invalidate the statement — the statement chooses to name the megastore because it's the bigger, more obvious rival in anyone's head when they compare marketplaces — but it is an honest reminder: verifying with data means running the model against ALL relevant alternatives, not just the one you mentioned in the pretty sentence. The statement is still true (Mercado wins the segment by a 1.65 margin), but the real reason for the win includes a comparison the statement, as written, doesn't mention.
Going deeper: Dunford's five pieces, mapped to what you already built
April Dunford breaks positioning down into five components that get built in order, each depending on the one before it. It's worth seeing how each one already has its exact equivalent in this module:
| Dunford's component | Where you built it |
|---|---|
| Competitive alternatives (what the customer would use if your product didn't exist) | alternatives — genericMegastore and localShop (lesson 2) |
| Unique attributes (what you have that the alternatives don't) | The dimensions where Mercado wins in byDimension (lessons 2 and 5) |
| Value of those attributes (why those attributes matter) | The segment's weights — why curatedDiscovery weighs 0.4 and not 0.05 (lesson 4) |
| Target market characteristics (who values that value more than anyone) | The explorers segment, defined by its job (lessons 2-4) |
| Relevant market category (what category they compare you in) | "Curated-discovery marketplace," not just "marketplace" (lesson 5) |
Order matters: Dunford insists on starting with the competitive alternatives, not your product — it's the same reason positionFit always receives alternatives as a parameter and calculates bestRival before anything else. You can't know what makes you different until you know, precisely, different from what.
Common mistakes
Writing an inspiring positioning statement and never verifying it against anything. What happens: the team writes a statement that sounds professional, puts it in the company deck, and nobody ever asks again whether the specific claims ("we optimize for discovery") are true against real comparison data. Why it happens: once the statement sounds good and the team approves it in a meeting, it feels finished — verifying it with a model like positionFit seems like an extra step, not a necessary part of the work. How to spot it: ask whether anyone on your team could show, with concrete comparison data (not just intuition), why every clause of the statement is true. If nobody can, you have a pretty sentence, not a verified positioning — the same mistake module 1 called bad strategy, applied to this more concrete layer. How to fix it: require every positioning statement to go through the same kind of verification you saw in the worked example — run the model against the real alternatives, not just the one you mention in the sentence.
Using a vague "unlike" or the wrong rival. What happens: the statement says "unlike other platforms" or "unlike the competition," with no specific, recognizable competitive alternative named — or it names a rival that, in the data, isn't even the strongest one against that segment. Why it happens: naming a specific competitor feels risky (what if they respond with something different?), and "the competition" in general sounds safer to write. How to spot it: you saw in the worked example that Mercado's statement names the megastore, but the real bestRival for explorers turned out to be localShop. If your "unlike" doesn't match the bestRival your own model calculates, your statement is competing against a ghost instead of the real rival your segment actually considers. How to fix it: before writing the "unlike," run the model and confirm, with data, who your segment's bestRival actually is — and if you decide to name a different rival (like Mercado names the megastore, more recognizable even if it isn't the strongest one in this specific segment), do it on purpose, knowing what the real comparison behind it is.
Confusing the positioning statement (internal tool) with the marketing tagline (public sentence). What happens: the team tries to fit the complete positioning statement — with all five pieces — into an ad or the homepage, and ends up either trimming it until it loses substance, or publishing a long, technical paragraph where a short, memorable sentence should go. Why it happens: both documents talk about "who we are and who for," and it's easy to assume they're the same artifact in a different format. How to spot it: if your marketing team complains that the positioning statement "doesn't fit anywhere," they're probably treating it as if it were the final tagline, instead of the full research behind the tagline. How to fix it: this lesson's positioning statement is an internal working document, as long as it needs to be to stay precise and verifiable — the public tagline (a five-to-ten-word sentence, like the one from lesson 5's exercise 2) is a later distillation, written to sound good, not to contain Dunford's full five pieces.
Exercises
Exercise 1 — Identify the five pieces in someone else's statement. Read this positioning statement for a fictional product: "For engineering teams who waste hours checking logs scattered across three different tools, LogStack is the unified observability platform that shows you an incident's root cause in under a minute. Unlike building your own stack with free open-source tools, LogStack requires no infrastructure maintenance of your own." Identify, for each of Dunford's five pieces (competitive alternatives, unique attributes, value of those attributes, target market, category), the exact phrase that covers it.
See solution
- Target market: "engineering teams who waste hours checking logs scattered across three different tools."
- Competitive alternatives: "building your own stack with free open-source tools."
- Market category: "unified observability platform."
- Unique attribute: "requires no infrastructure maintenance of your own" (against the maintenance cost the open-source alternative does have).
- Value of that attribute: implicit in "shows you an incident's root cause in under a minute" — the value is time saved at the most critical moment (an incident in progress).
Exercise 2 — Fix a vague "unlike". Rewrite this weak positioning statement clause, using this lesson's second common mistake's criterion: "Unlike other solutions on the market, we offer better quality." You must name a specific competitive alternative (you can invent a recognizable category, like "manual spreadsheets" or a generically named direct competitor) and a concrete differentiator, not the undefined word "quality."
See solution
A reasonable version, applied to a hypothetical inventory management product: "Unlike tracking inventory in spreadsheets shared over email, our system updates stock in real time as soon as someone logs a sale, with nobody needing to manually reconcile versions at the end of the day." Notice what changed: "other solutions" became a specific, recognizable alternative (shared spreadsheets), and "better quality" became a concrete, verifiable behavior (real-time update vs. manual reconciliation) — exactly the kind of clause you could put to the test with a model like positionFit, not a vague claim.
Exercise 3 — Verify an alternative different from the one named. The worked example showed that Mercado's statement names the generic megastore, but that localShop is, in the data, the real bestRival for explorers. Write, in 2-3 sentences, an alternative version of Mercado's statement's "unlike" clause that names localShop instead of the megastore, and explain what different nuance that version captures.
See solution
A reasonable version: "Unlike only buying from the local sellers you already know, Mercado helps you discover trusted local sellers you didn't know about yet, with the same human curation but without the limit of your own neighborhood." This nuance is different from the megastore's: against the megastore, the differentiation is "human curation vs. massive automated catalog"; against localShop, the differentiation is "breadth of discovery without losing trust vs. trust limited to what you already know." Both versions are true and verifiable with the same data (Mercado wins the segment over both alternatives), but each answers a different question from a different buyer: someone who already trusts their local shop needs the second argument; someone who thinks of the megastore first needs the first.
Summary and next step
A positioning statement isn't a marketing sentence — it's the compression, into one fixed-structure paragraph, of everything lessons 2 through 5 already built with data: the segment (explorers), the job it solves, the category it owns (curatedDiscovery + sellerTrust), and the competitive alternative it differentiates against. You saw Mercado's statement written with Dunford's five pieces, and verified again with positionFit — with an honest finding: the alternative named in the sentence (the megastore) doesn't always match the real bestRival the data reveals (localShop), and good positioning has to be able to hold up under both comparisons, not just the more comfortable one to name.
Before moving on you should be able to: write a complete positioning statement with Dunford's five pieces for any product you know; and verify, with data or its equivalent in informed judgment, that the rival you name in your statement is actually the strongest one, not just the most obvious one to mention.
Lesson 7 tests how solid this positioning is when someone — inside the company itself, almost always with good intentions — proposes stretching it to also compete on the leader's turf. You'll see, executed, why that temptation almost always costs more than it promises.
Resources
- April Dunford, Obviously Awesome — aprildunford.com/books. The source of the five positioning pieces that structure this lesson's "going deeper" section, with the full step-by-step process. In English.
- Geoffrey Moore, Crossing the Chasm — geoffreyamoore.com/book/crossing-the-chasm. The original "For [segment] who [need], [product] is a [category]..." template this lesson uses, with additional examples from the tech industry. In English.
- Marty Cagan (SVPG), "Product Marketing Contribution" — svpg.com/product-marketing-contribution. Cagan distinguishes positioning work (internal, strategic) from public communication work — the same distinction from this lesson's third common mistake. In English.
- Clayton M. Christensen and Taddy Hall, "Know Your Customers' Jobs to Be Done" — hbr.org/2016/09/know-your-customers-jobs-to-be-done. The "job" named in Mercado's statement ("tired of running the same search...") comes directly from this article's vocabulary. In English.