CalculationAdvancedQuality, Cost & Token Economics / Cost modeling and unit economics / #4

How does prompt caching change your unit economics, and when does it not help?

A prompt that matches the cached block everywhere except one added timestamp does not get a smaller discount. It gets none at all, and the bill quietly goes back to what it cost before caching ever shipped.

The direct answer
Put the shared, word for word block, the policies, the plan table, the tool list, in front, mark it as the cache breakpoint, and put anything that changes, the customer's name, the ticket text, a timestamp, after it. Then watch cache hit rate as its own number, never folded into total spend, because a broken cache does not slow the discount down, it turns it off. It stops helping the moment a call's traffic is too rare, too different, or too spread out in time to reuse that exact block again before it expires.
Do this, in order
  1. Cache the exact, byte for byte block, and put everything that changes after the cutoff, never before it.Why: one different token ahead of the breakpoint pays full price for the whole block. There is no partial credit.
  2. Watch cache hit rate as its own number, not folded into total spend.Why: hit rate is the leading number. Total spend can keep climbing for a normal reason, more tickets, and hide a cache that quietly stopped working.
  3. Put a real alert on the hit rate itself, one that pages someone, not just a dashboard tile.Why: a number nobody gets paged on is the same as a number nobody is watching.
  4. Before caching a block, check whether it actually repeats often enough to earn back the write cost.Why: caching something that's read once and never again just adds a fee for nothing.
  5. Scope caching to the calls where the prefix genuinely stays identical, and run the rest the old way.Why: forcing caching onto highly variable, one off prompts pays the write cost and never earns the discount back.
  6. Recheck hit rate after any change that touches the top of the prompt, not just after a wording change.Why: this break came from a tracing addition, not a rewritten sentence, and a review that only reads for meaning walks right past it.

How to answer this, stage by stage

Nobody is grading whether you can define prompt caching. They are grading whether you know its discount is a switch, exact match or full price, and not a dial that just gets a little smaller.

1
Scope it to one real product before answering in the abstract
Say it like this
"Let's ground this in one product. Pellwick is the billing support chat inside Kelmscott, a scheduling and invoicing tool for small service businesses. Ilaria Alderton is the engineer who owns Pellwick's cost dashboard."
Why this works
An abstract "how does caching change unit economics" answer turns into a pricing lecture fast. One product and one engineer keep the whole thing concrete.
2
Reframe the question before answering it
Say it like this
"This isn't really asking me to define prompt caching. It's asking whether I know the discount is a switch, not a dial, exact match or full price, and whether I'd build the one number that shows the switch just flipped off."
Why this works
Stops you giving the generic answer, "caching saves money," which says nothing about the moment it stops.
3
Give the one decision, plainly
Say it like this
"Here's what I'd build. The shared block goes first and never changes. One character different ahead of the cutoff and the whole block bills at full price again. So I'd track cache hit rate on its own, and page someone the moment it drops, not wait for the total bill to look wrong."
Why this works
This is the direct answer, said in one breath, before any story.
4
Prove it with the failure, cut to four sentences
Say it like this
"Here's what happens without it. Someone added a live timestamp to the very top of Pellwick's prompt for tracing. That one change put a different token ahead of the cutoff on every call, so cache hit rate fell from ninety one percent to three percent overnight. Total spend kept climbing anyway, because ticket volume was climbing too, so the one alert Kelmscott had never fired, and it took eleven weeks and a routine finance review to catch it."
Why this works
Shows the real cost of watching the wrong number, not just the mechanism behind caching.
5
Say what you'd measure going forward
Say it like this
"I'd track two numbers, not one: cache hit rate, and cost per resolved ticket. And I'd recheck both any time a change touches the first few hundred tokens of the prompt, not just when someone rewrites what it says."
Why this works
Shows you're thinking past this one incident, into the thing that catches the next one early.
6
Say what you'd leave alone
Say it like this
"I wouldn't force caching onto Pellwick's rare conversations, the ones where a customer's whole account history has to sit ahead of the cutoff and almost never repeats. Caching a block that's read once costs more than it saves."
Why this works
Shows judgment instead of applying one rule everywhere at the same cost.
7
Close on the decision, not the story
Say it like this
"So: cache the exact block, watch hit rate as its own number, and expect the discount to stop the moment a call is too different, too rare, or too spread out in time to reuse that block again."
Why this works
Ending on the rule, not the anecdote, is what makes this sound like a method you'd actually reuse.

