ConceptIntermediateEval-Driven Specification / Writing a PRD for an AI feature / #6

How do you specify the data dependencies of a feature in a PRD?

The direct answer
Break the data-dependency section of the PRD into the feature's real categories, and inside each one, size a minimum number of examples, typical cases and known edge cases both. Don't write one line that just says "we need listing data." Build the total from that breakdown, give it as a range instead of one fixed number, and name which single assumption, how many categories or how deep the coverage inside one, would move the total the most, because that's the number a sharp reviewer pushes on.
Do this, in order
  1. Break the data-dependency section into the feature's real categories, and size a minimum number for each, typical cases and edge cases both.Why: a single vague line can leave the riskiest category almost empty while the section still reads as complete.
  2. Name every category's number out loud in the PRD.Why: an unstated per-category count is a guess wearing a total's clothes.
  3. Give the total as a range, not one fixed number.Why: the real total depends on how many categories the feature ends up covering, and that grows with scope.
  4. Check the total against how long it would really take to source and clean that much data.Why: a number that implies two days for 165 careful examples is too good to be true, and one that implies a whole quarter is too slow to ship.
  5. Name which assumption, category count or coverage depth inside one, swings the total most.Why: that's the assumption a sharp reviewer pushes on, and "we need more data" isn't an answer.
  6. Leave the low-risk, well-covered categories thin, on purpose.Why: padding an already-safe category doesn't reduce risk, it just spends review time a riskier one needs more.

How to answer this, stage by stage

Seven moves. The trap is writing one confident sentence about "training data" and never showing which categories it's actually built from.

1
Pin the feature down before naming a single number
Say it like this
"Let's make this concrete. Say I'm the PM on Curbwrite, a feature inside Fieldpost, a real-estate agent platform. An agent uploads photos and a few rough notes, and Curbwrite drafts the listing description that goes out to buyers. The question is how I'd write the data-dependency section of its PRD."
Why this works
Grounds an abstract PRD question in one real feature before any arithmetic starts.
2
Say what a vague line would hide
Say it like this
"Before I give you numbers, here's the trap. If the PRD just says 'training and eval data: real listing descriptions,' that tells a reviewer nothing about whether the riskiest category, say luxury listings, actually has enough behind it. A vague line can hide a feature that's blind to the one category most likely to cause a real complaint."
Why this works
Sets up why this needs real arithmetic, not a confident sentence.
3
State the build-up equation out loud (B)
Say it like this
"Here's the equation. Data-dependency size equals the sum, across every property type Curbwrite has to draft for, of the typical examples for that type plus its edge cases. Six separate additions, not one number split evenly."
Why this works
An estimate with no visible equation is a guess in a confident voice.
4
Own a number for every category, not just the total (O)
Say it like this
"Curbwrite covers six property types. Single-family needs the least depth per listing, most of it is boilerplate, so I'd put 45 there. Luxury needs the most, 35, because that's where steering language like 'exclusive' or 'family-friendly' actually gets written. Add up all six and I land on 165."
Why this works
Names the weighting logic instead of hiding a guessed total behind round confidence.
5
Give the total as a range, not a point (U)
Say it like this
"165 is the number for the six property types Curbwrite handles today. If we launch with just the four an agent touches daily, single-family, condo, multi-family, luxury, that's closer to 125. If we add short-term rental copy and teardown listings later, it pushes past 220. So: 125 to 220, and I'd call 165 the working number."
Why this works
A single number implies a certainty about scope nobody actually has yet.
6
Check the range against real sourcing and cleaning time (N)
Say it like this
"165 examples, at about 25 minutes each to pull a real listing, check its facts against the MLS, and flag any steering language, comes to roughly 69 hours. That's a bit under two weeks of one reviewer doing nothing else. If that came out to two days, I'd worry the set's too thin to mean anything."
Why this works
Tests whether the number survives contact with an actual calendar, not just arithmetic on paper.
7
Name which assumption moves the number most, and close (D)
Say it like this
"If I add one more property type at the average size, the total moves by about 28. If I instead double the edge-case count in every category, the fair-housing-risk phrasing, that moves it by about 66, more than twice as much. Depth beats breadth. So: 165 examples across six property types, range 125 to 220, and the thing I'm defending is edge-case depth in luxury and land, not how many types we cover."
Why this works
Ends with a number someone could act on Monday morning, not a vibe about "enough training data."
If you remember one thing A data-dependency line sized as one flat sentence only proves the feature has data in general. It says nothing about whether it has enough of the kind that turns into a fair-housing complaint.

