CalculationIntermediateEval-Driven Specification / Writing a PRD for an AI feature / #9

How do you document cost assumptions inside a PRD?

The direct answer
Write the cost equation as three owned terms, tokens times price times calls per interaction, each with a stated source and a low/high range, not one point number. Then add one line naming which term would swing the total most if it turns out wrong. That term is almost always calls per interaction, the one PMs quietly write down as a bare guess because it doesn't feel like it belongs with the token math.
Do this, in order
  1. Write the cost section as tokens times price times calls per interaction, each term sourced, not one point number.Why: a number with no source is a guess wearing a fact's clothes.
  2. Give calls per interaction its own line and its own range, the same way the token count gets one.Why: it's the term most likely to be a guess, and it's multiplied against everything else.
  3. State a low and a high for the whole estimate, never a single confident number.Why: one number tells the reader you're sure. A range tells them the truth.
  4. Sanity-check the total against something the reader can feel, like the staff time it replaces.Why: raw dollars sound scary or trivial depending on nothing. A comparison makes the number real.
  5. Name an owner and a real-usage review date for the guessed term, not a launch-day freeze.Why: an unsourced number left alone goes stale the same way an unowned golden set does.

How to answer this, stage by stage

Seven moves. This is arithmetic with one honesty problem folded in, so what's being graded is whether you flag your own weak assumption before the interviewer finds it.

1
Scope it to one real feature
Say it like this
"Let me scope this. Say we're building a feature for a small law firm: it reads everything a new client uploads, a passport, an employment letter, an old case file, and writes a one-page summary the attorney reads before the first call. I'll size the PRD's cost section around that."
Why this works
A real workflow keeps the arithmetic from floating free of any actual product.
2
Say the equation out loud, no numbers yet
Say it like this
"Cost per intake equals the tokens in that file, times the price per token, times how many times the summarizer actually runs before anyone's happy with it. Three terms. The first two are about the model. The third one is about the person using it, and it's the one people forget to write down."
Why this works
Naming all three terms up front stops the third one from getting quietly skipped later.
3
Put real numbers on the model terms, and say where they came from
Say it like this
"I'd put the file at about 18,000 tokens, roughly seventy pages once the scans get read as text, plus a 600-token summary out. At a quarter of a cent per hundred input tokens and a cent per hundred output tokens, that's about five cents a call. I pulled the page count from forty real intake files, not a guess."
Why this works
Naming the source, forty real files, turns a number into something someone else can check.
4
Own the term that isn't about tokens at all
Say it like this
"Here's the part I'd write down on its own line, not buried under the token math: I'm assuming one call per intake. But clients upload a missing document mid-review, and attorneys ask for a refreshed summary after the first call. I don't have real usage data yet, so I'd flag this as the number most likely to be wrong."
Why this works
Saying "this one might be wrong" out loud is what a strong candidate does and a weak one skips.
5
Do the arithmetic, low to high
Say it like this
"Simple file: three cents a call. Complex file: eight cents. If reruns really do land somewhere between one and four times, that's between three cents and thirty four cents an intake. Across eighteen intakes a month, the honest range is under a dollar to about six dollars, not the single nickel I might otherwise have quoted."
Why this works
A range built from the same two terms, run twice, proves you're using one method, not reciting numbers.
6
Sanity-check the number against something felt
Say it like this
"Compare it to what it replaces. A paralegal spends about forty minutes hand-summarizing a new file, worth about twenty three dollars of staff time. Even the high end of my range is a rounding error against that. So the arithmetic was never the risk. The risk is quoting finance one number and then billing a different one."
Why this works
This is the line that separates "is this worth building" from "did I document it honestly."
7
Name the fragile assumption, then close on the range and an owner
Say it like this
"If one line in this PRD turns out wrong, it's calls per intake, not the token price, because reruns are a habit, not a setting. So: three to eight cents a call, times one to four calls, checked against real invoice data every quarter, with my name on that check."
Why this works
Closing on the fragile term and a named owner is what most candidates never do, and what a follow-up question is built to expose.
If you remember one thing Give calls per interaction its own range and its own source, the same as any token count gets. It's the term most likely to move, and the one most often left as a bare guess.

Let's learn

Say a small law firm has a feature that reads everything a new client uploads, a passport, an employment letter, an old case file, and writes a one-page summary the attorney reads before the first call. Before the feature, a paralegal read the whole file by hand and wrote that summary herself. About forty minutes a file. Now the feature does the same read in under a minute, for about five cents.

Knowledge spark: why does a model charge two different prices? Reading costs less than writing. A model spends less computing power taking in a page than it does producing one, token for token, so input tokens are usually priced far below output tokens. A PRD's cost section needs both numbers, not one blended guess.