Let's learn

Pellwick is the chat inside Kelmscott, a scheduling and invoicing tool for small service businesses. When a customer has a billing question, a wrong charge, a plan change, a refund, Pellwick answers it instead of the ticket sitting in a queue.

Before Pellwick, every billing question waited an average of six hours for a person to answer it. About one in five customers who filed a billing ticket cancelled their plan before anyone got back to them.

Knowledge spark: what is prompt caching? Every time a chat calls the model, it sends the whole prompt again, the instructions, the policies, the question. Caching lets the model skip re reading the part that hasn't changed since last time, and charge less for it. It only works if that part matches exactly, word for word, character for character, the version it saved before.

Pellwick answers most billing questions in under a minute now, and the support queue behind it shrank by more than half. But the part nobody outside engineering was watching was cost, because Pellwick's prompt carries a big shared block on every single call, six thousand tokens of plan tables, refund rules, and policy text, the same for every customer.

Cost per resolved ticket, before caching and right after caching launched
1.2 cents 0.5 cents Before caching After caching, 91% hit rate
Before cachingAfter caching launched
Turning caching on cut the cost of resolving one billing ticket from about one point two cents to about half a cent, a fifty eight percent drop, without changing a single word Pellwick says to a customer.

That drop is not the story here. The story is what happens the day the shared block stops matching, word for word, and nobody notices, because caching does not fail loud.

Caching does not get a little worse. It gets off.
Hand sketched comparison titled there is no partial discount. Left panel a gauge icon labeled what people assume, caption a dial, some credit for a mostly matching prompt. Right panel a plain square icon labeled what actually happens, caption a switch, exact match or full price plus a premium.
This is the whole answer to when it doesn't help. Close is not a discount. Close is full price.

At its worst, this costs more than never caching at all. Every call still pays a small fee to write a fresh cache entry, on top of full price for the block, and that fee only pays for itself if the exact same block gets read again before it expires. Miss that, and caching is a tax, not a discount.

Cache hit rate vs. a spend index, week 0 to week 12
100% 50% wk1: timestamp ships wk11: Meret flags the cost wk12: fix ships
Cache hit rateSpend index, share of a daily cap
Hit rate falls from ninety one percent to three percent the week the timestamp ships, and stays there for eleven weeks. The spend index keeps climbing smoothly the whole time, because ticket volume was rising too, so its shape never looked broken. It only drops once the fix ships in week twelve, even with more tickets than ever running through it.

In the review Meret Kranz, the finance partner who checks Kelmscott's vendor spend every quarter, ran that week: cost per resolved ticket sitting at one point one cents, almost exactly what it cost the year before caching ever existed, on a feature everyone still believed was cutting cost in half.

The choice that mattered Kelmscott's only alert watched total daily spend and paged someone if it jumped more than twenty percent overnight. That made sense when Pellwick's ticket volume was flat, since any real problem would have shown up in the total within a day or two. It stopped making sense once ticket volume itself was climbing every week for an unrelated reason, growth, and could hide a broken discount inside a line that was always going to rise anyway.

What I'd leave alone: Pellwick's rare conversations, the ones dragging a customer's whole account history into the prompt ahead of the cutoff. That block barely repeats from one customer to the next, so caching it would only add the write fee, never earn it back.

The lesson: caching doesn't wear down. It either matches or it doesn't, and the moment it stops matching, the bill goes straight back to what it cost before anyone turned caching on. Watching total spend told Kelmscott caching was probably fine, for eleven weeks, while it was already off.

Now here is the same thing as a story

Read the short version above when you're in the room. Read this one when you want to feel why Ilaria stopped opening a dashboard that was, by every number on it, still fine.

