ConceptAdvancedQuality, Cost & Token Economics / Pricing AI products: seat, usage, outcome / #22

Explain how to structure pricing so cost increases do not require a repricing.

SPARK · pricing structure for an AI code review tool

A tool that reviews every pull request can price itself once and forget about it, right up until the model has to get better and the cost behind that number stops sitting still. This is about what to build into the price on day one, so a rising cost never turns into an email nobody wants to send.

The direct answer
Sell one flat unit, a review credit, one per pull request, and never let that number reveal which model actually read the code behind it. Route each pull request to a model tier by what it touches, payment and auth code always gets the strongest model, never by how much budget is left that month, and price the credit with a margin buffer built for the worst realistic cost swing. A rising cost gets absorbed inside that routing and that buffer, not inside an email announcing a new price.
Do this, in order
  1. Sell one flat, model-blind unit: a review credit, priced the same no matter which model reads the code.Why: the customer-facing number can only stay still if it was never tied to a specific model or token count in the first place.
  2. Route each pull request to a model tier by what it touches, never by how much budget is left.Why: a cap that reacts to margin pressure quietly downgrades the exact pull requests, payment and auth code, that most need the stronger model.
  3. Build the margin buffer into the credit price at launch, sized for the worst realistic cost swing, not today's cost.Why: a buffer sized off month-one numbers looks generous right up until the model needs to get better.
  4. Track cost per credit and margin by risk tier separately from revenue, every month.Why: a blended margin can look healthy for months while the high-risk slice is already underwater.
  5. When the buffer runs out, fix the risk classifier or the infrastructure cost first, treat repricing as the last lever.Why: most margin problems are a routing problem wearing a pricing problem's clothes.
  6. Don't build dynamic per-PR pricing or expose token counts to the customer on day one.Why: it would hand back the exact unpredictability the flat credit exists to remove, for a problem the routing and buffer already solve.

How to answer this, stage by stage

Nobody is grading whether you can name a pricing model, usage-based, seat-based, tiered. They're grading whether you know that inference cost moves on its own, and whether you built anything that absorbs that move without a customer ever seeing it.

1
Scope it to one paying account, not a policy question
Say it like this
"Let's ground this in one account. Patchlight is a code review tool, it reads every pull request and flags bugs before a person looks. Deniz Sokolowski is the co-founder who owns pricing. Arvo Vandermolen is VP of Engineering at Norstead Systems, and his team's pull requests kept getting bigger every quarter."
Why this works
Keeps the answer from turning into a list of pricing terms nobody can picture.
2
Say the structure out loud before naming a price
Say it like this
"I'll walk this as SPARK. Situation: what the account looks like today, without a fix. Payoff: what habit I want the pricing to build. Anchor: the one design decision. Risk: what breaks if I'm wrong. Keep out: what I'm not building yet."
Why this works
Two seconds of structure stops the answer turning into a ramble about pricing philosophy.
3
Reframe what the question is actually testing
Say it like this
"This isn't really asking me to name a pricing model. It's asking whether I understand that inference cost isn't fixed, it moves as the model gets better or the input gets bigger, and whether I built anything that survives that move without a customer ever seeing it."
Why this works
Separates a real answer from a list of common pricing models with no judgment behind it.
4
Give the anchor as the one decision
Say it like this
"Here's the fix. Sell one credit, one pull request reviewed, same price no matter which model runs behind it. Route by what the pull request touches, payment and auth code always gets the strongest model, never by how much of the month's budget is left. Price the credit with a margin buffer sized for the worst cost swing I can imagine, not the cost I have today."
Why this works
This is the direct answer, said out loud, before any story about what went wrong.
5
Prove it with the near miss, cut to four sentences
Say it like this
"Here's what happens without it. Norstead's average pull request more than tripled in size over five quarters, and once we'd already used the month's premium-model budget, a webhook signature-check refactor got the cheap model instead of the strong one. It missed a broken check that let replayed webhook calls duplicate payouts, and Norstead's own fraud team caught it eleven days later, after about fourteen thousand dollars had already gone out the door twice."
Why this works
Shows a real, countable cost, not just "the model missed something."
6
Say what you'd measure, and what the routing can never see
Say it like this
"I'd track margin by risk tier, not just blended margin, because a healthy average can hide a high-risk slice that's already underwater. And I'd never let the router check the account's remaining budget before deciding which model reads a payment or auth change. That's the one thing routing can never be allowed to see."
Why this works
Shows judgment about which number is dangerous to ignore, not just which number to watch.
7
Say what you'd deliberately leave for later
Say it like this
"I wouldn't build dynamic per-pull-request pricing or show customers a token count. That's exactly the unpredictability the flat credit is supposed to hide, and nobody's asked for it yet. If the buffer and the routing are doing their job, a customer never needs to see any of that."
Why this works
Shows the answer is a specific, bounded decision, not "add more controls."
8
Close on the decision, not the story
Say it like this
"So: one flat credit, model-blind to the customer, routed by risk instead of budget, priced with a buffer sized for the worst swing. Norstead's bug didn't happen because the price was too low. It happened because for one pull request, the price was quietly deciding which model got to look."
Why this works
Restates the direct answer in one breath, leaves the interviewer with the decision, not just the incident.