The equation is short. Cost per intake equals the tokens in the file, times the price per token, times how many times the summarizer actually runs before the file is done. The first two terms come from the model and its price list. The third term comes from a person deciding they're not satisfied yet, and it's the one that quietly gets skipped.

# the equation
cost per call = (input tokens × input price) + (output tokens × output price)

# target: 18,000 in / 600 out, $0.0025 per 1,000 in, $0.010 per 1,000 out
(18 × 0.0025) + (0.6 × 0.010) = 0.045 + 0.006 = $0.051

# low: simple file, 10,000 in / 400 out
(10 × 0.0025) + (0.4 × 0.010) = 0.025 + 0.004 = $0.029

# high: complex file, 30,000 in / 900 out
(30 × 0.0025) + (0.9 × 0.010) = 0.075 + 0.009 = $0.084
The build-up, one call, low to high
Low
$0.025
$0.004
$0.029
Target
$0.045
$0.006
$0.051
High
$0.075
$0.009
$0.084
Input cost (reading the file)Output cost (writing the summary)
This is one call, before calls per intake gets multiplied in. Reading the file carries most of the price at every level, even though each output token costs four times as much, because there are so many more input tokens than output ones.
We did not blow the firm's budget. We blew the number the CFO remembered from the pitch.

Here's what that cost at its worst. The dollars stayed small. Across the forty small firms using this feature, the documented compute line was about thirty seven dollars a month. The real one, once reruns were counted honestly, was closer to a hundred and twenty five. Nobody's budget broke. But the PRD had told finance a number, and three months later a different number showed up on an invoice with no warning in between.

What moves the per-intake cost the most
Calls per intake: 1 assumed, 3.4 real+240%
Switch to a pricier model for accuracy+100%
Complex file: packet grows to 30,000 tokens+65%
Simpler intake form: packet shrinks to 12,000 tokens−29%
All four bars are read against the $0.051 target. Calls per intake swings the cost more than doubling the model price, because it isn't a setting on a price list, it's a habit that showed up after launch and nobody had sized a range for it.

The choice I would take back. Writing "one call per intake" as a flat line in the cost section, the same confident way the token count got written, instead of giving it its own range and its own source. Token counts came from real files. That number came from nowhere.

What I would leave alone. The token price itself doesn't need micro-tuning. It's public, it updates on its own when a vendor changes it, and chasing the fourth decimal place is time not spent on the term that actually moves the total.

The lesson. If the part of an estimate that swings the most is also the part with no real source behind it, the estimate wasn't finished. It was the easy eighty percent, dressed up to look like the whole hundred.

Now here is the same thing as a story

Skip this if a wrong PRD number already keeps you up at night. Read on if it doesn't yet.

Nusrat Karim has written eleven PRDs at Casebridge, a small legal-tech company that builds AI add-ons for law firms too small to build their own. Every one of the eleven shipped on schedule, and every one had a cost section finance never had to ask her about twice.

The eleventh was Intake Assist: a feature that reads everything a new client uploads and writes a one-page case summary for the attorney's first call. Solmar Immigration Law, a five-lawyer practice, was the first firm to turn it on.

For the first two months, the invoices matched her PRD almost to the cent. Eighteen intakes a month, about a nickel each, under a dollar total. She'd written "calls per intake: 1" in the cost section without a second thought, the same way she'd write a token count. It felt like a fact, not a guess.

Then Solmar's staff got comfortable with the feature. A client would email a missing employment letter after the first upload, and instead of adding it to next week's file, someone would just rerun the summary. An attorney, prepping for a second call, would ask for a refreshed one-pager after the first conversation turned something up. A typo in a client's name would get fixed by rerunning the whole thing rather than editing the output by hand.

None of this looked like a habit changing. It looked like three different people, three different weeks, each doing the sensible thing in the moment.

It surfaced on a Tuesday, the way weather does, not a headline. A customer success lead mentioned it in standup, in passing. "Solmar's bill came in almost four times what we quoted them, by the way. Nobody's complained. Just flagging it."

Nusrat pulled the raw call logs that afternoon. Average calls per intake at Solmar: 3.4. Not one. She checked two other firms on the same feature. 2.9. 3.6. Nobody had told her to check, and nobody had complained, because the actual dollars were still small. The number had simply been wrong, quietly, for three months.

The set wasn't wrong the day she wrote it. It went wrong the first week nobody was watching whether real usage still matched the guess.

She ran the same math across all forty firms live on Intake Assist. The line item she'd told finance to expect was thirty seven dollars a month. The real one was closer to a hundred and twenty five.

Here's what I want to be honest about: the dollars were never the danger. Even at the real, higher number, Intake Assist still cost a fraction of what a paralegal's forty minutes was worth. If Nusrat had sized this generously from day one, nobody would have noticed or cared. The danger was that she'd written one confident number for the single term in the equation that wasn't really a model fact at all. It was a guess about how people would use a new tool, and guesses about people are exactly the kind that belong in a range, not a fact sitting next to a token count.