Ilaria Alderton built Kelmscott's model cost dashboard herself, three years before Pellwick ever existed, back when the company's first, simpler support bot only needed one chart to make sense of what it cost each month.

The week Pellwick's caching shipped, she opened the dashboard every single Monday morning, coffee in hand, and watched the cost per ticket line drop and hold. Ninety one percent of calls hit the cache. The line stayed flat and low for months, exactly the way a fix is supposed to look once it's actually working.

By month two, she'd stopped checking it first thing and checked it after lunch instead. By month four, she'd glance at it maybe every other Monday. By month six, she genuinely could not remember the last time she'd opened it on purpose, only because something else had made her look.

That April, a small tracing ticket came in, nothing to do with cost at all: could the support team tell which build of Pellwick had answered a given customer. An engineer added one line, a live timestamp, right at the top of the prompt, ahead of the shared block, so every log entry would carry it. It shipped on a Tuesday. Nobody flagged it for cost review, because it changed nothing Pellwick ever said out loud.

Hand sketched comparison titled checks it, or trusts it, nothing in between. Left panel a gauge icon labeled Monday check, caption opens the cost dashboard every week, for months. Right panel a question mark card labeled trusts it, caption stops opening it at all, because it kept looking fine.
The habit didn't fade slowly. It just stopped, the week the line had held flat long enough that checking felt pointless.

Cache hit rate fell from ninety one percent to three percent within the hour, and stayed there. Every call that used to cost half a cent went back to costing more than a cent, plus a small fee for writing a cache entry that, because of that timestamp, would never be read again. Nobody saw it happen, because nobody was still opening the dashboard.

We did not lose half a cent a ticket. We lost eleven weeks of not knowing the discount was gone.

Pellwick kept answering billing questions exactly as well as it had the day before. Nothing a customer saw ever changed. The only thing that changed was a number on a dashboard nobody was opening, and a running total that kept climbing anyway, for a reason that had nothing to do with it.

Eight months earlier, in the meeting where Pellwick's alerts first got built, someone asked whether to alert on total daily spend or on cache hit rate itself. Total spend was already being logged for the monthly vendor report, so it was the free option. Hit rate would mean building a new chart from nothing, one more thing to maintain. Total spend won, reasonably, because back then Pellwick's ticket volume was flat, and any real problem would have shown up in the total within a day or two.

Ilaria didn't catch it. Meret Kranz did, three months after the timestamp shipped, during a routine quarterly review of vendor spend. She noticed cost per resolved ticket sitting at one point one cents, almost exactly what it cost the year before caching existed, and asked Ilaria why a feature that was supposed to be cutting cost in half wasn't showing up anywhere in the number.

Ilaria found the timestamp in about twenty minutes once she went looking. Run the same Tuesday again, with one change: a hit rate alert instead, set to page if the number drops below seventy percent for more than fifteen minutes. The same timestamp ships, the same silent break happens, and the page goes out twelve minutes later, before a single full day of full price billing has passed. Eleven weeks of paying full price becomes twelve minutes of it.

One design tracked the thing caching was supposed to save. The other tracks the thing caching actually does, whether the exact block still matches, and only one of those two designs can tell you the moment it stops.

What I would tell myself, back in that first alerts meeting: the moment a discount depends on an exact match, ask what a broken match looks like on a dashboard that only watches the total, because it looks like nothing at all, right up until someone outside engineering notices the bill didn't move the way it should have. Nobody asked. That's on the room, not on Ilaria.

FLIPS, and the one letter with no partial credit

Not five guesses about what could go wrong with a discount. FLIPS names the one habit that snapped, and asks which old choice made snapping the only option.