Let's learn

Here is what happens when a tool's own cost of thinking creeps up quietly, long after the price was ever set.

Patchlight is a tool that reads every pull request a team opens and flags bugs, security issues, and style problems before a person reviews it.

Hand sketched left to right flow diagram titled Before Patchlight, a pull request reviewed by hand. Five rounded boxes connected by arrows: PR opened, Two engineers assigned, Diff read line by line, this box outlined to mark the step Patchlight replaces, Comments left, Merged 35 minutes later.
Before Patchlight, two engineers read every diff by hand, about thirty five minutes each, for pull requests landing roughly ninety times a week.

With Patchlight, that same pull request gets a first pass in under a minute. Norstead Systems signed on sixteen months ago: four thousand review credits a month, thirty cents each, one credit per pull request, no matter how big the diff or which model actually read it. Behind that flat number, Patchlight's own cost to run the review sat at about four cents, a small, cheap model reading diffs that averaged ninety lines changed. Eighty seven cents of margin on the dollar, and nobody at Norstead ever asked what a credit cost to deliver, because the bill matched the invoice every single month.

Hand sketched two panel comparison titled What Norstead sees, and what Patchlight absorbs. Left panel a document icon labeled What Norstead sees, caption one flat credit, 30 cents, every pull request. Right panel a gauge icon labeled What Patchlight absorbs, caption cost per review quietly climbing behind the price.
One flat number on Norstead's side. A moving number on Patchlight's side. Nothing in the price connected the two.
Knowledge spark: what actually drives the cost of an AI code review? Two things. How much text the model has to read, a bigger diff means more tokens in, and which model reads it. A small, cheap model costs pennies. A bigger model, the kind that catches a subtle bug buried in a refactor, can cost ten times as much for the same pull request.

Norstead's codebase grew into a single monorepo over those sixteen months, and pull requests grew with it. The average diff size climbed from ninety lines changed to three hundred and ten, over five quarters, as more of the company's code lived in one place and touched more of it at once.

Average pull request size at Norstead, lines changed, by quarter
320 160 0 near miss, PR 3,912 90 140 195 250 310 Q1 Q2 Q3 Q4 Q5
Average lines changed per pull requestQuarter of the near miss
The size more than tripled in fifteen months. Nothing about the thirty cent price ever moved to match it.

Here's the turn. A pull request three times the size is not, by itself, a crisis. The real problem is what happens next, when nobody has built anything to absorb that rise. Someone reaches for the fastest lever within reach: cap the expensive model, quietly, and let the cheap one take whatever's left over.

Margin per review credit, three ways to handle the same rising cost
90% 0% -40% 63% Same cheap model for everyone -40% Force strong model on every PR 37% Route by risk, not by budget
Cheap, but quality erodesUnderwater on day oneThe anchor, healthy and steady
Keeping the cheap model everywhere protects margin and breaks quality. Forcing the strong model everywhere protects quality and goes underwater. Routing by risk is the only one of the three that holds.

At its worst, that quiet cap did real damage. On the larger diffs Norstead was now shipping, the cheap model's own catch rate for a planted auth bug, checked against Patchlight's eval set, had already slipped from eighty nine percent down to fifty eight percent, just from the size of the diff. Capping the strong model on top of that meant the exact pull requests most likely to hide something serious were the ones most likely to get the weaker read.

