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

Describe the latency requirements section and how you would derive its numbers.

The direct answer
Write the latency section as a chain of real pipeline stages, not one guessed number. List each stage's low and high time, add them up for a low and a high total, then say out loud which single stage's guess would blow the whole budget if it turned out wrong. A round number with no parts is not a requirement, it's a hope with a deadline attached.
Do this, in order
  1. Break the target into the real stages the request actually passes through, then add them up.Why: a single number hides which part of the system is actually slow, so nobody knows what to fix when it breaks.
  2. Give every stage its own number, with a reason for that number, not a guess pulled from the whole budget.Why: a stage nobody owns is a stage nobody notices creeping up until the total is already wrong.
  3. Give a low total and a high total, split by which kind of request it is, not one figure for every case.Why: a fast in-app recap and a full shareable clip do genuinely different amounts of work, and one number for both is wrong for at least one of them.
  4. Check the total against something a person would actually feel, not just arithmetic.Why: a number can be correctly added up and still be too slow for the moment it's serving, and only a felt comparison catches that.
  5. Name the one stage whose assumption would swing the total the most, and say whether the team even controls it.Why: the stage that breaks the budget first is rarely the one that's easiest to speed up, and a spec that doesn't say so gets fixed in the wrong place.
  6. Put the range and the flagged stage into the PRD's own latency line, not just a spreadsheet next to it.Why: a number that only lives in a spreadsheet gets forgotten the first time someone's in a hurry to ship.

How to answer this, stage by stage

Six moves. The trap here is naming one number that sounds confident and hides seven different jobs inside it.

1
Scope it to one real feature
Say it like this
"Let me scope this. Say I'm a PM at Sideline Cut, an app that watches a live sports broadcast and turns a big moment into a short clip a fan can share before the next play starts. I'm writing the latency requirements section of the PRD for that clip pipeline."
Why this works
Grounds the section in one real product decision instead of a general lecture on speed.
2
Say what the section has to prove, before any number
Say it like this
"The section isn't there to say 'fast.' It's there to say exactly which parts of the system add up to the number, so that when the number is wrong, whoever's on call knows which part to look at first."
Why this works
Reframes the question from "pick a number" to "show your work," which is the whole point of BOUND.
3
Break the total into stages and own each one
Say it like this
"Seven stages: the feed buffer waiting for the broadcast's own replay angle, the model scoring whether it's a real highlight, trimming the clip, writing the caption, rendering and encoding it vertical, a rights check, and the push to the app. Each one gets a low and high time from what that stage actually does, not a slice of a round number."
Why this works
Shows the arithmetic instead of asserting a total, which is the difference between an estimate and a guess.
4
Split the total by which request it actually is
Say it like this
"On a quiet match, that's about 9 seconds. During the derby, with every stage under load and the broadcast slower to show its own replay, it's closer to 16. Both numbers go in the spec, not just the friendly one."
Why this works
A range beats false precision, and it warns the team about the day the number actually matters.
5
Hold the number up against something a fan would feel
Say it like this
"Does 16 seconds survive a smell test? A stadium's own replay truck already gets an instant replay on the big screen in about 10 to 15 seconds. If our clip lands in that window, it doesn't feel slow to someone who's already used to waiting that long. Past 20, the moment's gone and the clip feels like leftovers."
Why this works
Proves the number is checked against a real feeling, not just against its own arithmetic.
6
Close on the line that actually goes in the doc
Say it like this
"So the spec reads: clip delivery is 9 to 16 seconds, built from seven owned stages, and the feed buffer waiting on the broadcast's own replay angle is the one stage that can blow the high end past 20, because it's the one stage we don't control."
Why this works
Ends on a sentence someone could paste straight into the PRD, not a vibe about "fast enough."
If you remember one thing A latency number with no parts is a guess wearing a deadline's clothes. Add up the real stages, and say which one you don't actually control.

Let's learn

Here's what happens when a single confident number in a PRD meets the one night it was never tested against.

Say Sideline Cut, an app that watches a live match and turns a big moment into a clip a fan can post before the next kickoff, promises a clip inside "10 seconds" of the moment happening. That's the whole latency requirement, one line, one number, written before launch.

On an ordinary Tuesday fixture, that number holds fine. Traffic is light, one clip renders at a time, the broadcast cuts to its own replay quickly, and the app's clip lands around 9 or 10 seconds after the goal. Nobody questions the line. It works, so nobody opens it up to see what's actually inside it.