Hand sketched list titled FLIPS one line each. Five numbered rows: F, Ilaria, the engineer who owns the cost dashboard. L, stops opening the dashboard once it stays cheap for months. I, checks the number every Monday, or trusts it and never checks again. P, one alert watches total spend, never the cache hit rate itself. S, a hit-rate alert catches the break in minutes, not eleven weeks.
Five steps. Only the I step has no middle setting to fall back on.
FFind the person. Whose morning is this?
Ilaria Alderton, the engineer who owns Pellwick's cost dashboard at Kelmscott, and built it herself three years before Pellwick ever existed.
Name her first, or the whole story stays a description of a pricing model instead of a decision someone makes with a browser tab.
LLocate the habit. What did she stop doing because it worked?
Opening the cost dashboard every Monday morning to check cache hit rate and cost per ticket. She stopped once it stayed flat and low for months, because checking a number that never moves starts to feel like a waste of a Monday.
Trusting a number that had earned it is the real product caching shipped. The cheaper ticket is just what trust looks like from the outside.
IIdentify the flip. What verb snaps?
Checks the number every Monday, or trusts it completely and never opens it again. No middle setting once it had held flat long enough, and she never drifted back to weekly checks on her own.
This is the flip the fix has to design against. Not "the cache got a little less reliable," but "she stopped believing the number needed watching at all."
PPinpoint the old decision. Which choice only made sense before?
Alerting on total daily spend instead of cache hit rate, because spend was already logged for the vendor report and, back then, ticket volume was flat enough that any real problem would show up in the total within a day or two.
Small, reasonable, and made eight months before it mattered. That's what makes it a real reversal, not an obvious mistake.
SShow the replay. Same bad day, new design.
A hit-rate alert, set to page below seventy percent for more than fifteen minutes, fires about twelve minutes after the same timestamp ships. Eleven weeks of full price billing becomes twelve minutes of it.
Counted, not vague. Minutes against weeks, not "caught it much sooner."

Three things worth stating directly, since this is where the real judgment sits. The alternative the team could have tried first was tightening the total spend alert's threshold, paging on a smaller jump instead of building a second chart. It loses because a climbing spend line can mean two very different things, more tickets at the same price, or the same tickets paying full price instead of a cached one, and a dollar total alone can't tell those apart. The AI specific failure worth naming by name is silent cache invalidation: a code change put a different token ahead of the cache breakpoint, and nothing about Pellwick's answers to customers ever looked wrong, so the transcript level view stayed clean while the price underneath it quietly went back to full. The guardrail is the hit rate alert itself, plus one more rule: nothing gets added to the front of the prompt without a canary check on hit rate before it ships, not after. That guardrail isn't free. Building and maintaining a hit rate chart costs more engineering time than the one spend alert Kelmscott already had for the vendor report, a real trade accepted on purpose, because paying full price silently for eleven weeks costs far more than the extra dashboard ever would. And the bar it enforces was never a hundred percent hit rate, a cache going cold after its time limit expires is normal and expected. It's a probability bar, checked against a real drop: the alert pages when hit rate clears an unusual fall, below seventy percent for more than fifteen minutes, not a promise that every single call reuses the cache.

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

Same five letters, a company that will never see a support ticket, and this time the shared block isn't a paragraph of billing policy. It's a rate table stapled to every quote a technician sends.

Renhurst Mechanical is a heating and cooling company. Rafter is the assistant its technicians use from a tablet in the truck to draft written quotes on site. Sioned Sallow is the ops manager who used to type every quote by hand before Rafter, the standard labor rates, the licensing text, the warranty language, then the specific diagnosis for that one furnace.

The case for handing it over: for its first five months, Rafter cut the average time to send a quote from twenty two minutes to about four. Cost per quote fell fast too, because the two thousand one hundred token rate table and warranty block at the top of every quote was identical across every technician and every job, so it hit the cache almost every time.

The case against it: about one job in six is not routine. A furnace under an old manufacturer clause, or installed under a code Renhurst rarely sees anymore, needs a different line inserted into the middle of that same rate table, not added after it, because the clause changes which labor rate applies. Once a technician typed that clause in, the block stopped matching, word for word, for that job and every one after it that needed the same clause.

The decision Sioned would take back Treating every quote as the same unit of work, whether or not it touched the customizable clause. That was fine while custom clauses were rare. It stopped being fine once a slow season pushed more of the older, non standard equipment onto the schedule.