Hand sketched labeled parts diagram titled Inside one review credit. Central document icon labeled Review Credit, 30 cents, with four labeled parts around it: risk score at intake, cheap model tier, strong tier for payment and auth, margin buffer band.
Four things sitting behind one flat number. The customer only ever sees the number.
The choice that mattered Patchlight launched with one model tier for every pull request, chosen once, because at launch nobody's diffs were big enough for a second tier to matter. That was fine for a year. It stopped being fine the day a rising cost needed somewhere to go besides the price.

What I would leave alone: the thirty cent sticker price itself, and the one credit, one pull request abstraction. That part is good and worth keeping at any size. Small pilot accounts under a few hundred pull requests a month don't need the full risk classifier either, running everything on the strong model there is cheap enough in absolute dollars that the extra machinery would only slow a champion down for a threat that hasn't shown up yet.

The lesson: a pricing conversation about cost was never really about the price. It's about whether the routing behind that price was ever built to answer to anything but the price itself.

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 fourteen thousand dollars moved before anyone but a fraud team noticed.

Deniz Sokolowski built Patchlight's pricing the way she built everything: with the invoice already imagined before the feature shipped. Two years running pricing and packaging, and she'd never once had to explain a bill to a confused customer. The math was clean on purpose. One credit, one pull request, thirty cents, whatever ran behind the screen was Patchlight's business, not the customer's.

For most of a year, that cleanliness held. Norstead Systems signed on early, four thousand credits a month, and Arvo Vandermolen, their VP of Engineering, never once emailed to ask what a credit actually cost to deliver. He didn't need to. The bill matched the invoice every month, and Patchlight's own margin sat quietly in a spreadsheet nobody outside the company read.

Hand sketched timeline titled The habit thinning, three beats before the flip. Four milestones: months 1 to 8, Deniz checks every routing change. Month 9, review handed to on-call. Month 13, premium cap added unreviewed. Month 16, highlighted, PR 3,912 hits the cap.
Eight months of a two minute habit, then two quiet handoffs, before the cap that mattered ever reached her desk.

It thinned in three beats, same as anything that erodes instead of breaking. In the first eight months of Norstead's monorepo migration, Deniz personally read every change to the routing configuration before it deployed, a two minute habit, checking that payment and auth paths still forced the strong model no matter what. By month nine, with the monorepo three times its original size and pull requests growing to match, she'd handed that review to whoever was on call that week, just to move faster. By month thirteen, when an engineer added a monthly cap of a hundred and fifty premium reviews per account to keep a ballooning infrastructure bill in check, nobody brought the change back to her at all. On paper it looked like an infrastructure fix. It was a pricing decision wearing an infrastructure fix's clothes.

The trigger wasn't the size of the bug. It was one message. Arvo forwarded a ticket from Norstead's own fraud team, eleven days after a pull request called #3,912 had merged, with one line typed above it: "Why didn't Patchlight catch this."

Pull request #3,912 refactored the signature check on Norstead's payment webhook handler. It landed on day twenty three of the billing cycle, after Norstead had already used all one hundred fifty of its premium reviews that month. So it fell to the cheap tier, the way anything did once the cap was hit, no matter what it touched. The cheap model missed a broken check that let a replayed webhook call slip through twice. Duplicate payouts went out on the same transaction. By the time the fraud team traced it, about fourteen thousand dollars had already moved, and it took roughly thirty hours of cleanup to unwind it.

We did not lose fourteen thousand dollars to a bug. We lost it to a cap nobody remembered was a pricing decision.
Hand sketched two panel comparison titled Same bug, two ways to route it. Left panel a gauge icon labeled Routed by budget, caption cap hit, cheap model reads the webhook fix, bug ships. Right panel a scale icon labeled Routed by risk, caption payment path always gets the strong model, bug caught pre merge.
Same pull request, same bug hiding in it. Only the reason it got the cheap model changed.