Then a derby comes along, the two biggest clubs in the league, Cliffgate FC against Northmoor United, watched by ten times the usual crowd. Every big moment now triggers a highlight, sometimes three inside a minute. The render stage, which usually handles one clip at a time, is suddenly queuing four. The broadcast's own production truck, busy with its own big night, takes longer to cut to a replay angle. The clip that used to land at 10 seconds now lands at 24.

Knowledge spark: what is a render queue? A line of jobs waiting for a limited pool of machines built to cut and compress video. When one job finishes, the next one starts. Add more jobs than machines at the same moment, and every job behind the first one waits longer, even though nothing about any single clip changed.

Here's the turn. Fourteen extra seconds is not really the problem. The real problem is that nobody can say why. The PRD's one line, "clip ready in 10 seconds," never said which of the seven jobs inside that promise was allowed to be slow and which one wasn't. So when the derby broke the number, the on-call engineer didn't know whether to look at the render queue, the broadcast feed, or the caption model. He had to check all seven, live, while a sponsor's real-time promo was counting down.

We didn't promise a clip in ten seconds. We promised a guess with a deadline attached, and nobody knew which part of the guess was load-bearing.
# the build-up, per stage, in milliseconds
Feed buffer (waits on the broadcast's replay angle): 4,000 low to 6,800 high
Highlight scoring (is this a real moment): 700 low to 1,200 high
Clip trim (pick the start and end frame): 300 low to 500 high
Caption generation (write the on-screen line): 500 low to 1,000 high
Render & encode (cut, overlay, compress vertical): 2,000 low to 4,000 high
Rights check (inside the broadcast's allowed window): 300 low to 500 high
Push to app (CDN, notify device): 1,200 low to 2,000 high

# totals
Low total (quiet match): 9,000 ms ≈ 9.0 seconds
High total (derby, every stage under load): 16,000 ms ≈ 16.0 seconds
The build-up: seven stages, low case and high case
Quiet match
Buffer 4.0s
Render 2.0s
Push 1.2s
9.0s
Derby, full load
Buffer 6.8s
Render 4.0s
Push 2.0s
16.0s
Feed buffer Highlight score Trim Caption Render & encode Rights check Push
Seven stages, added up, not one guessed figure. The gap between 9.0 and 16.0 seconds isn't noise, it's two of the seven stages, buffer and render, genuinely doing more work on a busy night.

Here's what that costs at its worst. Sideline Cut had promised a betting partner clips inside 20 seconds for marquee matches, part of a live odds-boost promo running during the derby. At 24 seconds, the app was already outside that line, and nobody in the room could say with confidence which stage to trim first, because the PRD had never separated them.

Which stage's assumption swings the total the most
Feed buffer, waiting on the broadcast's own replay angle+2.8s
Render & encode, queue depth under load+2.0s
Push to app, CDN during a traffic spike+0.8s
All three measured as the swing from that stage's low to its high figure. The feed buffer moves the total more than any other stage, and it's the one stage Sideline Cut doesn't control: it's set by how fast the broadcast's own production truck decides to show a replay.

The choice I would take back. Writing the requirement as one merged number, "10 seconds," instead of seven owned stages added together. That was fine before launch, when only quiet matches existed to test it against. It stopped being fine the first night traffic and the broadcast's own pace both moved at once.

What I would leave alone. Sideline Cut also builds a weekly "team of the week" reel, assembled and emailed out on Monday morning. Nobody is refreshing their phone waiting for that one. It could take four minutes and nobody would notice. Speed only matters where somebody is holding a moment while they wait.

The lesson. A number with no parts is a guess wearing a deadline's clothes. The fix was never a faster pipeline. It was writing down which ten seconds we were actually promising.

Now here is the same thing as a story

The short version is above. Read on if you want to feel why a spreadsheet cell almost cost a sponsor deal.

Farai Chikwava has been the product lead on Sideline Cut's clip pipeline since it was three engineers and a whiteboard. She wrote the very first version of the latency requirement herself, back when the whole feature was: watch the feed, spot the moment, cut a clip, ship it. "Ten seconds" felt honest at the time, because ten seconds was roughly what it took, and nobody had reason to ask what was inside that number.

For most of a season, that line in the PRD did its job quietly. Ordinary matches, ordinary traffic, clips landing around 9 or 10 seconds after the whistle. Farai would glance at the dashboard once a week, see the average sitting where it should, and move on to the next thing on her list.

The clip pipeline drawn as seven stages in a row, feed buffer through highlight score, trim, caption, render and encode, rights check, and push to app, with render and encode circled as the stage that backed up on derby night
Seven jobs hiding inside one number. On a quiet night, none of them fought each other for room.

The derby between Cliffgate FC and Northmoor United landed on a Saturday in March. Ten times the normal crowd, on the app and in the stands. Farai wasn't even on call. She was watching the match at home, phone in hand like every other fan, when the clip of the opening goal still hadn't shown up in her feed a full twenty seconds after she'd already seen the replay on television.

She refreshed. Still nothing. Then it landed, 24 seconds after the goal, well past the 20-second line the team had promised a sponsor for a live odds-boost promo running that exact match.

Casimir Okoro was the engineer on call that night. He got the same alert Farai did, a queue depth warning on the render service, four clips deep and climbing. He had about ninety seconds to decide what to do before the next big moment made it worse. He didn't know, at a glance, whether the slow part was the render queue, the broadcast feed being slower to show its own replay angle, or something in the caption step. The PRD had one number in it. It didn't say which of seven jobs was allowed to be the slow one tonight.

He guessed right. He paused two lower-priority renders manually, by hand, watching the queue the whole time, and the next clip landed at 19 seconds, just inside the sponsor's line. It worked. It also worked because Casimir happened to be good at his job and paying close attention on a Saturday night, not because the spec had told him what to do.

We didn't promise a clip in ten seconds. We promised a guess with a deadline attached, and nobody knew which part of the guess was load-bearing.

Monday morning, Farai pulled up the original PRD line, the one she'd written herself more than a year earlier. One sentence: "clips are delivered within 10 seconds." No stages. No owner per stage. No note that the feed buffer was ever going to be at the mercy of how fast a broadcast truck decided to cut to a replay, on a night that truck was also busier than usual.

She rewrote it as seven owned stages, a range from 9 to 16 seconds depending on match load, and one flagged line: the feed buffer, not the render queue Casimir had spent his Saturday night watching, was the stage most likely to blow the budget, because it's the one stage Sideline Cut has never controlled.

Cliffgate and Northmoor played again six weeks later. Render had its own reserved capacity for marquee nights by then, and the sponsor deal had been renegotiated around the feed buffer's real slack instead of a number nobody had checked. The worst clip that night landed at 15.6 seconds. Inside the line. Casimir didn't have to guess, live, which of seven jobs to touch, because the spec had already told him which one was allowed to be slow.

The part she'd go back and tell herself: I wrote down how fast it should be. I never wrote down what it was actually made of.

BOUND, run on Sideline Cut's ten-second promise

This is a sizing question hiding inside a spec-writing question, so BOUND fits and FLIPS doesn't. Nobody's habit snapped here. A number that was honest at launch quietly stopped covering the case it was actually going to be tested against.

Number line showing the clip pipeline's 9.0 second low bound and 16.0 second high bound, with a 15 second TV replay felt-wait comparison marked between them
The range against a feeling a fan already has. Both bounds sit near a wait people already tolerate for a TV replay.

B, break it down. Total clip time is the sum of seven real jobs: feed buffer, highlight scoring, clip trim, caption generation, render and encode, rights check, and the push to the app. Not one number standing in for all seven.
O, own the numbers. Each stage's low and high comes from what it actually does: 4.0 to 6.8 seconds for the buffer, because it waits on the broadcast's own replay angle; 2.0 to 4.0 seconds for render and encode, because that's where queue depth bites under load; smaller, tighter ranges for the rest.
U, use a range. 9.0 seconds on a quiet match, 16.0 on the derby with every stage under load. A single number can't cover both, and pretending it can is exactly what broke on Farai's Saturday.
N, nail the sanity check. A stadium's own replay truck already puts an instant replay on the big screen in about 10 to 15 seconds. A clip landing inside that window doesn't feel slow to a fan who's already used to that wait. Past 20 seconds, the moment's gone, and the clip reads as leftovers, which is exactly why the sponsor's line was set at 20.
D, direction. The feed buffer swings the total the most, 2.8 seconds of swing against 2.0 for render and 0.8 for the app push. And it's the one stage the team doesn't own: it's set by how fast the broadcast's own production truck decides to cut to a replay. Speeding up render, the part engineering actually controls, helps, but it was never the stage most likely to blow the promise.

What I would leave alone The weekly highlights reel, emailed out Monday morning, doesn't need any of this. Nobody is holding a moment waiting for it. Save the stage-by-stage budget for the requests where somebody's phone is already out.

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

Larkfield Surgical Systems builds an overhead-camera system that counts every instrument and sponge on the tray before an incision closes, and alerts the team if the count doesn't match the pre-op list. It slows down the same way, built from a completely different set of parts.

B, break it down. Total alert time is tray image capture and stabilization, plus the detection model counting each item, plus a cross-check against the pre-op manifest, plus rendering the alert to the OR display and pager. Four stages, not one flat number.
O, own the numbers. Capture runs 1.5 to 4.1 seconds, because a cluttered tray on a long, complex case needs more repositioning before the camera holds still. Detection runs 0.8 to 1.5 seconds. The manifest check and the alert render add another 0.6 to 1.4 combined.
U, use a range. 3.0 seconds on a simple procedure with a tidy tray, 7.0 on a complex one with dozens of instruments spread across a cluttered field.
N, nail the sanity check. Marit Ellingsen, Larkfield's eval lead, checked the number against something already happening in every OR: the scrub nurse's own verbal instrument count, a standard step that already takes 5 to 8 seconds before anyone closes. An alert landing inside that window is invisible, folded into a pause that was already there.
D, direction. Here it isn't an outside dependency that swings the budget, like Sideline Cut's broadcast truck. It's how cluttered the tray gets. Capture and stabilization swings 2.6 seconds on its own, more than every other stage combined, because a busy field takes longer to hold still for a clean read, whatever the model underneath does.

The old decision Larkfield would take back is a different shape from Farai's. Where Sideline Cut had merged seven stages into one guessed number, Larkfield had picked one flat default, "alert within 5 seconds," and applied it to every procedure type. That default was right for a simple case and quietly wrong for a complex one, the same way a single confident number is always right for the case it was measured against and wrong for the one it wasn't.

Swap the trigger and it still runs.
Speed: an interviewer asks how fast you'd ship a usable latency spec before Sideline Cut's playoff week. Same seven-stage equation, shipped first with the caption stage skipped, an overlay template instead of AI-written text, tightened once there's time to add it back.
Cost: engineering caps how many GPUs stay reserved for the render stage. Same equation, solved backwards: at that fixed budget, the highest total the team can promise rises from 16.0 seconds toward 19, so the sponsor's 20-second line has to be renegotiated to match what the budget can actually prove.
The model got better: a faster highlight-scoring model cuts that one stage's time in half. The total's high end barely moves, from 16.0 toward 15.4, because scoring was never the stage swinging the budget. Speeding up a stage that isn't the sensitive one buys almost nothing.

Where people run it wrong.
They write one round number in the PRD because it reads clean, then have no way to say which stage to check when the promise breaks under real load.
They test the happy path only and forget the request that skips a stage or adds one, so the number is right for the one case they measured and wrong for the busiest night of the year.
They chase the stage that's easiest to speed up, usually the one fully inside their own system, instead of the stage that actually swings the total most, which is often the one they don't control at all.

How to use it live. Say the equation out loud before naming a single number: list the real stages, then say you'll come back with a low and a high once each one has an owned assumption. That buys a few seconds to think, and tells the interviewer a real number is coming, not a guess dressed up as one.

Flashcards (click a card to flip it)

1 · THE FRAMEWORK
Which framework fits a question about how to derive the numbers in a latency requirements section, and why not FLIPS?
Tap to flip
ANSWER
BOUND. This is arithmetic behind a spec, a stage-by-stage sizing question, not a habit that snaps.
2 · THE PERSON
Who is this answer about?
Tap to flip
ANSWER
Farai Chikwava, product lead on Sideline Cut, an app that turns a live sports moment into a clip fans can share before the next play starts. She wrote the PRD's original latency line herself.
3 · THE HABIT
What did the team stop asking, because the one-number requirement worked fine on ordinary match days?
Tap to flip
ANSWER
Whether "10 seconds" was really one job or seven added together. It held on quiet Tuesday fixtures, so nobody ever checked which stage it was actually promising.
4 · THE EQUATION
State the latency build-up in one line.
Tap to flip
ANSWER
Total clip time equals feed buffer, plus highlight scoring, plus clip trim, plus caption generation, plus render and encode, plus rights check, plus push to app. Seven owned stages, added up.
5 · THE OLD DECISION
What decision would you take back, and why did it make sense at the time?
Tap to flip
ANSWER
Writing the requirement as one merged number, "10 seconds," instead of seven owned stages. It made sense before launch, when only quiet matches existed to test it against.
6 · THE NUMBER
Fill in the blank: added stage by stage, Sideline Cut's clip pipeline runs from about ______ seconds on a quiet match to about ______ seconds on the derby's full load.
Tap to flip
ANSWER
About 9.0 seconds to about 16.0 seconds. The seven stages add to 9,000 ms on a quiet match and 16,000 ms once the buffer and the render queue are both under load.
7 · THE REPLAY
Same derby, new spec. What changes?
Tap to flip
ANSWER
With the feed buffer flagged and render given its own reserved capacity for marquee matches, the next derby's worst clip lands at 15.6 seconds, comfortably inside the sponsor's 20-second line, not 24 seconds outside it.
8 · CROSS-PRODUCT TRANSFER
Section 4 answers this same question again for a different product. Which product, and which assumption swings its budget the most?
Tap to flip
ANSWER
Larkfield Surgical Systems' instrument-count alert. There it isn't an outside dependency, it's how cluttered the tray is: a complex procedure's image capture stage swings the total more than every other stage combined.

Check yourself Score: 0 / 0

Fill in the blank
1. Added stage by stage, Sideline Cut's seven-part clip pipeline runs from about ______ seconds on a quiet match to about ______ seconds on the derby's full render load.
Show hint
Add up the low figures for all seven stages, then the high figures.
Show answer
About 9.0 seconds to about 16.0 seconds. 4.0+0.7+0.3+0.5+2.0+0.3+1.2 = 9.0s low; 6.8+1.2+0.5+1.0+4.0+0.5+2.0 = 16.0s high.
Multiple choice
2. According to the sensitivity chart, which single stage's assumption swings the total budget the hardest?
  • A. Caption generation, because AI-written text is unpredictable.
  • B. The feed buffer, because it waits on the broadcast's own replay angle.
  • C. The rights check, because compliance rules change often.
  • D. The push to the app, because network traffic is the biggest unknown.
Show hint
Which bar on the sensitivity chart is longest, and is that stage inside or outside the team's control?
Show answer
B. The feed buffer swings by 2.8 seconds, more than any other stage, and it's set by the broadcast's own production truck, not by Sideline Cut's engineering team.
True or false
3. True or false: capping the video resolution so render and encode finishes faster is, on its own, enough to guarantee Sideline Cut never breaches the 20-second sponsor line again.
  • True
  • False
Show hint
Compare render's swing to the feed buffer's swing.
Show answer
False. Render swings the total by about 2.0 seconds, but the feed buffer swings it by 2.8, and capping resolution does nothing about a broadcast truck's own replay timing.
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 original PRD line was written, and what kind of match days existed to test it against.
Show answer
Model answer: Writing the latency requirement as one merged number, "clips in 10 seconds," instead of seven owned stages added together. It made sense before launch, when only quiet matches existed to test it against, so the merged number never got exposed.
Short answer, apply it yourself
5. Pick an AI feature you've used that answers you quickly most of the time, a chat assistant, a search box, a photo editor. If its maker told you "responses take 2 seconds," what would you want broken out before trusting that number on your worst day, not your average one?
Show hint
Think about how many real steps happen between you asking and it answering, and which one gets slower when everyone's using it at once.
Show answer
Model answer: The real stages behind that 2 seconds, and which one grows when traffic spikes. A single average hides the one stage that's fine on a quiet afternoon and the bottleneck during a busy evening.
Fill in the blank
6. If Sideline Cut doubled the render stage's GPU capacity, cutting its high end from 4.0 seconds to 2.0 seconds, the derby's new worst-case total would be about ______ seconds.
Show hint
Take the current 16.0 second high total and subtract exactly what render's high end drops by.
Show answer
About 14.0 seconds. 16.0s minus the 2.0 second cut to render's high end, with every other stage unchanged, including the feed buffer, which is why it's still the stage worth watching.
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