She remembered the exact moment she wrote it. Drafting the cost section the week before launch, tokens and prices lined up neatly from the price list, and then a blank line for "usage assumptions." She typed "1 call per intake" because leaving it blank felt worse, and a range felt like admitting she didn't know, in a document that was supposed to sound certain.

The PRD she rewrote after that Tuesday gives calls per intake its own row next to the token math, instead of underneath it: one to four calls, sourced from ninety days of real logs across three firms, checked every quarter against the actual invoice. The next feature she scoped got the same treatment before launch, not three months after. Its first real invoice came in at four dollars and ten cents a firm, squarely inside the two-to-nine-dollar range she'd printed on page one. No standup remark. No surprise.

The equation never changed. What changed was which line in it she was willing to call a guess, out loud, in the document itself.

A PRD's cost-assumptions section on a desk, with the packet size and token math on two sides, a guessed calls-per-intake number on a third side, and the real invoice showing 3.4 times that number on the fourth
Same equation. The missing piece was never a number, it was a source.

BOUND, letter by letter, for this cost section

This is a sizing question with a documentation habit riding on top, so BOUND fits and FLIPS doesn't. Nobody's behavior snapped here. A PM wrote a number that felt like a fact and it was actually a guess.

A number line running from a low per-call cost of about three cents through a target of about five cents to a high of about eight cents, with a separate felt-check mark for about twenty three dollars of paralegal time saved per intake, not to scale
The range on the model side. The felt check on the right is the number that proves the range never mattered financially, only honestly.

B, break it down. Cost per intake equals the file's tokens, times the price per token, times how many times the summarizer actually runs before the file is considered done.
O, own the numbers. 18,000 input tokens and 600 output tokens for a typical Solmar file, from a sample of forty real intakes. $0.0025 per 1,000 input tokens and $0.010 per 1,000 output, from the public price list. One call per intake, guessed, with no source, which is exactly the problem.
U, use a range. About three cents a call on a simple file to eight cents on a complex one. Combined with one to four calls, the honest monthly range for Solmar runs from under a dollar to about six dollars, not the single nickel first quoted.
N, nail the sanity check. Even the high end is a rounding error against the twenty three dollars of paralegal time a summary replaces. The tool was never the risk. The undocumented guess was.
D, direction. Calls per intake swings the total the most, more than the token price and more than the file size, because it's the one term nobody sourced, and it moved by more than three times once real firms started using the feature their own way.

What I would leave alone The token price itself. It's public, it updates on its own, and re-checking it to the fourth decimal wastes review time that belongs on the term nobody sourced.

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

A small city's planning office uses a similar feature: it reads a building permit application, drawings included, and writes a one-page review brief for the assigned planner.

B, break it down. Cost per permit equals the packet of forms and drawings in tokens, times price per token, times how many times the applicant resubmits before the file is complete.
O, own the numbers. Packet size swings wildly here, from an 8,000-token kitchen remodel to a 200,000-token environmental report for a subdivision. Same price tiers as before. Resubmission calls, pulled from real permit-office logs, average 2.1 per application, not 1.
U, use a range. From about a cent for a small remodel to well over a dollar for the biggest environmental filings, before resubmissions are even counted.
N, nail the sanity check. A planner spends about twenty five minutes on a first read of a permit file by hand. Even the priciest environmental case, resubmissions included, costs a fraction of that in compute.
D, direction. Here it isn't resubmissions that swings the total the most. It's packet size, because a two-page remodel and a two-hundred-page environmental report sit in the same queue, a swing no call-count assumption could ever hide. The opposite lesson from Solmar's case, where every file was roughly the same size and only the call count moved.

Swap the trigger and it still runs.
Speed: an interviewer asks how fast the cost section needs to be ready before a board vote on next year's budget. Same equation, solved earlier with wider ranges instead of real logs.
Cost: finance caps the AI line item at two hundred dollars a month across every firm. Same equation, run backwards, to find how many reruns the budget can actually absorb.
The model got better: a newer model drops the price per token by half. Same equation, same ranges on tokens and calls, only the price term moves, and the guessed term is still the one worth rechecking.

Where people run it wrong.
They source the model-cost terms carefully and leave the usage term as a bare guess, because it doesn't feel like it belongs to the same math.
They quote finance a single number instead of a range, so the first real invoice reads as a miss even when it's still cheap.
They never revisit the usage assumption once real logs exist, so a guess from launch week quietly outlives the data that could have replaced it.

How to use it live. Say the equation before touching a single number: "tokens times price, times calls per interaction." That buys you a few seconds to recall which term you actually have a source for, and it tells the interviewer up front that the guess is going to get flagged, not hidden.

Flashcards (click a card to flip it)