Fifteen months earlier, in a meeting that ran fifteen minutes, Patchlight's two person go-to-market team decided the product would launch with a single model tier, one setting, for every pull request. Somebody asked whether they should build the risk-based routing in from day one. The answer was no. It was the reasonable call. The company's biggest account at the time sent maybe forty pull requests a week, none of them over a hundred lines.

Run the same day again, with the risk classifier live from the start. Pull request #3,912 gets flagged high risk the moment it's opened, because it touches a payment webhook path, not because of anything about the calendar or the month's budget. It routes to the strong model automatically, cap or no cap, and the broken signature check gets flagged in the same review pass, in under two minutes. Norstead's blended cost for that account that month lands around nineteen cents a credit, margin down to thirty seven percent from the eighty seven percent it started at, but still healthy, still inside the buffer Patchlight built for exactly this. Nobody has to write an email about a new price.

One design let a shrinking monthly budget decide which model read the code. The other let the code decide, and let the budget absorb whatever that decision cost.

What I'd tell myself, back in that fifteen minute meeting: the one-model decision wasn't wrong for the product that existed then. It was wrong for the product everyone already knew Norstead's engineers were going to grow into, one merge at a time. Ask how big the diffs get before deciding the routing can wait.

SPARK, or the five decisions behind one credit that never has to move

Not a list of pricing models to pick between. SPARK names the one design decision a rising cost has to run into before it ever reaches a customer, and asks what breaks the day that decision is wrong.

Hand sketched numbered list titled SPARK, one line each. Five rows: S, situation, price blind to cost. P, payoff, trust the flag once. A, anchor, route by risk not budget, in a different color. R, risk, a cap silently downgrades. K, keep out, no dynamic pricing yet.
Five letters. The anchor is the one the whole answer hangs on.
SSituation. How does the job get done today, without you?
Norstead's pull requests get one flat credit's worth of review, same price no matter which model reads it, and nobody sees what that review actually costs behind the screen.
In this answer: Patchlight priced the credit once, off the cost of the model it launched with, and never revisited it as pull requests grew.
PPayoff. What habit do I want this to build?
The habit worth protecting is Arvo trusting Patchlight's flag on a payment-code change without re-reading the whole diff himself.
In this answer: that trust only holds if the strongest model is the one reading payment and auth code, every time, no exceptions.
AAnchor. What's the one decision everything else hangs on?
Route every pull request to a model tier by what it touches, never by what's left in the monthly budget, and price the credit with a margin buffer sized for the worst swing.
This is the actual answer to the question. It's how a rising cost gets absorbed without anyone touching the sticker price.
RRisk. What breaks the first time I'm wrong?
If the router ever checks the budget before the risk, the exact pull request that needs the strong model gets the cheap one instead, silently.
In this answer: that's exactly what happened to PR #3,912, and it cost fourteen thousand dollars before anyone but the fraud team knew.
KKeep out. What am I deliberately not building yet?
No dynamic per-pull-request pricing, no exposed token counts, no negotiated custom pricing per account. All three would hand back the unpredictability the flat credit exists to remove.
In this answer: the diagram below is what stayed on the whiteboard, not in the product, on day one.
Hand sketched decision tree titled What we build now, and what waits. Root: how does a rising cost get handled. Four branches: flat credit with risk routing leads to build now. Dynamic per pull request pricing leads to not day one. Exposed token counts leads to not day one. Negotiated price per account leads to not day one.
One branch shipped. Three stayed on the board on purpose.

Three things worth stating directly, since this is where the real judgment sits. The alternative Patchlight's team considered, and rejected, was forcing every pull request onto the strongest model the moment the average diff size started climbing, uniform quality, no routing logic to build. It lost because at Norstead's real volume that blends out to forty two cents a review against a thirty cent price, a design that goes underwater the day it ships, not months later. The AI-specific failure worth naming by name is silent quality drift under cost pressure: a model tier gets swapped or capped for reasons that have nothing to do with what the code actually needs, and nobody notices until a bug that should have been caught gets through. The guardrail is the risk classifier itself, reading the changed file paths before the router ever checks the account's remaining budget, so a payment or auth change can never be assigned by anything but its own risk. And the trade-off is real: routing by risk instead of by cost means Patchlight sometimes runs the expensive model on a pull request that turns out to be harmless, eating margin on purpose, in exchange for never once explaining to a customer why the model missed something it was supposed to catch.

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