Let's learn

Curbwrite is the feature inside Fieldpost, a real-estate agent platform, that turns an agent's photos and a few rough notes into a full listing description.

Before Noelia's team wrote a real data-dependency section, the PRD covered it in one line, written in about ten minutes during a two-week pilot that only covered single-family homes: "training and eval data: real listing descriptions, pulled from Fieldpost's own archive." Five hundred examples, pulled at random. That felt like plenty, because single-family was the only category that existed yet.

# property type, typical + edge (own numbers)
Single-family resale: 30 + 15 = 45
Condo / co-op: 18 + 7 = 25
Multi-family (2-4 unit): 12 + 8 = 20
Land / vacant lot: 10 + 10 = 20
New construction: 14 + 6 = 20
Luxury ($1.5M+): 15 + 20 = 35

# total (added up, not averaged)
165
The build-up: data-dependency count by property type, typical vs edge-case examples
Single-family
30
15
45 total
Condo / co-op
18
7
25 total
Multi-family
12
8
20 total
Land / vacant lot
10
10
20 total
New construction
14
6
20 total
Luxury
15
20
35 total
Typical examples Edge-case examples
Bar length shows each category against the biggest one, single-family. Luxury isn't the longest bar, but it's the only category where edge cases make up more than half the count, on purpose.
Knowledge spark: what counts as steering language? Words that nudge a buyer toward or away from a home based on a protected class, family status, religion, race, without ever naming the class directly. "Perfect for a growing family" or "walking distance to St. Mary's" can count, because they signal who the home is really for.

Here's the turn. More data isn't really the fix.

We didn't need a bigger data set. We needed one that couldn't skip the luxury category.

Say it plainly: of the old 500 archive examples, the great majority were single-family, because that's what's most common in the archive to begin with. A random pull doesn't fix that skew, it repeats it. A category can have almost no real coverage and the total can still say 500.

The decision that mattered Size the data-dependency section by property-type category and edge-case depth, not by a flat archive pull that just repeats whatever's already common.

What that costs at its worst: Curbwrite reports a healthy overall "sounds natural" score, the team trusts it, and the one category most likely to draw a fair-housing complaint, luxury, keeps producing risky phrasing quietly, because the data behind the eval was never built to catch it.

The choice I would take back. Writing "training and eval data: 500 listings from the archive" as the whole section, instead of breaking it down by property type with a minimum edge-case count in each. That made sense during the two-week pilot, when single-family was the only category to describe. It stopped making sense the moment Curbwrite grew to six very different ones.

What I would leave alone. The single-family category doesn't need special sizing. Archive coverage there is already deep, the descriptions are the most boilerplate, and the fair-housing risk is the lowest of any category, so 45 is enough, and padding it further wouldn't teach the model anything it doesn't already do well.

The lesson. A data-dependency line sized as one flat pull only proves the feature has data in general. It says nothing about whether it has enough of the kind that turns into a complaint.

Now here is the same thing as a story

The short version is above. Read on if you want to feel why one thin category mattered more than four hundred extra single-family examples would have.

Noelia Frayne can read six lines of a listing description and tell you, before she finishes the paragraph, whether it will pass Fieldpost's compliance check. She's the product manager for Curbwrite, and she wrote its first PRD herself, during a two-week pilot covering single-family homes only. The data-dependency section was one line: pull 500 examples from Fieldpost's own archive. It took about ten minutes to write, and with one property type live, it was hard to argue with.

For the better part of a year, that felt right. Curbwrite kept scoring in the high nineties on the internal "sounds natural" review. The team added condos. Then multi-family. Then land, new construction, and luxury, for the high-end agents who wanted a first draft before their own polish pass. Nobody touched the data-dependency line. Why would they. The score kept looking good.

The habit thinned in three small steps. First, when Curbwrite grew into luxury listings, nobody added examples for that category specifically, there wasn't time before the next release and the score was still fine. Then, when a new hire on the compliance team asked whether the eval data still matched what Curbwrite actually covered, the answer was "probably, it's pulled from the whole archive," and the meeting moved on. Then, quietest of all, the Curbwrite team stopped opening the underlying examples at all. They just watched the dashboard. Ninety-six percent felt like a fact, not a measurement anyone had checked lately.