1 · THE FRAMEWORK
Which framework fits a question about documenting cost assumptions, and why not FLIPS?
Tap to flip
ANSWER
BOUND. This is arithmetic plus a documentation habit, not a habit that snaps and not a leading-versus-lagging metric pair.
2 · THE PERSON
Who is this answer about?
Tap to flip
ANSWER
Nusrat Karim, a product manager at Casebridge, a legal-tech company. She wrote the cost section for Intake Assist, a summarizer sold to small law firms.
3 · THE GUESSED TERM
Which term in the equation got written as a bare guess instead of a sourced number?
Tap to flip
ANSWER
Calls per intake. It was written as "1," with no source and no range, while the token counts were pulled from forty real files.
4 · THE EQUATION
State the cost-per-intake equation in one line.
Tap to flip
ANSWER
Tokens in the file, times price per token, times how many times the summarizer actually runs before the file is done.
5 · THE OLD DECISION
What decision would you take back, and why did it make sense at the time?
Tap to flip
ANSWER
Writing "1 call per intake" as a flat guess instead of a sourced range next to the token math. It made sense at launch because there was no usage data yet, and a blank line felt worse than a guess.
6 · THE NUMBER
Fill in the blank: with 18,000 input tokens and 600 output tokens, the base cost of one call is ______.
Tap to flip
ANSWER
$0.051. (18 × $0.0025) + (0.6 × $0.010) = $0.045 + $0.006. Calls per intake then multiplies this figure.
7 · THE REPLAY
Same equation, but calls per intake is now sourced from real logs and reviewed quarterly. What changes?
Tap to flip
ANSWER
The first real invoice lands inside the printed range instead of arriving at 3.4 times the quoted number three months later with no warning.
8 · CROSS-PRODUCT TRANSFER
Section 4 answers this same question again for a different product. Which product, and what's different about the D step?
Tap to flip
ANSWER
A city planning office's permit-review feature. There, packet size swings the total the most, not calls per permit, because file sizes range from 2 pages to 200.

Check yourself Score: 0 / 0

Fill in the blank
1. With 18,000 input tokens at $0.0025 per 1,000, and 600 output tokens at $0.010 per 1,000, the base cost of one call is ______.
Show hint
Multiply each term separately, then add the two results.
Show answer
$0.051. (18 × 0.0025) + (0.6 × 0.010) = 0.045 + 0.006 = 0.051. Calls per intake multiplies this to get the real per-intake cost.
Multiple choice
2. According to the sensitivity chart, what single change swings Intake Assist's per-intake cost the most?
  • A. Switching to a pricier model for accuracy.
  • B. Calls per intake rising from 1 to 3.4.
  • C. A complex file's packet growing to 30,000 tokens.
  • D. A simpler intake form shrinking the packet to 12,000 tokens.
Show hint
Which bar on the sensitivity chart is longest?
Show answer
B. Calls per intake rising from 1 to 3.4 swings the cost by 240 percent, more than double the next biggest change, because it's the one term nobody sourced.
True or false
3. True or false: pinning the token price down to the fourth decimal place matters more to this estimate than sourcing the calls-per-intake number.
  • True
  • False
Show hint
Look at the sensitivity chart. Which term is public and small, and which one moved by more than three times?
Show answer
False. Token price is public, small, and updates on its own. Calls per intake is unsourced and swings the total by 240 percent once real usage shows up. Chasing price precision spends review time on the term that matters least.
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 the cost section's usage line got written the first time, and what else was on the page around it.
Show answer
Model answer: Writing "1 call per intake" as a flat, confident number instead of a sourced range next to the token math. It made sense at launch because there was no usage data yet, and a blank line in a document meant to sound certain felt worse than a guess.
Short answer, apply it yourself
5. Pick an AI feature you've used that seems to run more than once per task, an editor that reruns after every fix, a photo tool that regenerates after every tweak. Write its cost equation in one line, and name the term most likely to be an unsourced guess.
Show hint
The guessed term is usually about how people actually use the tool, not about the model itself.
Show answer
Model answer: "An AI photo touch-up tool: cost equals image tokens times price, times how many times someone regenerates before keeping a result. The regenerate count is the guessed term, the one nobody sources until real usage logs exist." Any answer works if it names a real equation and points at the usage term as the fragile one.
Fill in the blank
6. Solmar runs 18 intakes a month at $0.051 a call. At the documented 1 call per intake, the monthly cost is about $______. At the real 3.4 calls per intake, it's about $______.
Show hint
Multiply 18 × 0.051 for the documented figure, then 18 × 0.051 × 3.4 for the real one.
Show answer
$0.92 documented, $3.12 real. 18 × 0.051 = 0.918. 18 × 0.051 × 3.4 = 3.12. The ratio, 3.4 times, is the same ratio the reruns themselves moved by.
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