Same five letters, a radiology read instead of a pull request, and this time the thing that grows isn't diff size. It's image resolution.

Where a Clarolens read credit's cost comes from, routine vs urgent path
$0.60 $0.30 0 $0.12 +$0.10 Routine follow-up $0.12 +$0.38 Chest pain, stroke code
Base read, every imageHigher resolution surchargeUrgency-tier premium model
Both bars sell for the same sixty cent credit. What builds each one is invisible to Greywick, and only one of the two builds is a resolution problem.

Sigrun Oakvane runs imaging operations at Greywick Diagnostic Imaging. Clarolens reads chest and limb X-rays for anomalies, one flat sixty cent read credit, same price no matter which scanner took the image. As Greywick upgraded its scanners from two megapixels to fourteen over eighteen months, the cost to run Clarolens's vision model on each image climbed right along with the resolution.

The rejected alternative here: a resolution-tiered price, charging more for a higher-resolution image. It was on the table and it lost, because it's a repricing event wearing a different name, the number a clinic pays would still move every time a scanner gets upgraded. Instead, Clarolens routes by clinical urgency tag at intake, chest pain and stroke-code scans always get the top model tier, routine follow-ups get the cheap one, and the sixty cent price never has to know which scanner took the picture.

Swap the trigger and it still runs.
Speed: an interviewer caps you at ninety seconds. Skip straight to it: route by what the pull request touches, not by what's left in the budget, full stop.
Cost: there's no engineering budget this quarter for a real risk classifier. Ship the cheap version first, a manual list of protected paths, payment, auth, migrations, checked by a simple rule instead of a trained model.
The model got better, for real: say Patchlight's cheap tier doubles in accuracy overnight. The fix barely changes. A well-built router still decides by risk, it just gets to run more pull requests through the cheaper tier without giving anything up.

Where people run it wrong.
They let the price track the underlying cost directly, a resolution surcharge, a per-token line item, and end up with the very unpredictability the flat unit was supposed to remove.
They watch blended margin only, and miss that the high-risk slice of their volume has already gone underwater while the average still looks fine.
They fix a margin problem by adding a cap, which protects the number this month and quietly breaks quality on exactly the inputs that mattered most.

How to use it live. Say the split out loud before answering: "is the cost actually rising because the model changed, or because what customers are sending it changed, because those need two different fixes." That buys a beat, and shows the interviewer you know a model upgrade and a shifting input distribution aren't the same problem.

Flashcards (tap any card to flip it)

1 · THE FRAMEWORK
What framework is this, and what's its one job?
Tap to flip
ANSWER
SPARK: design against the failure before you build. Built for design questions, including how to structure a price so it survives a cost it hasn't hit yet, not a single number to defend.
2 · THE PERSON
Who is this answer about?
Tap to flip
ANSWER
Deniz Sokolowski, the co-founder who owns pricing at Patchlight. Two years pricing every plan the company has shipped, and never once had to explain a bill to a confused customer, until this account.
3 · THE SITUATION
What was Patchlight's pricing blind to, before the fix?
Tap to flip
ANSWER
Which model actually read a given pull request, and how much that model cost to run. The credit price never moved, but the cost behind it climbed as diffs grew, invisibly, for over a year.
4 · THE ANCHOR
What's the one design decision this whole answer turns on?
Tap to flip
ANSWER
Route every pull request to a model tier by what it touches, payment and auth code always gets the strong model, never by how much of the monthly budget is left, and price the credit with a margin buffer sized for the worst swing.
5 · THE OLD DECISION
What decision would you take back?
Tap to flip
ANSWER
Launching with a single model tier for every pull request, chosen once, with no risk-based routing built in, because at launch nobody's diffs were big enough to need a second tier.
6 · THE NUMBER
Fill in the blank: the credit sold for $___. Forcing every pull request onto the strong model would have cost $___ a review, more than the price itself.
Tap to flip
ANSWER
$0.30 per credit. $0.42 a review if every pull request ran on the strong model, a margin of negative forty percent, underwater from day one.
7 · THE REPLAY
Same near miss, new design, what changes?
Tap to flip
ANSWER
PR #3,912 gets flagged high risk by file path alone, cap or no cap, and routes to the strong model automatically. The bug is caught pre-merge, in under two minutes, instead of found eleven days later by the fraud team.
8 · CROSS-PRODUCT TRANSFER
Section 4 answers this same question again for a different product. Which product, and what's the different anchor?
Tap to flip
ANSWER
Clarolens, a radiology read tool at Greywick Diagnostic Imaging. The anchor routes by clinical urgency tag instead of pull-request risk, and the rejected alternative is a resolution-tiered price, which is a repricing event wearing a different name.