A technician quoting a forty year old furnace, still under a clause Renhurst rarely deals with anymore, spent nine minutes inserting the right language into the middle of the rate table. That one quote cost about six times what a routine quote cost, full price for the whole block, plus a cache write fee that was never going to be read again. Nobody thought it was a bug. It looked like a hard job costing more, which felt right.

Sioned's fix wasn't a smarter alert, since nothing here was hidden the way Pellwick's break was, everyone could see the quote taking longer. It was a scope decision: Rafter now runs on maintenance visits and standard tune ups, where the rate table never gets touched, and technicians go back to typing custom clauses by hand for older equipment. Routine quotes still cache near ninety percent. The custom ones cost what they cost, honestly, instead of quietly eating a write fee for a block that was never going to be read twice.

Same rank as before: cache the part that's genuinely identical every time, and know which jobs don't qualify before you run them through it. Rafter's overall program cost fell about forty percent once the scope narrowed, even with the same total number of jobs going through it.

Swap the trigger and it still runs.
Speed: an interviewer caps you at ninety seconds. Skip straight to the fix, cache the exact block, put anything that changes after the cutoff, never inside it.
Cost: there's no budget this quarter to build a hit rate alert. Sample it, checking hit rate by hand on twenty calls a week beats reading a total spend line that can't tell a discount apart from more volume.
The model got better, for real: say Pellwick's underlying model gets upgraded to a newer version. That's not proof the cache is still matching. A better model can answer just as well on a full price call as a cached one, so it hides a broken cache even more completely.

Where people run it wrong.
They read a healthy total spend line as proof caching still works, and never check hit rate on its own.
They let something get inserted ahead of the cache breakpoint, a timestamp, a request id, a customer note, without checking whether it breaks the match.
They cache a block that's only ever going to be read once, and count the write fee as a mystery loss instead of noticing it was never going to pay for itself.

How to use it live. Say the split out loud before answering: "is this block genuinely identical every time, or does it just look that way." Naming the split buys a beat to work out which one caching actually needs, instead of guessing out loud in front of the interviewer.

Flashcards (tap any card to flip it)

1 · THE FLIP FAMILY
What flip family is this?
Tap to flip
ANSWER
Over trust flip: checks sometimes, then stops checking at all, and fires when the change is good news. Here, Ilaria stops opening the cost dashboard once the discount holds steady for months.
2 · THE PERSON
Who is this answer about?
Tap to flip
ANSWER
Ilaria Alderton, the engineer who owns Pellwick's cost dashboard at Kelmscott, and built it herself three years before Pellwick existed.
3 · THE HABIT
What did she stop doing because it worked?
Tap to flip
ANSWER
Opening the cost dashboard every Monday morning to check cache hit rate and cost per ticket. She stopped once the line held flat and low for months.
4 · THE FLIP, IN THIS STORY
What's the two setting switch here?
Tap to flip
ANSWER
Checks the number every Monday, or trusts it completely and never opens it again. No middle setting once it had held flat long enough.
5 · THE OLD DECISION
What decision would you take back?
Tap to flip
ANSWER
Alerting on total daily spend instead of cache hit rate, because spend was already logged for the vendor report, and at the time ticket volume was flat enough that a real problem would show up fast.
6 · THE NUMBER
Fill in the blank: cost per ticket fell to about ___ cents once caching launched, and crept back to about ___ cents eleven weeks after a silent break.
Tap to flip
ANSWER
0.5 cents, then 1.1 cents. Almost exactly what it cost the year before caching existed.
7 · THE REPLAY
Same bad week, new design, what changes?
Tap to flip
ANSWER
A hit rate alert, paging below seventy percent for fifteen minutes, fires about twelve minutes after the same timestamp ships. Eleven weeks of full price billing becomes twelve minutes of it.
8 · CROSS-PRODUCT TRANSFER
Section 4 answers this same question again for a different product. Which product, and which flip family?
Tap to flip
ANSWER
Rafter, a quote drafting assistant at Renhurst Mechanical. Scope flip: the ops manager narrows Rafter to routine job types once custom clauses inserted into the rate table break the cache for one off jobs.