Then, on a Tuesday, Fieldpost's quarterly fair-housing compliance audit pulled twenty live luxury listings, the way it does every quarter, and read them line by line. One, drafted by Curbwrite six days earlier for a house two blocks from a well-rated elementary school, read: "A short walk to one of the area's best schools, perfect for a growing family." Familial-status steering, in a sentence nobody had written on purpose.

Noelia pulled the 500 archive examples that afternoon. Of the 500, four hundred and something were single-family. Luxury, the category the flagged listing belonged to, had eleven.

A hand-sketched comparison scene: a document icon labeled OLD, 500, random pull, with a note reading mostly single-family, no guaranteed luxury or land, next to a document icon labeled NEW, 165, by category, with a note reading 6 property types, minimum edge count each
The category where a mistake costs the most had never really had a chance to be tested.
We didn't need a bigger data set. We needed one that couldn't skip the luxury category.

The old decision that put her there was almost a year old, and easy to remember, because it took about ten minutes. Someone on the platform team had shared a note: for a new AI feature's data-dependency section, pull five hundred examples from the archive and call it done. Every team used roughly the same approach. Noelia wrote it that way because it was fast, and Curbwrite, at the time, only drafted one kind of listing. Nobody in that room was wrong. Five hundred random single-family examples is a reasonable base for a feature that only writes about single-family homes. Five hundred random examples pulled from an archive that's mostly single-family is a coin flip about whether luxury shows up at all.

So she rebuilt it that month: 165 examples, weighted by category, thirty-five of them luxury, twenty of those built specifically around the kind of phrasing that nudges toward a protected class without naming it. Run against the new set, Curbwrite doesn't just report a healthy overall score and stop. It reports: five of the thirty-five luxury examples still draw a steering flag before the fix, the exact shape of what reached that live listing. Caught in an afternoon of testing, instead of found by a fair-housing audit, twice.

The part I'd go back and tell myself: I used to think a data-dependency section was there to say how much data a feature needs. It's really there to decide, ahead of time, which categories you're even able to check.

The five letters, run against Curbwrite's one line

This is a sizing question wearing a design question's clothes, so BOUND fits and FLIPS doesn't. Nobody's habit snapped on one Tuesday, it thinned over months. What changed was how much of each property type that one line could actually account for.

B, break it down. Data-dependency size equals the sum, across every property type Curbwrite covers, of the typical examples for that type plus its edge cases. Six separate additions, not one number split evenly.
O, own the numbers. Six property types: single-family 45, condo 25, multi-family 20, land 20, new construction 20, luxury 35. Added up: 165.
U, use a range. At the point estimate, 165, for the six types Curbwrite covers today. If launch scope narrows to the four an agent touches daily, 125. If it expands to short-term rental copy and teardown listings, past 220. Honest range: 125 to 220.
N, nail the sanity check. 165 examples, at about 25 minutes each to source a real listing, check it against the MLS, and flag any steering language, comes to roughly 69 hours, a bit under two weeks of one reviewer doing nothing else. That's also a sliver of what Fieldpost actually processes, something like 3,000 new listings a month platform-wide, but a data-dependency set was never meant to sample everything. It's meant to sample what breaks.
D, direction. Adding one more property type at the average size moves the total by about 28. Doubling the edge cases inside every category moves it by about 66, more than twice as much. Depth beats breadth. That's the number worth watching, not the category count.

A hand-sketched number line marking a low bound of 125 examples at four property types, a working number of 165 examples at six property types today, a high bound of 220 examples at eight property types, and a separate scale mark of about 3,000 listings Fieldpost publishes in a month
The range against Fieldpost's real monthly listing volume, for scale.
What moves the total more: adding a property type, or doubling edge-case depth
Doubling edge cases in every category+66 examples
Adding one more property type, average size+28 examples
A whole new property type only adds about 28 examples on average. Doubling how many edge cases each existing category gets adds about 66, more than twice as much. Precision inside a category costs more than adding a category.
What moves this most Doubling edge-case depth swings the total more than twice as much as adding a whole new property type. Defend that number, not the category count, if someone pushes back.