Check yourself Score: 0 / 0

True or false
1. True or false: Patchlight's thirty cent credit price had to increase because Norstead's pull requests got bigger.
  • True
  • False
Show hint
Check the direct answer and the priority list. What was the price ever supposed to know about the model behind it?
Show answer
False. The price never moved. The rising cost was absorbed by risk-based routing and the margin buffer built into the credit at launch, not by a new sticker price.
Fill in the blank
2. Norstead's average pull request size grew from ___ lines changed to ___ lines changed over five quarters.
Show hint
It's the number behind the line chart in Let's learn, and the driver of the whole cost problem.
Show answer
90 to 310 lines changed. That growth is what pushed the cheap model's real cost up, and what eroded its catch rate on planted auth bugs from 89 percent to 58 percent.
Multiple choice
3. Why did pull request #3,912 get reviewed by the cheap model, even though it touched payment code?
  • A. The strong model was down for maintenance that week.
  • B. Deniz personally approved routing it to the cheap tier to save money.
  • C. Norstead had already used all 150 of its monthly premium reviews, and the cap silently fell back to the cheap model for anything after that.
  • D. Arvo requested the cheap model to speed up the merge.
Show hint
Look at what day of the billing cycle the pull request landed on, and what had already happened that month.
Show answer
C. The premium-review cap, added as an infrastructure fix, quietly downgraded any pull request after the 150th one that month, no matter what it touched.
Short answer, name the rejected alternative
4. What alternative fix did Patchlight's team consider and reject, and why did it lose?
Show hint
Look at the closing paragraph of the SPARK recap section, right after the leftforlater diagram.
Show answer
Model answer: Forcing every pull request onto the strong model the moment diff sizes started climbing. It lost because at Norstead's real volume that blends out to forty two cents a review against a thirty cent price, going underwater the day it shipped.
Short answer, apply it yourself
5. Think of a product you pay a flat monthly price for. What's one thing about how it's built behind the screen that could quietly get more expensive for the company, without you ever seeing the price change?
Show hint
Think about anything the company runs on your behalf that scales with how much you actually use it, not just whether you have an account.
Show answer
Model answer: A flat-priced photo backup app could see its own storage cost climb as you take more and larger photos each year. The company either built in a buffer for that from day one, or it eventually has to reprice or quietly cap what "unlimited" really means.
Short answer, work the number
6. If Patchlight had never built the risk-based router and just kept the original single cheap model tier forever, would the thirty cent price have survived, and what would the cost have been?
Show hint
Look at the margin chart in Let's learn, the "same cheap model for everyone" bar specifically.
Show answer
The price itself would have survived, but not the product. Cost would have settled around eleven cents a review, sixty three percent margin, but the catch rate on real bugs would have kept sliding as diffs grew, since the cheap model was never built to reason over larger, more tangled changes.
Before you close the answer
Why this works
Tests whether you understand that inference cost is a moving target, not a fixed line item, and whether you designed the price to survive that movement instead of reacting to it after the fact.
Follow-up traps
"Isn't a margin buffer just hiding the real cost from the customer?" Response: no, it's insurance the company pays for by pricing conservatively at launch. The customer's number stays honest and flat either way, the buffer only decides who absorbs a swing.

"What happens when the buffer actually runs out?" Response: fix the risk classifier's precision or the infrastructure cost first, since most margin problems are a routing problem in disguise. Repricing only comes after those are exhausted, and it's a planned conversation, not a surprise.
If pressed
The risk classifier itself isn't a trained model at first. It's a rule reading changed file paths against a protected list, payment, auth, migrations, infra. A learned classifier only replaces that list once there's enough labeled routing history to train it without guessing, months into the account, not on day one.
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