Check yourself Score: 0 / 0

True or false
1. True or false: because Pellwick's total daily spend never spiked overnight, the cache was still working fine.
  • True
  • False
Show hint
Check what else was rising at the same time as the total.
Show answer
False. Cache hit rate had crashed to three percent, but ticket volume was climbing for an unrelated reason, growth, so total spend kept a smooth upward shape and never tripped the alert.
Multiple choice
2. Why didn't the discount just get a little smaller once the tracing timestamp got added to the front of the prompt?
  • A. The model started answering more slowly.
  • B. A cached block only earns a discount on an exact match, so one different token ahead of the cutoff drops the whole block to full price.
  • C. Kelmscott's support raters were grading the wrong number.
  • D. The refund policy text changed that same week.
Show hint
Think about what "matches exactly" actually requires from the very first token.
Show answer
B. Caching pays for an exact match up to the cutoff. A timestamp added ahead of it means every call now sends a slightly different block, so none of them match the saved one, and all of them pay full price.
Fill in the blank
3. Once caching launched, hit rate held near ___ percent. After the timestamp shipped, hit rate fell to about ___ percent, but the alert Kelmscott had only watched ___.
Show hint
Look at the block key box in Section 1, right after the second chart.
Show answer
Ninety one, three, total daily spend. A hit rate that low should have been obvious, but nothing was actually tracking it as its own number.
Short answer, name the rejected alternative
4. What alternative did the team consider instead of a hit rate alert, and why does it lose?
Show hint
Look at the "three things worth stating directly" paragraph after the S step.
Show answer
Model answer: Tightening the total spend alert's threshold instead of building a hit rate chart. It fails because a climbing spend total can mean more tickets at the same price, or the same tickets at full price, and a dollar figure alone can't tell those two apart.
Short answer, apply it yourself
5. Pick an AI product you use yourself that probably reuses part of its prompt across calls. What part of it is likely cached, and what small change to how you use it would break that match?
Show hint
Think of a tool where you paste the same file, document, or instructions in more than once.
Show answer
Model answer: A coding assistant that pastes the same file into every question likely caches that file as the shared block. Reordering the file, or adding a comment above the part it reads first, changes the exact text ahead of the cutoff, so the next answer pays full price even though it looks like the same conversation.
Multiple choice
6. Renhurst's routine quotes cache at close to ninety percent and cost about a third of the pre caching price. If technicians started inserting a custom clause into half of all quotes instead of one in six, what would you expect?
  • A. Average cost per quote would fall further, since Rafter handles more jobs.
  • B. Average cost per quote would rise, because more quotes would break the cache and pay a write fee that never gets read again.
  • C. Cache hit rate would stay the same either way.
  • D. Nothing would change, since the rate table itself never changes.
Show hint
Think about how many quotes would now be inserting text ahead of the cache breakpoint.
Show answer
B. More quotes touching the customizable clause means more quotes breaking the exact match, so more of them pay full price plus a write fee that's never read again, pulling the average up.
Before you close the answer
Why this works
Tests whether you understand caching's discount as a binary match, not a volume dial, and whether you'd watch the leading number, hit rate, instead of trusting a total that can hide a break inside real, ongoing growth.
Follow-up traps
"Couldn't you just cache more of the prompt to cover more ground?" Response: caching more only helps if that larger block still matches exactly every time. Caching a part that changes even slightly just means paying the write fee on a bigger block for nothing.

"Why not alert on total spend and hit rate both?" Response: worth doing, but hit rate is the one that actually catches this bug. Total spend still earns its place for the vendor report, it's just never going to catch a silent cache break hidden inside real ticket growth.
If pressed
Caching also has a time limit. Most providers hold a cached block for only a few minutes before it goes cold. So a conversation with long gaps between calls, or a slow trickle of traffic to one exact prompt, never earns the discount either, even when nothing about the prompt is broken at all.
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