And if you want to be sure it really works, try it somewhere else

A mid-size municipal sanitation authority runs a tool called Noticeline. It doesn't draft anything customer-facing, it turns a field inspector's photos and a few scribbled notes into the formal violation notice mailed to a property owner after illegal dumping, an overflowing bin, or hazardous material left on public land.

Thaddeus Kolb is DraySide Sanitation's compliance program manager, and he's the one who ends up sizing Noticeline's data-dependency section.

B, break it down. Notice-drafting data-dependency size equals the sum, across every violation type Noticeline covers, of typical examples plus edge cases, added up by violation type, not guessed as one number for "code violations."
O, own the numbers. Five violation types: illegal dumping 20, overflow or blocked bins 10, hazardous material dumping 15, construction debris dumping 15, repeat-offender escalation notices 10. Total: 70.
U, use a range. At 70 for five violation types. If the agency only issues notices for the three most common, dumping, overflow, debris, and holds off on hazardous material and repeat-offender language until legal signs off, 45. If it adds two more categories, graffiti-adjacent dumping and abandoned-vehicle debris, past 95. Range: 45 to 95.
N, nail the sanity check. At 70 examples, roughly 20 minutes each for a code-compliance reviewer to check the cited ordinance and the wording, that's about 23 hours, under one working week for one reviewer. Against the roughly 400 notices the agency issues a month, that's a small slice, built to test what breaks, not to sample every notice ever sent.
D, direction. In principle, doubling the repeat-offender edge cases would swing Noticeline's total the way deepening edge cases swung Curbwrite's. But a hazardous-material notice and a repeat-offender notice carry more legal weight than an overflow-bin notice, a wrong citation there gets disputed and can void the fine. So the lever Thaddeus actually pulls first is depth in those two highest-stakes categories, not category count in general. Same shape as Curbwrite's answer, a different category doing the work.

The old decision Noticeline would take back is a cousin of Curbwrite's, not a copy. Fieldpost had sized by a flat archive pull because copying the fastest option was easy. DraySide's old habit was different: one shared boilerplate template for every violation type, with a fill-in-the-blank paragraph for whichever ordinance applied, so nobody ever separately sized how many real examples backed each type. Same mistake wearing a different coat: sizing an eval by the unit that was true once, one generic notice, and never checking it again as the real number of violation types grew.

Swap the trigger and it still runs.
Speed: an interviewer wants a number before the meeting ends. Round to 15 per violation type, five types, 75 as the working total, revisit the exact split once real case files start arriving.
Cost: the agency can only pay a compliance reviewer for 20 hours of grading a month. At 20 minutes an example, that's about 60 examples a month, so the data set gets built across two monthly passes, not one sitting.
The model got better: a cleaner ordinance-citation lookup cuts down ambiguous wording. That doesn't shrink the data set. Fewer ambiguous cases just means fewer of the 70 examples turn out to be genuinely hard, which is a different thing from needing fewer of them.

Where people run it wrong.
They size the data-dependency section off the whole feature at launch, one line, one number, and never revisit it as the feature grows into new categories.
They let one overall "looks right" score stand in for every category, so a badly under-covered high-risk category hides behind a healthy average.
They size once and never re-check as the stakes grow, more customers, more categories, past what the original number was ever built to answer.

How to use it live. Say the equation before naming a single number: total equals the sum across categories of typical plus edge, never one flat sentence covering everything at once. That buys a few real seconds to do the arithmetic instead of guessing out loud.

Flashcards (click a card to flip it)

1 · THE FRAMEWORK
Which framework fits a question asking you to write a PRD's data-dependency section, and why not FLIPS?
Tap to flip
ANSWER
BOUND. This is arithmetic behind a sizing decision, a total built from categories and edge cases, not a habit that snaps on one Tuesday.
2 · THE PERSON
Who is this answer about?
Tap to flip
ANSWER
Noelia Frayne, product manager for Curbwrite, the listing-description writer inside Fieldpost, a real-estate agent platform.
3 · WHAT THE OLD LINE HID
What did the old, flat 500-example data-dependency line actually hide?
Tap to flip
ANSWER
That the archive pull was mostly single-family by default, so luxury, the category with the highest fair-housing risk, only had eleven examples behind it.
4 · THE EQUATION
State the data-dependency sizing equation in one line.
Tap to flip
ANSWER
Total size equals the sum, across every property type, of the typical examples for that type plus its edge cases. Never one flat number split evenly.
5 · THE OLD DECISION
What decision would you take back, and why did it make sense at the time?
Tap to flip
ANSWER
Writing "pull 500 examples from the archive" as the whole data-dependency section. It made sense when Curbwrite only drafted single-family listings, the one category that existed.
6 · THE NUMBER
Fill in the blank: Curbwrite's data-dependency section adds up to ______ examples across ______ property types, with luxury getting ______ of them.
Tap to flip
ANSWER
165 examples, 6 property types, 35 for luxury, the biggest slice on purpose.
7 · THE REPLAY
Same steering-language shape, new data-dependency section. What changes?
Tap to flip
ANSWER
The eval stops reporting one healthy score and starts saying: 5 of 35 luxury examples still draw a steering flag before the fix, the exact shape of the phrase that reached the live listing.
8 · CROSS-PRODUCT TRANSFER
Section 4 answers this same question again for a different product. Which product, and which assumption actually moves the number in practice?
Tap to flip
ANSWER
Noticeline, a sanitation authority's violation-notice drafting tool. Doubling edge-case depth would swing the total most in theory, same as Curbwrite, but the real lever is depth in the two highest-stakes violation types first, not category count.

Check yourself Score: 0 / 0

True or false
1. True or false: since Curbwrite's overall "sounds natural" score looked fine at around 96 percent, the data-dependency section didn't need fixing.
  • True
  • False
Show hint
Ask how many luxury examples the 96 percent was actually measured against.
Show answer
False. The 96 percent was measured against a set where luxury had only eleven examples, so it couldn't have caught a steering problem even if that whole category was quietly broken. A healthy average can hide a badly under-covered category.
Multiple choice
2. Which assumption swings the size of Curbwrite's data-dependency section the most?
  • A. How many property types Curbwrite covers in total.
  • B. How many edge cases each category gets.
  • C. Which day of the week the compliance audit happened.
  • D. How many agents use Fieldpost overall.
Show hint
Compare adding one whole property type against doubling edge cases inside every category already there.
Show answer
B. Doubling edge-case depth adds about 66 examples to the total, versus about 28 for adding a whole new property type.
Fill in the blank
3. Curbwrite's data-dependency section adds up to ______ examples across ______ property-type categories, with luxury getting the most, ______.
Show hint
Add the six category totals from the calc block.
Show answer
165 examples, 6 categories, 35 for luxury. 45 + 25 + 20 + 20 + 20 + 35 = 165.
Short answer
4. What old decision does this answer take back, and why did it make sense when it was made?
Show hint
Look at how many property types Curbwrite covered the first time anyone wrote the data-dependency section.
Show answer
Model answer: Writing "pull 500 examples from the archive" as the whole data-dependency section, instead of breaking it down by property type with a minimum edge-case count in each. It made sense when Curbwrite only drafted single-family listings, and it stopped making sense once it grew to six very different ones.
Short answer, apply it yourself
5. Think of an AI feature's PRD you've seen or could imagine. What's one data category it might quietly be missing, that a single line like "we need training data" would never show you?
Show hint
Think about a use case that's rare but would matter a lot if it went wrong, the kind that might barely appear in whatever data the team happened to already have lying around.
Show answer
Model answer: A resume-screening tool's PRD that just says "we need past resumes" might quietly have almost no examples from non-traditional career paths, career changers, military veterans, self-taught engineers. A single "enough resumes" line would never show that gap, because most of the resumes on hand look alike.
Fill in the blank
6. If Curbwrite grows from 6 property types to 8, at the same average size per category, about 28, the data-dependency total would grow from 165 to roughly ______.
Show hint
Add two more categories at the average size to the current total.
Show answer
About 221. 165 + (2 x 28) = 221, close to the high end of the 125-to-220 range, which is a good sign the range was honest to begin with.
From U2xAI Academy

From answering questions to owning outcomes.

A live workshop where you ship a working AI agent, defend a launch decision, and walk away with a portfolio recruiters can't wave off, not just more questions to study.

  • A live AI agent you actually shipped
  • A launch decision you can defend under pressure
  • An interview-ready portfolio, not more flashcards
Know more